数据核对:2026-10-22(GitHub API 实测)
先说结论
- 写后端服务 → Axum。Tokio 官方生态,是当前的默认答案
- 追求极限性能 → Actix Web
- 要最快写出能跑的东西 → Rocket(但要注意它更新放缓了)
- 做桌面应用 → Tauri,这是另一个话题
Rust 的 Web 框架没有「Spring Boot 式」的绝对统治者。Axum 因为背靠 Tokio 生态,近两年成了事实首选。
一、实测数据
| 框架 | star | 最新版本 | 状态 |
|---|---|---|---|
| Tauri | 112,106 | 2.12.4 | 活跃(桌面应用) |
| Axum | 27,564 | 0.8.9 | 活跃 |
| Rocket | 25,774 | — | 提交停在 2025-12 |
| Actix Web | 24,876 | — | 活跃 |
Axum 的版本号是 0.8——还没到 1.0。这代表 API 还在调整,跨小版本升级可能需要改代码(0.6 → 0.7 → 0.8 每次都有破坏性变更)。生产可用,但要锁版本。
二、三个框架的设计差异
| Axum | Actix Web | Rocket | |
|---|---|---|---|
| 异步运行时 | Tokio | 自己的 Actix runtime(也支持 Tokio) | Tokio |
| 抽象风格 | 函数式,提取器(Extractor)组合 | Actor 模型遗留,宏路由 | 宏路由,配置声明式 |
| 类型安全 | 极强,靠 trait 约束保证 | 强 | 强 |
| 生态 | Tokio 全家桶(tower、hyper) | 独立 | 独立 |
最本质的差异是「和 Tokio 生态的关系」:
Axum 建在 tower 和 hyper 之上,意味着整个 tower 生态的中间件(限流、超时、追踪、压缩)都能直接用。这是它成为首选的核心原因。
三、逐个说清
Axum
Tokio 团队维护,设计极简:一个 handler 就是普通 async fn,参数通过实现 FromRequest 的类型提取。
use axum::{Router, routing::get, extract::Path, Json};
async fn user(Path(id): Path<u64>) -> Json<String> {
Json(format!("user {id}"))
}
let app = Router::new().route("/users/{id}", get(user));
优点: – 不需要宏。handler 是普通函数,好测试、好复用 – tower 中间件生态直接可用 – 和 Tokio 的其它组件(sqlx、tonic、tracing)配合自然
代价: – 编译慢。Rust + axum + sqlx 的项目,全量编译几分钟很正常 – 类型系统复杂。错误信息经常是一屏 trait 约束不满足 – 0.x 版本 API 不稳定
适合:绝大多数 Rust 后端场景。
Actix Web
长期占据性能榜前列。历史上基于 Actor 模型,现在已经是常规的异步框架,但保留了不少遗留设计。
优点:性能极强,文档完整,中间件生态成熟。
代价: – 用宏定义路由(#[get("/")]),出错时错误信息指向宏展开,不好调试 – 有自己的一套概念(App、HttpServer、web::Data),和标准 Rust 异步生态的衔接不如 Axum 自然 – 历史上有过 unsafe 代码争议(已大幅改善)
适合:性能敏感、团队已经熟悉 Actix。
Rocket
曾经是 Rust Web 框架的门面,API 设计最友好:声明式配置、宏路由、内置表单和模板支持。
必须注意:主仓最近一次提交是 2025-12,已经十个月没有更新。这不代表不能用——0.5 版本功能完整——但意味着新特性不会有,遇到 Rust 新版本带来的兼容问题要等更久。
适合:Rust 生态里最接近「开箱即用」的体验,适合快速原型。
四、按场景选
| 场景 | 推荐 |
|---|---|
| 一般后端 API | Axum |
| 极致性能 | Actix Web |
| 快速原型 | Rocket(接受更新放缓) |
| 桌面应用 | Tauri |
| 只想学 Rust 的 Web 开发 | Axum(生态最主流,教程最多) |
五、Rust 后端的三个现实问题
① 编译时间是主要成本
改一行代码,等 30 秒到 2 分钟编译。这直接影响开发节奏。
缓解办法:cargo check 代替 cargo build(快很多)、用 sccache、把依赖拆成 workspace 减少重编译。
② 不是所有场景都值得用 Rust
Web 服务的瓶颈通常在数据库和网络 IO,不在 CPU。Go 或 Node 能解决的问题,用 Rust 往往是「为了性能付出了三倍开发时间,换来 10% 的提升」。
真正值得用 Rust 的场景:CPU 密集(图像、加解密、协议解析)、内存受限、需要极致低延迟、需要和现有 Rust 代码库集成。
③ 生态还在补
认证、支付、消息队列这些「业务胶水」,Rust 生态要么没有、要么不成熟。选 Rust 前先确认你要用的第三方服务有官方 SDK——很多没有,得自己写。
六、延伸阅读
- Tauri 2 架构入门
- Axum 入门
- Actix Web 入门