全书目录

第四十四篇:Rocket 完全指南 —— 火箭发射控制塔宇宙

第五章:声明式路由 —— 先声明发射窗口,再写发射动作

1 分钟 281 字 第 814 / 962 个阅读单元

Rocket 的第一眼辨识度,通常来自它的属性宏路由。

比如:

rust
#[macro_use] extern crate rocket;

#[get("/health")]
fn health() -> &'static str {
    "ok"
}

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![health])
}

如果你是第一次看 Rocket,会觉得它像:

先在控制塔公告板上写清楚:这条跑道接什么任务。

#[get("/health")] 的含义,不只是“这是一条 GET 路由”。

它更像:

text
发射窗口类型:GET
跑道编号:/health
对应控制员:health

再看带路径参数的例子:

rust
#[get("/missions/<id>")]
fn mission(id: u64) -> String {
    format!("mission {}", id)
}

这里 <id> 就像发射单号占位符。

Rocket 会自动帮你把它提取成 u64。 如果请求里的编号根本转不成 u64,这次任务就不会进入 handler。

也就是说:

参数类型本身,就是发射门禁的一部分。

这就是 Rocket 的味道:

  • 路由声明即规则
  • 类型就是清单
  • 不合格任务在塔外就被拦下