◾️はじめに
https://dk521123.hatenablog.com/entry/2023/09/02/224707
の続き。 今回は、Rustのwebアプリケーション フレームワークであるAxum (アクサム) をREST APIとして使用してみる。
目次
【1】AxumでREST APIを実装するには 【2】サンプル 1)コード 2)動作確認
【1】AxumでREST APIを実装するには
* axum::Json で返す
サンプルより抜粋
use axum::{ Json as AxumJson, }; async fn list_users() -> AxumJson<Vec<User>> {
【2】サンプル
* ベースは、以下のサンプルを一部編集して行う
Rust ~ Axum / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/09/02/224707
1)コード
Cargo.toml
[package] name = "backend_v2" version = "0.1.0" edition = "2024" [dependencies] # Webフレームワーク本体 axum = "0.7" # 非同期ランタイム (Axumの動作に必須) tokio = { version = "1", features = ["full"] } # JSONのシリアライズ/デシリアライズ serde = { version = "1", features = ["derive"] } serde_json = "1" # 環境変数の管理 dotenvy = "0.15" # ログ出力 (任意だが推奨) tracing = "0.1" tracing-subscriber = "0.3" # Add (本質じゃないが) uuid = { version = "1", features = ["serde", "v4"] }
main.rs
mod models; use axum::{ routing::get, Router, Json as AxumJson, }; use std::net::SocketAddr; use tokio::net::TcpListener; use uuid::Uuid; use crate::models::user::User; #[tokio::main] async fn main() { // ログの初期化 (デバッグ情報などをコンソールに出力) tracing_subscriber::fmt::init(); // 1. ルーターの定義 let app = Router::new() // HTTP GETリクエストを "/" パスで受け付ける .route("/", get(root_handler)) // HTTP GETリクエストを "/users" パスで受け付ける .route("/users", get(list_users)); // ここにさらにPOST, PUT, DELETEなどのルートを追加 // 2. サーバーアドレスの設定 let addr = SocketAddr::from(([127, 0, 0, 1], 3002)); tracing::info!("listening on {}", addr); // 3. サーバーの起動 let listener = TcpListener::bind(&addr).await.unwrap(); // 4. axum::serve 関数を使ってリスナーとアプリを紐づける axum::serve(listener, app) .await .unwrap(); } // GET / のハンドラー async fn root_handler() -> &'static str { "Hello, world!!!!" } // GET /users のハンドラー (JSONで返す) async fn list_users() -> AxumJson<Vec<User>> { let users = vec![ User { id: Uuid::new_v4(), name: "Alice".into() }, User { id: Uuid::new_v4(), name: "Bob".into() }, User { id: Uuid::new_v4(), name: "Charlie".into() }, ]; AxumJson(users) }
models/mod.rs
pub mod user;
models/user.rs
use serde::{Deserialize, Serialize}; use uuid::Uuid; #[derive(Serialize, Deserialize)] pub struct User { pub id: Uuid, pub name: String, }
2)動作確認
実行
cargo run
動作確認
* ブラウザで以下のURLにアクセスする
[ {"id":"1a71954b-e306-43d4-9955-5f5d8cfa9bc2","name":"Alice"}, {"id":"699bd5c4-9117-47e0-8e4b-ba1fa42f4764","name":"Bob"}, {"id":"32379c84-c8f7-4c48-9004-613293aaeeb3","name":"Charlie"} ]
関連記事
Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
Rust ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/11/26/224648
Rust ~ mod ~
https://dk521123.hatenablog.com/entry/2025/11/29/221911
Rust ~ crate / module ~
https://dk521123.hatenablog.com/entry/2025/12/11/234320
Rust ~ Axum / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/09/02/224707
Rust ~ Axum / Docker ~
https://dk521123.hatenablog.com/entry/2025/12/08/220615