什么是 Axum 以及为什么需要它?
\nAxum 是一个为 Rust 语言设计的现代、符合人体工程学且高性能的 Web 框架,由 Tokio 团队开发。它基于流行的 crate tokio、tower 和 hyper 构建,确保了开箱即用的高性能和异步能力。
Axum 的主要目标是提供一个直观的 API,用于构建 Web 应用程序和 API,同时保留 Rust 的全部功能和安全性。与更“底层”的解决方案不同,Axum 抽象了处理 HTTP 协议的复杂性,让开发者能够专注于业务逻辑。
\nAxum 非常适合用于:
\n- \n
- 构建 RESTful API 和微服务 \n
- 开发具有服务器端渲染的 Web 应用程序 \n
- 构建代理服务器和中间件 \n
- 实现 WebSocket 连接 \n
- 任何需要高性能和高可靠性的场景 \n
安装 Axum
\n由于 Rust 是一种编译型语言,安装通过包管理器 Cargo 进行。将以下依赖项添加到您的 Cargo.toml 文件中:
[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 来下载并编译这些依赖项。
快速入门:您的第一个 Axum 应用
\n创建一个 src/main.rs 文件,并编写一个最简单的 HTTP 服务器:
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/世界。
Axum 的主要方法和函数
\n\n1. Router::new()
\n描述: 创建一个新的空路由器。这是配置应用程序的主要入口点。
\n参数: 无。
\n示例:
\nuse axum::Router;\n\nlet app: Router = Router::new();\n\n2. Router::route()
\n描述: 为指定路径添加一个路由,并关联给定的 HTTP 方法和处理函数。
\n参数:
\n- \n
path: &str— 路由路径(可以包含动态段,例如/users/:id) \nmethod_router: MethodRouter— 调用get()、post()、put()、delete()等的结果 \n
示例:
\nuse 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\n3. routing::get(), post(), put(), delete()
\n描述: 为相应的 HTTP 方法创建处理函数。
\n参数:
\n- \n
图书馆中也有
推荐