3个版本
0.1.2 | 2022年12月29日 |
---|---|
0.1.1 | 2022年12月28日 |
0.1.0 | 2022年12月28日 |
#647 in HTTP服务器
29KB
572 代码行
lil-http
一个没有外部依赖(除了tokio)的简单HTTP 1.1框架,用Rust编写。
特性
- 监听传入请求
- 根据HTTP 1.1规范解析方法、路径、查询、头部和正文
- 以任意正文和头部响应请求
- 响应文本或JSON的辅助工具
- 允许将路由和方法定义为闭包
- 将请求适当地路由到其函数,否则返回404
- 适当地构建和返回无效方法的405错误。
用法
use lil_http::{Body, Response, Server};
#[tokio::main]
async fn main() {
let mut http = Server::new().await.unwrap();
http.routes
.get("/", |request| {
println!("Received {} request to {}", request.method, request.path);
Response::text(
format!(
"Hello, {}!",
request.query.get("name").unwrap_or(&"World".to_string())
)
.as_str(),
)
})
.get("/api/user", |request| {
println!("Received {} request to {}", request.method, request.path);
Response::json(&serde_json::json!({
"name": "Miguel Piedrafita",
"age": 20,
}))
})
.post("/api/hello", |request| {
println!("Received {} request to {}", request.method, request.path);
let Body::Json(body) = request.body else {
return Response::invalid_request();
};
let Some(name) = body.get("name") else {
return Response::invalid_request();
};
Response::json(&serde_json::json!({
"message": format!("Hello, {name}!"),
}))
});
http.run().await;
}
许可证
本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE文件。
依赖项
~3–9.5MB
~80K SLoC