Black Tea框架v0.1.1发布
LI Rui

为什么要做Black Tea

从大一入学开始,我一直在接触后端的开发,当时主要使用的是Python下的Flask和FastAPI。前段时间因为看到蛮多人开始使用Rust语言,就开始学习Rust,使用Actix Web来开发一些简单的后端,也遇到了很多搞不懂的问题。出于提高自己能力、贡献社区等方面的考虑,便开始制作Black Tea后端框架,感觉造轮子能够学到不少东西。

Black Tea会成为什么样

Black Tea是基于hyper来开发的,我想用一段代码来说明Black Tea的未来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use blacktea::{HttpResponse, FileResponse, App, Server, Context, Method};
use blacktea::middleware::JWT;

async fn hello() -> HttpResponse {
HttpResponse::Ok().text("Hello, world!".into())
}

async fn file(cxt: Context) -> FileResponse {
let path = cxt.find_param("path");
FileResponse::path(format!("./static/{}", path))
}

#[tokio::main]
async fn main() {
let mut server = Server::new("127.0.0.1:8080".into());
let mut app = App::new();
app.add("/hello", Method::GET, hello);
app.pre_middleware("/hello", JWT);
app.add("/static/:path", Method::GET, file);
server.mount("/v1", app);
server.run().await
}

尽管现在上面很多功能都还未实现,Black Tea未来我希望能够支持:

  • 比较方便的中间件实现,有预处理的中间件,也有后处理的中间件,能够内置一些方便的中间件
  • Server负责路由,多个Service(具体的API)属于一个App下面,App挂载到Server下。这样可以方便管理不同版本、不同作用的API。
  • 比较方便的上下文,获取参数、静态资源(如数据库连接)等。
  • 对于流友好,在一些特殊的流式传输的场景下提供支持。
  • ……

其实作为一个新手入门很多库或者语言,我感觉文档起到一个非常重要的作用,我想维护一个非常详细的中英文文档,这样既方便了初学者能够很好地了解并使用本框架,也便于其他人了解框架后做出贡献。

要做的事情还有很多,不过慢慢完善总会完成的。

0.1.1版本的Black Tea

目前的示例代码长这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use blacktea::{Server, HttpResponse, Method, App};

async fn hello() -> HttpResponse {
HttpResponse::Ok().text("Hello, world!".into())
}

#[tokio::main]
async fn main() {
pretty_env_logger::init();
let mut server = Server::new("127.0.0.1:8080".into());
let mut app = App::new();
app.add("/hello", Method::GET, Box::new(hello));
server.mount("/v1", app);
server.run().await
}

仅完成了路由的工作,还无法传递上下文、参数等信息,很多代码都是参考已有项目和教程实现的,我想一步步去完善它。

一点希望

Black Tea如果能够成功做起来,希望能够成为很多非Rust的后端程序员了解Rust的第一个库,友好的文档、方便的框架给他们良好的体验,初学者也能用。如果没能做起来,也能写成一篇教程,帮助大家去学习Rust语言。

  • 本文标题:Black Tea框架v0.1.1发布
  • 本文作者:LI Rui
  • 创建时间:2021-06-18 19:39:02
  • 本文链接:https://www.lirui.tech/post/2021/1a8a3e608ed1.html
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!