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 | 请求头 |