Axum框架指南

快速入门

use axum::{routing::{get, post}, Router, Json, extract::{Path, State}}; use serde::{Deserialize, Serialize}; use std::sync::Arc; #[derive(Clone)] struct AppState { db: Database } #[derive(Serialize, Deserialize)] struct User { id: u32, name: String } async fn list_users(State(state): State<Arc<AppState>>) -> Json<Vec<User>> { Json(state.db.get_users().await) } async fn get_user(Path(id): Path<u32>) -> Json<User> { Json(User { id, name: "Alice".into() }) } #[tokio::main] async fn main() { let state = Arc::new(AppState { db: Database::connect().await }); let app = Router::new() .route("/users", get(list_users).post(create_user)) .route("/users/:id", get(get_user).delete(delete_user)) .with_state(state); axum::Server::bind(&"0.0.0.0:8080".parse().unwrap()) .serve(app.into_make_service()).await.unwrap(); }

提取器

提取器提取内容
Path(id): Path<u32>URL路径段
Query(q): Query<T>查询字符串
Json(body): Json<T>JSON请求体
State(s): State<S>共享应用状态
Extension(e): Extension<T>中间件扩展
headers: HeaderMap请求头