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

ExtractorWhat 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: HeaderMapRequest headers