1 个不稳定版本
0.1.2 | 2022年9月10日 |
---|---|
0.1.1 |
|
0.1.0 |
|
#324 in HTTP服务器
65KB
1.5K SLoC
功能
- 仅标准库
- 多线程线程池
- 无宏
- 基数树路由器
WIP
- HTTP1.1
- HTTP2
- HTTP2
https://github.dev/hyperium/hyper
https://github.dev/hyperium/http
https://github.com/gin-gonic/gin#asciijson
axum
axum
是一个注重人体工程学和模块化的Web应用框架。
有关此crate的更多信息,请参阅 crate文档。
高级功能
- 使用无宏API将请求路由到处理程序。
- 使用提取器声明性解析请求。
- 简单且可预测的错误处理模型。
- 使用最少样板代码生成响应。
- 充分利用
tower
和tower-http
生态系统中的中间件、服务和工具。
特别是最后一点是 axum
与其他框架的不同之处。 axum
没有自己的中间件系统,而是使用 tower::Service
。这意味着 axum
可以免费获得超时、跟踪、压缩、授权等功能。它还允许您与使用 hyper
或 tonic
编写的应用程序共享中间件。
重大变更
我们目前正在开发 axum 0.6,因此 main
分支包含重大变更。有关已发布到crates.io的内容和最新的变更日志,请参阅 0.5.x
分支。
使用示例
use axum::{
routing::{get, post},
http::StatusCode,
response::IntoResponse,
Json, Router,
};
use serde::{Deserialize, Serialize};
use std::net::SocketAddr;
#[tokio::main]
async fn main() {
// initialize tracing
tracing_subscriber::fmt::init();
// build our application with a route
let app = Router::new()
// `GET /` goes to `root`
.route("/", get(root))
// `POST /users` goes to `create_user`
.route("/users", post(create_user));
// run our app with hyper
// `axum::Server` is a re-export of `hyper::Server`
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
tracing::debug!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
// basic handler that responds with a static string
async fn root() -> &'static str {
"Hello, World!"
}
async fn create_user(
// this argument tells axum to parse the request body
// as JSON into a `CreateUser` type
Json(payload): Json<CreateUser>,
) -> impl IntoResponse {
// insert your application logic here
let user = User {
id: 1337,
username: payload.username,
};
// this will be converted into a JSON response
// with a status code of `201 Created`
(StatusCode::CREATED, Json(user))
}
// the input to our `create_user` handler
#[derive(Deserialize)]
struct CreateUser {
username: String,
}
// the output to our `create_user` handler
#[derive(Serialize)]
struct User {
id: u64,
username: String,
}
有关更多示例,请参阅 crate文档。
性能
axum
是建立在 hyper
之上的一层相对较薄的层,并且几乎没有增加开销。因此,axum
的性能与 hyper
相当。您可以在这里和这里找到基准测试。
安全性
这个crate使用#![forbid(unsafe_code)]
来确保所有内容都在100%安全的Rust中实现。
最低支持的Rust版本
axum的最低支持Rust版本是1.60。
示例
在示例文件夹中包含了如何使用axum
的多种示例。文档也提供了许多代码片段和示例。对于更完整的示例,请查看社区维护的展示或教程。
获取帮助
在axum
的repo中,我们也有一些示例,展示了如何将所有内容组合在一起。社区维护的展示和教程也演示了如何在现实世界中使用axum
。您也可以在Discord频道中提问或在问题中提出您的问题。
社区项目
请查看这里获取使用axum
构建的社区维护crate和项目的列表。
贡献
🎈 感谢您的帮助,让我们改进这个项目!我们非常高兴有您的参与!我们有一个贡献指南,以帮助您参与axum
项目。
许可
本项目采用MIT许可。
贡献
除非您明确表示,否则您有意提交到axum
的任何贡献都应按MIT许可,不附加任何其他条款或条件。
依赖项
~1.6–2.4MB
~51K SLoC