目录

Rust Axum Web 开发

Axum 是 Tokio 团队出品的现代 Web 框架,基于异步,API 简洁。它和前面学的 trait、async、所有权无缝衔接,是练手最佳选择。

https://img.zhaojq.top/20260804234640661.png
Rust 框架实战:Axum Web 服务

依赖

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 几十行就成型。

➡️ 12. CLI 工具与序列化(clap + Serde)