Axum for Rust: 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Axum 以及为什么需要它?

\n

Axum 是一个为 Rust 语言设计的现代、符合人体工程学且高性能的 Web 框架,由 Tokio 团队开发。它基于流行的 crate tokio、tower 和 hyper 构建,确保了开箱即用的高性能和异步能力。

\n

Axum 的主要目标是提供一个直观的 API,用于构建 Web 应用程序和 API,同时保留 Rust 的全部功能和安全性。与更“底层”的解决方案不同,Axum 抽象了处理 HTTP 协议的复杂性,让开发者能够专注于业务逻辑。

\n

Axum 非常适合用于:

\n
    \n
  • 构建 RESTful API 和微服务
  • \n
  • 开发具有服务器端渲染的 Web 应用程序
  • \n
  • 构建代理服务器和中间件
  • \n
  • 实现 WebSocket 连接
  • \n
  • 任何需要高性能和高可靠性的场景
  • \n
\n\n

安装 Axum

\n

由于 Rust 是一种编译型语言,安装通过包管理器 Cargo 进行。将以下依赖项添加到您的 Cargo.toml 文件中:

\n
[dependencies]\naxum = "0.7"\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\ntower-http = { version = "0.5", features = ["cors", "trace"] }\ntracing = "0.1"\ntracing-subscriber = "0.3"
\n

之后,运行命令 cargo build 来下载并编译这些依赖项。

\n\n

快速入门:您的第一个 Axum 应用

\n

创建一个 src/main.rs 文件,并编写一个最简单的 HTTP 服务器:

\n
use axum::{\n    routing::get,\n    Router,\n};\nuse std::net::SocketAddr;\n\n#[tokio::main]\nasync fn main() {\n    // 创建路由器\n    let app = Router::new()\n        .route("/", get(root_handler))\n        .route("/hello/:name", get(hello_handler));\n\n    // 启动服务器\n    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));\n    println!("服务器启动于 {}", addr);\n    \n    axum::Server::bind(&addr)\n        .serve(app.into_make_service())\n        .await\n        .unwrap();\n}\n\nasync fn root_handler() -> &'static str {\n    "欢迎来到主页!"\n}\n\nasync fn hello_handler(axum::extract::Path(name): axum::extract::Path) -> String {\n    format!("你好,{}!", name)\n}
\n

使用命令 cargo run 启动服务器,然后在浏览器中打开 http://localhost:3000/hello/世界。

\n\n

Axum 的主要方法和函数

\n\n

1. Router::new()

\n

描述: 创建一个新的空路由器。这是配置应用程序的主要入口点。

\n

参数: 无。

\n

示例:

\n
use axum::Router;\n\nlet app: Router = Router::new();
\n\n

2. Router::route()

\n

描述: 为指定路径添加一个路由,并关联给定的 HTTP 方法和处理函数。

\n

参数:

\n
    \n
  • path: &str — 路由路径(可以包含动态段,例如 /users/:id)
  • \n
  • method_router: MethodRouter — 调用 get()、post()、put()、delete() 等的结果
  • \n
\n

示例:

\n
use axum::{routing::get, Router};\n\nasync fn users_list() -> &'static str { "用户列表" }\nasync fn create_user() -> &'static str { "创建用户" }\n\nlet app = Router::new()\n    .route("/users", get(users_list).post(create_user));
\n\n

3. routing::get(), post(), put(), delete()

\n

描述: 为相应的 HTTP 方法创建处理函数。

\n

参数:

\n

推荐