#web-framework #http #framework #web #http-body

nightly lil_http

一个无外部依赖的简单Web框架

3个版本

0.1.2 2022年12月29日
0.1.1 2022年12月28日
0.1.0 2022年12月28日

#647 in HTTP服务器

MIT 许可证

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