开源观察 | Web开发

Rust Web 框架

Rust社区有很多 Web 框架库,参考《Web Frameworks》以及《Which Rust web framework to choose in 2022 (with code examples)》,补充整理以后总表如下:

总下载量介绍 / 部分特性
actix-web5,134,720HTTP / 1.x,HTTP / 2
兼容 Tokio
支持压缩和解压
Openssl 或 Rustls 支持
中间件 (Logger, Session, CORS, etc)
兼容 Rust 1.54+
warp4,222,391实现路由和参数提取功能
实现头请求以及提取功能
实现请求字段反序列化功能
支持 Gzip, Deflate, and Brotli 压缩
基于 hyper 编写,支持 HTTP / 1.x,HTTP / 2,Async
rocket1,471,930需要 nightly Rust
iron1,018,360基于 hyper 编写,支持 HTTP / 1.x,HTTP / 2,Async
支持并行运行
支持负载平衡
tide491,651支持异步
axum276,608实现路由功能
基于 hyper 实现
基于 tower 和 tower-http 生态实现,可利用其中中间件、服务以及实用程序
nickel205,611简易轻量Rust web 框架支持
gotham91,435支持异步
poem54,160兼容 tower::Service 以及 tower::Layer
支持压缩与解压
thruster25,521支持异步
兼容 hyper
支持 ssl
支持 gRPC

WebAssembly 前端库表如下:

总下载量介绍 / 部分特性
yew239,796使用 WebAssembly 来创建多线程的前端 web 应用,支持与 JavaScript 交互
seed138,857前端 Rust 框架,可创建类似于 elm 架构的 web 程序,不需要 nightly 版本
iced106,406跨平台 GUI 库
sauron24,648可用于服务端或客户端开发,适用于开发使用渐进式渲染的 Web 应用程序
mogwai3,213GUI 库
percy397/

对于 actix-web,warp,axum 这三个库,《Which Rust web framework to choose in 2022 (with code examples)》文中比较总结如下:

Github StarsJson 序列化以及反序列化路由 (Routing)中间件 (Middleware)数据共享 (State)
actix-web~13.3k支持相对支持最差支持支持
warp~6k支持支持相对支持最好支持
axum~3.6k支持相对支持最好支持支持

参考

Which Rust web framework to choose in 2022 (with code examples),https://kerkour.com/rust-web-framework-2022

Web Frameworks,https://www.arewewebyet.org/topics/frameworks/

Actix Web 发布 v4.0

Actix Web 是一个强大的高性能 Web 框架,用于创建从小型到单体的 Web 服务。

v4.0 版本是由社区推动的,57 位贡献者提交了超过 600 次!主要变化包括:

  • 完全兼容 Tokio v1 生态系统,包括#[tokio::main] 支持。
  • 使 actix-http 更精简。这个 crate 支持 Actix Web,包含我们的 HTTP/1 实现和较低级别的 HTTP 处理。
  • API 改进,通常是为了提高表现力和开发人员的生产力。
  • 减少特定 API 中的 paper-cuts 和 non-obvious 行为的数量。
  • 大大改进了大量关键项目的文档。

迁移指南包含了如何更新的解释和差异。

热议 - 2022 年你会选择哪种 Web 框架

Sylvain Kerkour ,Bloom 的创建者也是 Black Hat Rust 一书的作者,发文对比了 actix-web、warp 和 axum 三个 Web 框架,结合代码示例进行了一个简单的评估。尽管作者心属 axum,但还是选择 actix-web 作为 Bloom 的首选。

Reddit 上的网友则提供了更多讨论,包括 tide ,rocket 以及 poem 。

https://www.reddit.com/r/rust/comments/szl0im/which_rust_web_framework_to_choose_in_2022_with/

axum-auth: HTTP auth extractor

提供 Axum 下的 HTTP auth extractor. 支持 Bearer 和 Basic Auth.

https://github.com/Owez/axum-auth

如何使用axum的 "Type safe routing"?

一篇讲解axum的博文:

https://mixi-developers.mixi.co.jp/how-to-use-type-safe-routing-of-axum-c06c1b1b1ab