Rocket 的 handler 参数,不只是普通函数参数。
很多时候,它们代表:
- 路径参数
- 查询参数
- 表单
- JSON
- Header 上下文
- Cookie
- 状态对象
- 自定义检查结果
这就像火箭发射前,控制台拿到的不是一团原始纸张,而是已经整理好的:
- 发射编号
- 载荷型号
- 发射窗口时间
- 当前值班负责人
- 安全许可状态
比如路径参数:
#[get("/permits/<id>")]
fn permit(id: u64) -> String {
format!("permit {}", id)
}比如查询字符串:
use rocket::form::FromForm;
#[derive(FromForm)]
struct SearchQuery {
status: Option<String>,
page: Option<u32>,
}
#[get("/permits?<query..>")]
fn search(query: SearchQuery) -> String {
format!(
"status={:?}, page={:?}",
query.status,
query.page
)
}?<query..> 很有 Rocket 味道。
它的意思像:
把这份查询单整体交给某个检查员按结构入档。
不是你在 handler 里手写:
- 先取 query string
- 再 split
- 再 parse
- 再兜底
而是让框架先按清单做完。