全书目录

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

第四章:Router 到底是什么 —— 它不是页面树,是关口路线图

1 分钟 214 字 第 750 / 962 个阅读单元

Router 是 Axum 的总图纸。

最基础的路由写法:

rust
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));

把它翻译成关口语言,就是:

text
类型总关
├── GET    /permits      -> 查所有报关单
├── POST   /permits      -> 新建报关单
├── GET    /permits/{id} -> 查单个报关单
└── DELETE /permits/{id} -> 销毁报关单

这里有两个 2026 还非常重要的细节:

#1. Axum 0.8 主流路径参数语法是 {id}
rust
.route("/permits/{id}", get(get_permit))

不是很多旧文章里的:

rust
.route("/permits/:id", get(get_permit))

旧的 :id / *rest 语法,在 0.8 里默认会被拒绝;只有显式 without_v07_checks() 才能兼容旧写法。

#2. 通配段用 /{*rest}
rust
.route("/files/{*rest}", get(download_file))

所以你脑子里应该形成的是:

text
Axum 当前主流路径语法
├── /users/{id}
└── /files/{*rest}

不是旧版那套冒号和星号前缀。