Router 是 Axum 的总图纸。
最基础的路由写法:
use axum::{
routing::{delete, get, post},
Router,
};
async fn list_permits() {}
async fn get_permit() {}
async fn create_permit() {}
async fn delete_permit() {}
let app = Router::new()
.route("/permits", get(list_permits).post(create_permit))
.route("/permits/{id}", get(get_permit).delete(delete_permit));把它翻译成关口语言,就是:
类型总关
├── GET /permits -> 查所有报关单
├── POST /permits -> 新建报关单
├── GET /permits/{id} -> 查单个报关单
└── DELETE /permits/{id} -> 销毁报关单这里有两个 2026 还非常重要的细节:
#1. Axum 0.8 主流路径参数语法是 {id}
.route("/permits/{id}", get(get_permit))不是很多旧文章里的:
.route("/permits/:id", get(get_permit))旧的 :id / *rest 语法,在 0.8 里默认会被拒绝;只有显式 without_v07_checks() 才能兼容旧写法。
#2. 通配段用 /{*rest}
.route("/files/{*rest}", get(download_file))所以你脑子里应该形成的是:
Axum 当前主流路径语法
├── /users/{id}
└── /files/{*rest}不是旧版那套冒号和星号前缀。