Axum Framework Guide
Quick Start
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();
}
Extractors
| Extractor | What it extracts |
|---|---|
| Path(id): Path<u32> | URL path segment |
| Query(q): Query<T> | Query string |
| Json(body): Json<T> | JSON body |
| State(s): State<S> | Shared app state |
| Extension(e): Extension<T> | Middleware extension |
| headers: HeaderMap | Request headers |