Warp是一个用 Rust 编写的流行的异步 web 框架。在使用 warp
构建 RESTful API 时,可以通过多种方式传递参数到你的处理函数中。
以下是一些常见的方法,说明如何在 warp
中传递参数:
- 路径参数:
你可以使用warp::path
和warp::path::param
来从 URL 路径中提取参数。
use warp::Filter;
#[tokio::main]
async fn main() {
let hello = warp::path!("hello" / String)
.map(|name: String| format!("Hello, {}!", name));
warp::serve(hello)
.run(([127, 0, 0, 1], 3030))
.await;
}
在这个例子中,hello
路径段后的字符串将被捕获并作为参数传递给处理函数。
- 查询参数:
对于查询参数,你可以使用warp::query
过滤器来解析。
use warp::Filter;
use serde::Deserialize;
#[derive(Deserialize)]
struct QueryParams {
q: String,
}
#[tokio::main]
async fn main() {
let query_params = warp::query::<QueryParams>()
.map(|params: QueryParams| format!("You searched for: {}", params.q));
warp::serve(query_params)
.run(([127, 0, 0, 1], 3030))
.await;
}
在这个例子中,查询参数 q
被解析到 QueryParams
结构体中,并在处理函数中使用。
- 请求体:
对于来自请求体的数据(通常是 POST 或 PUT 请求中的数据),你可以使用warp::body::json
或其他类似的过滤器来解析。
use warp::Filter;
use serde::Deserialize;
#[derive(Deserialize)]
struct User {
name: String,
age: u32,
}
#[tokio::main]
async fn main() {
let create_user = warp::post()
.and(warp::body::json::<User>())
.map(|user: User| format!("Created user: {}, age: {}", user.name, user.age));
warp::serve(create_user)
.run(([127, 0, 0, 1], 3030))
.await;
}
在这个例子中,请求体中的 JSON 数据被解析到 User
结构体中,然后可以在处理函数中使用。
- HTTP 头:
你可以使用warp::header
来获取特定的 HTTP 头。
use warp::Filter;
use std::str::FromStr;
#[tokio::main]
async fn main() {
let token_header = warp::header::<String>("authorization")
.map(|token: String| format!("Your token is: {}", token));
warp::serve(token_header)
.run(([127, 0, 0, 1], 3030))
.await;
}
在这个例子中,authorization
头的内容被捕获并可以在处理函数中使用。
请注意,这些只是传递参数到 warp
处理函数的一些基本方法。warp
是一个功能强大的框架,支持更复杂的路由和参数处理逻辑。你可以通过组合不同的过滤器来构建复杂的 API 路由和处理逻辑。