// article
Axum で始める Web API 開発.
Axum で始める Web API 開発
Axum は Tokio チーム開発による軽量で高速な Web フレームワークです。シンプルな API でありながら、強力な機能を提供します。
最小限の HTTP サーバー
main.rs
use axum::{routing::get, Router};
use std::net::SocketAddr;
#[tokio::main]
async fn main() {
let app = Router::new()
.route("/", get(hello));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn hello() -> &'static str {
"Hello, Axum!"
}ルーティングと JSON
main.rs
use axum::{
extract::Path,
http::StatusCode,
routing::{get, post},
Json, Router,
};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct User {
id: u32,
name: String,
email: String,
}
#[tokio::main]
async fn main() {
let app = Router::new()
.route("/users/:id", get(get_user))
.route("/users", post(create_user));
// ...
}
async fn get_user(Path(id): Path<u32>) -> Json<User> {
Json(User {
id,
name: "Alice".to_string(),
email: "alice@example.com".to_string(),
})
}
async fn create_user(Json(user): Json<User>) -> (StatusCode, Json<User>) {
(StatusCode::CREATED, Json(user))
}リクエスト・レスポンスのフロー
ミドルウェア
ロギングやエラーハンドリングなどの横断的な処理は、ミドルウェアで実装します:
use tower_http::trace::TraceLayer;
use tower_http::cors::CorsLayer;
let app = Router::new()
.route("/users", get(list_users))
.layer(TraceLayer::new_for_http())
.layer(CorsLayer::permissive());
エラーハンドリング
カスタムエラー型を実装して、統一されたエラーレスポンスを返すことができます。
パフォーマンス
Axum は非同期I/O(async/await)を活用し、多数の同時接続を効率的に処理できます。数千のコンカレント接続でも、ハードウェアのリソースを効率的に使用します。