全书目录

第三十九篇:Axum 完全指南 —— Rust 类型关口宇宙

第十一章:Middleware —— Axum 最特别的一点,是它根本不发明自己的安检体系

1 分钟 261 字 第 757 / 962 个阅读单元

这部分是 Axum 和别家差异最大的一章。

Axum 官方文档一直强调:

Axum 不用自己独立的 middleware 体系,而是直接接入 tower::Service

这意味着:

  • tower 的 Layer 可以直接套上来
  • tower-httpTraceLayerCorsLayer、压缩、超时、请求校验都能直接用
  • 你写给 Axum 的很多中间件思路,也能和 hyper / tonic 共享

这可以翻译成一句很工程的话:

Axum 的安检带是工业标准件,不是私有定制件。

一个典型组合写法:

toml
[dependencies]
tower = "0.5.3"
tower-http = { version = "0.6.8", features = ["trace", "cors"] }
rust
use axum::{routing::get, Router};
use tower::ServiceBuilder;
use tower_http::{cors::CorsLayer, trace::TraceLayer};

let app = Router::new()
    .route("/health", get(health))
    .layer(
        ServiceBuilder::new()
            .layer(TraceLayer::new_for_http())
            .layer(CorsLayer::permissive())
    );

这张图很好记:

text
请求车
  │
  ▼
TraceLayer     -> 记录通关轨迹
  │
  ▼
CorsLayer      -> 检查跨域放行规则
  │
  ▼
Router         -> 找窗口
  │
  ▼
Handler        -> 真正办事