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 服务器

Download history 886551/week @ 2024-05-01 931065/week @ 2024-05-08 991443/week @ 2024-05-15 979234/week @ 2024-05-22 1063168/week @ 2024-05-29 1117729/week @ 2024-06-05 1125837/week @ 2024-06-12 1053413/week @ 2024-06-19 1092539/week @ 2024-06-26 944990/week @ 2024-07-03 1032111/week @ 2024-07-10 1059629/week @ 2024-07-17 1074509/week @ 2024-07-24 1061386/week @ 2024-07-31 1110303/week @ 2024-08-07 1115619/week @ 2024-08-14

4,582,659 每月下载量
用于 1,608 个 Crates(1,198 直接使用)

MIT 许可证

645KB
14K SLoC

axum

axum 是一个注重舒适性和模块化的 Web 应用程序框架。

Build status Crates.io Documentation

有关此 Crates 的更多信息,请参阅 Crates 文档

高级特性

  • 使用无宏 API 将请求路由到处理程序。
  • 使用提取器声明性解析请求。
  • 简单且可预测的错误处理模型。
  • 以最小样板代码生成响应。
  • 充分利用 towertower-http 生态系统中的中间件、服务和实用工具。

特别是最后一点是 axum 与其他框架不同的地方。axum 没有自己独立的中间件系统,而是使用 tower::Service。这意味着 axum 可以免费获得超时、跟踪、压缩、授权等功能。它还使您能够与使用 hypertonic 编写的应用程序共享中间件。

使用示例

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