Rocket 的第一眼辨识度,通常来自它的属性宏路由。
比如:
#[macro_use] extern crate rocket;
#[get("/health")]
fn health() -> &'static str {
"ok"
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![health])
}如果你是第一次看 Rocket,会觉得它像:
先在控制塔公告板上写清楚:这条跑道接什么任务。
#[get("/health")] 的含义,不只是“这是一条 GET 路由”。
它更像:
发射窗口类型:GET
跑道编号:/health
对应控制员:health再看带路径参数的例子:
#[get("/missions/<id>")]
fn mission(id: u64) -> String {
format!("mission {}", id)
}这里 <id> 就像发射单号占位符。
Rocket 会自动帮你把它提取成 u64。
如果请求里的编号根本转不成 u64,这次任务就不会进入 handler。
也就是说:
参数类型本身,就是发射门禁的一部分。
这就是 Rocket 的味道:
- 路由声明即规则
- 类型就是清单
- 不合格任务在塔外就被拦下