ITPub博客

首页 > 数据库 > 数据库开发技术 > 【大家的项目】Predawn - 一个类似 Spring Boot 的 web 框架

【大家的项目】Predawn - 一个类似 Spring Boot 的 web 框架

原创 数据库开发技术 作者:Rust语言中文社区 时间:2024-03-07 16:08:34 0 删除 编辑

Predawn

Predawn,一个类似 Spring Boot 的 web 框架。

在目前的 Rust 社区中,web 框架有很多,比如 axum、rocket、poem 等等,但是这些框架有一些问题,比如需要开发者添加一些模板启动代码、需要自己定义配置文件、没有自动依赖注入、集中式注册路由等等,有一些新的框架,如 loco、pavex 在尝试解决这些问题,但是它们的 API 设计对用惯了 Spring Boot 的我来说,还是不够顺手。

我决定写一个像 Spring Boot 那样的 web 框架。

要写 Spring Boot,先要写 Spring,所以我之前写了一个依赖注入框架 Rudi,目前已经发布到 0.8.1 版本,API 基本已经稳定了,可以用来写 web 框架了。

在 Rudi 的基础上,我完成了 Predawn 的第一个版本。

示例

use std::sync::Arc;

use async_trait::async_trait;
use predawn::{
    app::{run_app, Hooks},
    controller,
};
use rudi::Singleton;

struct App;

impl Hooks for App {}

#[tokio::main]
async fn main() {
    run_app::<App>().await;
}

#[async_trait]
trait Service: Send + Sync {
    fn arc(self) -> Arc<dyn Service>
    where
        Self: Sized + 'static,
    {
        Arc::new(self)
    }

    async fn hello(&self) -> String;
}

#[derive(Clone)]
#[Singleton(binds = [Service::arc])]
struct ServiceImpl;

#[async_trait]
impl Service for ServiceImpl {
    async fn hello(&self) -> String {
        "Hello, World!".to_string()
    }
}

#[derive(Clone)]
#[Singleton]
struct Controller {
    svc: Arc<dyn Service>,
}

#[controller]
impl Controller {
    #[handler(paths = ["/"], methods = [GET])]
    async fn hello(&self) -> String {
        self.svc.hello().await
    }
}

更详细的示例可以在仓库里面看到,虽然目前只有一个。

特性

  • 自动依赖注入。
  • 自动注册路由。
  • 内建 OpenAPI 文档生成。
  • 自动扫描配置文件。

Rudi https://github.com/ZihanType/rudi

Predawn https://github.com/ZihanType/predawn

目前项目仍处于开发阶段,很多功能都没有,文档和测试也聊胜于无,但是我会尽快完善。

还没有实现的功能在 todo.txt 里面,如果有什么建议、意见、需求,欢迎提 issue。如果觉得有点意思,可以点个 star。


原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-06-11

  • 博文量
    1769
  • 访问量
    718745