74 个版本
0.7.5 | 2024 年 3 月 24 日 |
---|---|
0.7.3 | 2023 年 12 月 29 日 |
0.7.1 | 2023 年 11 月 27 日 |
0.6.19 | 2023 年 7 月 17 日 |
0.1.1 | 2021 年 7 月 30 日 |
#1 in HTTP 服务器
4,582,659 每月下载量
用于 1,608 个 Crates(1,198 直接使用)
645KB
14K SLoC
axum
axum
是一个注重舒适性和模块化的 Web 应用程序框架。
有关此 Crates 的更多信息,请参阅 Crates 文档。
高级特性
- 使用无宏 API 将请求路由到处理程序。
- 使用提取器声明性解析请求。
- 简单且可预测的错误处理模型。
- 以最小样板代码生成响应。
- 充分利用
tower
和tower-http
生态系统中的中间件、服务和实用工具。
特别是最后一点是 axum
与其他框架不同的地方。axum
没有自己独立的中间件系统,而是使用 tower::Service
。这意味着 axum
可以免费获得超时、跟踪、压缩、授权等功能。它还使您能够与使用 hyper
或 tonic
编写的应用程序共享中间件。
使用示例
use axum::{
routing::{get, post},
http::StatusCode,
Json, Router,
};
use serde::{Deserialize, Serialize};
#[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, listening globally on port 3000
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).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>,
) -> (StatusCode, Json<User>) {
// 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,
}
您可以在 示例 中找到此示例,以及其他示例项目在 示例目录 中。
有关更多示例,请参阅 Crates 文档。
性能
axum
是建立在 hyper
之上的一个相对较薄的层,并且增加了非常小的开销。因此,axum
的性能与 hyper
相当。您可以在 这里 和 这里 找到基准测试。
安全性
此软件包使用 #![forbid(unsafe_code)]
来确保所有内容都是使用 100% 安全的 Rust 实现的。
最低支持的 Rust 版本
axum 的最低支持 Rust 版本是 1.66。
示例
在 示例文件夹 中包含了如何使用 axum
的各种示例。文档 也提供了大量的代码片段和示例。对于完整的示例,请查看社区维护的 展示 或 教程。
获取帮助
在 axum
的仓库中,我们也有一些示例,展示了如何将所有内容组合在一起。社区维护的 展示 和 教程 也展示了如何将 axum
用于实际应用。您也可以在 Discord 频道 或就您的问题发起 讨论。
社区项目
请参阅 这里 的社区维护的软件包和用 axum
构建的项目列表。
贡献
🎈 感谢您的帮助,让我们改进这个项目!我们非常高兴有您!我们有一个 贡献指南,帮助您参与 axum
项目。
许可协议
本项目采用 MIT 许可协议。
贡献
除非您明确声明,否则您提交给 axum
的任何有意贡献都应按照 MIT 许可协议进行许可,不附加任何额外条款或条件。
依赖项
~4–16MB
~231K SLoC