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 日 |
#554 在 HTTP 服务器
每月 31 次下载
175KB
2K SLoC
下面
一个非常简单的 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::Endpoint
。 under::Endpoint
为 under::Request
实现,即 under::Endpoint
是一个函数,它接受 under::Request
并返回一个实现了 under::Response
的类型,该类型还实现了 Result
、anyhow::Error
、Send
、Sync
和 'static
的类型;因此,声明端点可以是这样的简单
async fn index(request: under::Request) -> Result<under::Response, anyhow::Error> {
todo!()
}
并且按照上述方式使用。此库还包括一些内置端点,位于 under::endpoints
。
依赖项
~11–24MB
~332K SLoC