Rust Axum Web 开发
目录
Axum 是 Tokio 团队出品的现代 Web 框架,基于异步,API 简洁。它和前面学的 trait、async、所有权无缝衔接,是练手最佳选择。
依赖
Cargo.toml:
[dependencies]
axum = "0.7"
tokio = { version = "1", features = ["full"] }
serde = { version = "1", features = ["derive"] }最小服务
use axum::{routing::get, Router};
async fn hello() -> &'static str {
"Hello from Axum!"
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(hello));
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
.await
.unwrap();
println!("🚀 监听 http://127.0.0.1:3000");
axum::serve(listener, app).await.unwrap();
}Router::new() 注册路由,get(hello) 把处理函数挂到 /。运行后浏览器访问即可看到响应。
JSON 接口(含 Serde)
use axum::{routing::post, Json, Router};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct User { name: String, age: u32 }
async fn create(Json(user): Json<User>) -> Json<User> {
println!("收到: {} {}", user.name, user.age);
Json(user) // 自动序列化回 JSON
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/user", post(create));
// ... 监听同前
}#[derive(Serialize, Deserialize)] 让结构体自动与 JSON 互转——这就是 Serde 的威力。
小结
- Axum 路由 =
Router+route(path, method(handler))。 - 处理函数是
async fn,返回字符串或Json<T>。 - 配合 Tokio 异步、Serde 序列化,一个生产级 API 几十行就成型。