7 个版本

0.3.8 2023 年 4 月 21 日
0.3.7 2023 年 3 月 31 日
0.3.5 2023 年 1 月 23 日
0.3.3 2022 年 11 月 24 日
0.2.0 2022 年 3 月 6 日

#554HTTP 服务器

每月 31 次下载

MIT 许可证

175KB
2K SLoC

下面

Version docs.rs License CI

一个非常简单的 HTTP 服务器框架。它作为您应用程序代码和 Hyper 之间的一个薄层。

目前,这个层非常简单 —— 然而,意图是在代码中出现模式时添加到此。如果您遇到任何,请随意创建一个问题。

设置

设置服务器的最简单方法是使用 under::Router

let mut http = under::http();
http.at("/").get(under::endpoints::simple(under::Response::empty_204));
http.listen("localhost:8080").await.unwrap();

这将导致应用程序在本地端口 8080 上运行 HTTP 服务器;运行 GET / 将返回 204 No Content

该路由器接受所有类型的动词

http.at("/users")
    .get(users::index)
    .post(users::create)
    .at("/{id}")
        .get(users::show)
        .put(users::update)
        .delete(users::delete);

注意 at 调用的层次结构 —— 如果在已经存在的 at 之下调用后者 at,则路径将合并。上面的示例等同于

http.at("/users")
    .get(users::index)
    .post(users::create);
http.at("/users/{id}")
    .get(users::show)
    .put(users::update)
    .delete(users::delete);

对于默认情况下未包含的动词,您可以使用 method 函数声明一个

http.at("/users/{id}")
    .method(hyper::Method::from_bytes(b"SOMETHING").unwrap(), users::something);

或者,如果您想捕获所有方法,您可以使用 all 函数来这样做

http.at("/users/{id}").all(users::all);

端点

当声明路径时,它必须路由到端点 —— 传递给动词函数的参数,例如 get(users::show)。传递的值 必须 实现 under::Endpointunder::Endpointunder::Request 实现,即 under::Endpoint 是一个函数,它接受 under::Request 并返回一个实现了 under::Response 的类型,该类型还实现了 Resultanyhow::ErrorSendSync'static 的类型;因此,声明端点可以是这样的简单

async fn index(request: under::Request) -> Result<under::Response, anyhow::Error> {
    todo!()
}

并且按照上述方式使用。此库还包括一些内置端点,位于 under::endpoints

依赖项

~11–24MB
~332K SLoC