前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【大家的项目】Predawn - 一个类似 Spring Boot 的 web 框架

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

作者头像
MikeLoveRust
发布2024-03-18 14:47:26
1020
发布2024-03-18 14:47:26
举报
文章被收录于专栏:Rust语言学习交流

Predawn

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

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

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

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

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

示例

代码语言:javascript
复制
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。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Predawn
    • 示例
      • 特性
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档