2个版本

0.2.4 2023年1月4日
0.2.3 2022年11月24日

#91#服务器框架

每月29次 下载
under 中使用

MIT 许可证

24KB
411

Under

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::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