2个版本
0.2.4 | 2023年1月4日 |
---|---|
0.2.3 | 2022年11月24日 |
#91 在 #服务器框架
每月29次 下载
在 under 中使用
24KB
411 行
Under
一个非常简单的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
是为fn(under::Request) -> impl Future<Output = Result<under::Response, anyhow::Error> + Send + Sync + 'static
实现的;因此,声明端点可以像下面这样简单:
async fn index(request: under::Request) -> Result<under::Response, anyhow::Error> {
todo!()
}
并且像上面那样使用。这个库还提供了一些内置的端点在under::endpoints
。
依赖项
~1.5MB
~37K SLoC