路由
路由是 Silent 框架的核心功能之一,它负责将 HTTP 请求映射到相应的处理函数。本文将详细介绍 Silent 框架的路由系统。
基本路由
Silent 框架使用 Route 结构体来定义路由。最基本的路由定义包括路径和处理函数:
use silent::prelude::*;
#[handler]
async fn hello() -> &'static str {
"Hello, world!"
}
let route = Route::new("").get(hello);HTTP 方法
Silent 支持所有标准的 HTTP 方法:
let route = Route::new("api")
.get(get_handler) // GET 请求
.post(post_handler) // POST 请求
.put(put_handler) // PUT 请求
.delete(delete_handler); // DELETE 请求路由参数
你可以在路由路径中使用参数,通过 :参数名 的形式定义:
#[handler]
async fn user_info(req: Request) -> Result<String> {
let user_id = req.get_path_params::<String>("id")?;
Ok(format!("User ID: {}", user_id))
}
let route = Route::new("users/<id>").get(user_info);路由嵌套
Silent 支持路由嵌套,这对于构建 API 版本或模块化路由非常有用:
let api_v1 = Route::new("v1")
.at(Route::new("users").get(list_users_v1))
.at(Route::new("posts").get(list_posts_v1));
let api_v2 = Route::new("v2")
.at(Route::new("users").get(list_users_v2))
.at(Route::new("posts").get(list_posts_v2));
let api = Route::new("api")
.at(api_v1)
.at(api_v2);路由组
你可以将相关的路由组织在一起,使代码结构更清晰:
let users = Route::new("users")
.get(list_users) // GET /users
.post(create_user) // POST /users
.at(Route::new(":id")
.get(get_user) // GET /users/:id
.put(update_user) // PUT /users/:id
.delete(delete_user) // DELETE /users/:id
);通配符路由
Silent 支持使用通配符来匹配多个路径:
// 匹配所有路径
let route = Route::new("*").get(handler);
// 匹配特定前缀的所有路径
let route = Route::new("api/*").get(handler);最佳实践
路由命名要清晰、语义化,反映资源的层级关系
合理使用路由嵌套,避免过深的嵌套层级
相关的路由功能要组织在一起
使用合适的 HTTP 方法来表达操作语义
路由参数命名要有意义,便于理解
示例
这是一个完整的路由示例,展示了如何组织一个博客系统的 API:
let posts = Route::new("posts")
.get(list_posts)
.post(create_post)
.at(Route::new(":id")
.get(get_post)
.put(update_post)
.delete(delete_post)
.at(Route::new("comments")
.get(list_comments)
.post(create_comment)
)
);
let users = Route::new("users")
.get(list_users)
.post(create_user)
.at(Route::new(":id")
.get(get_user)
.put(update_user)
.delete(delete_user)
);
let api = Route::new("api")
.at(posts)
.at(users);这个示例展示了如何组织一个包含用户和博客文章管理的 API 系统,包括评论功能。路由结构清晰,易于维护和扩展。
Last updated
Was this helpful?