Axum 设计与实现

Axum 设计与实现

第一本从源码视角系统剖析 Rust Web 框架 Axum 的中文技术专著。

打开任何一个 Rust 后端项目的 src/main.rs,你几乎都会看到这样的代码:

let app = Router::new()
    .route("/", get(handler))
    .with_state(state);

let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();
serve(listener, app).await.unwrap();

三行代码,一个 HTTP 服务就跑起来了。路由、提取、响应、中间件——框架帮你把这些全部安排妥当。但当你想给路由加个前缀、想让某个提取器返回自定义错误、想在 serve 之外接管连接生命周期、想搞清楚 Handler<T, S> 那个幽灵参数 T 到底是什么……你就得往下挖了。

这本书的目的,就是把这三行代码底下的每一层都打开给你看。

你会看到 Router<S> 如何用类型状态模式在编译期强制你提供 State;你会看到 matchit 如何在纳秒级完成路径匹配;你会看到 Handler<T, S> 如何用一个宏把最多 16 个参数的 async fn 展开成 tower::Service;你会看到 FromRequestFromRequestParts 的分裂为什么不是设计冗余而是 Body 所有权约束的必然结果;你会看到 from_fn 中间件的 Next 如何在类型系统层面保证调用链不中断;你会看到 Infallible 错误模型如何让错误永远不会逃逸到 hyper;你会看到 Serve 如何用 tokio::select! 实现优雅关闭。

这是《Rust 源码之道》丛书的第六卷,也是"Rust 后端三部曲"的最后一环:

适合谁读

前置知识:本书假设读者熟悉 Rust 的 trait、泛型、生命周期、PinFutureasync/await。建议先阅读卷五——本书不会重复解释 Service / Layer / Body 这些概念,但会在每一处与 Hyper+Tower 心智模型相关的地方给出章节索引。

目录

开篇

第一部分:路由系统

第二部分:Handler 与提取器

第三部分:响应与错误

第四部分:中间件

第五部分:运行与状态

第六部分:元编程与扩展

第七部分:工程实践

源码版本

本书所有源码引用均基于以下版本(2026 年 4 月 23 日锁定):

Crate 版本 Git Commit
axum 0.8.9 de9f13d
axum-core 0.5.6 de9f13d
axum-macros 0.5.1 de9f13d
axum-extra 0.12.6 de9f13d

读者可通过以下命令获取与本书完全一致的源码:

git clone https://github.com/tokio-rs/axum.git
cd axum && git checkout de9f13d

书中每一段源码引用都会标注文件路径和行号,读者可在对应版本的代码中逐行验证。

与其他书的关联

版权声明

本书采用 CC BY-NC 4.0 许可协议。转载或引用请署名 杨艺韬 并附原文链接,禁止商业用途。