背景

Axum 用起来很顺手,但真实项目里经常出现一个隐性问题:

  • 中间件越加越多
  • 顺序靠经验调整
  • 出故障时不知道是哪个层拦住了请求

推荐分层

从外到内通常建议:

  1. request id / tracing
  2. panic recover
  3. 全局限流
  4. 认证鉴权
  5. 业务路由
let app = Router::new()
    .route("/api/user", get(get_user))
    .layer(TraceLayer::new_for_http())
    .layer(RequestIdLayer::new())
    .layer(TimeoutLayer::new(Duration::from_secs(2)));

总结

中间件不是“越多越安全”,而是“每层职责清晰、顺序可解释”。

发布前做一次链路压测,往往能提前发现大部分分层问题。


架构清晰的系统,异常路径也应该清晰。