0Pricing
Learn Rust Coding · レッスン

Axumのルーティング

ハンドラーとルート

「Axumのルーティング」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。

Axum とは

Axum は、Tokio チームが開発した使いやすい非同期 Web フレームワークです。tower と hyper を基盤にしています。

  • ハンドラーは通常の async 関数である
  • ルーティングは型を中心に構成でき、組み合わせも可能である
  • Tokio ランタイム上で動作する

ハンドラーは関数

Axum のハンドラーは、&str や String など、レスポンスに変換できる値を返す async 関数です。

async fn hello() -> &'static str {
    "Hello, world!"
}

Router を構築する

Router はパスをハンドラーに対応付けます。get のような HTTP メソッドのフィルターとともに route を使います。

use axum::{Router, routing::get};

async fn hello() -> &'static str { "Hello" }

fn app() -> Router {
    Router::new().route("/", get(hello))
}

サーバーを起動する

TCP リスナーをバインドして、ルーターを提供します。#[tokio::main] マクロが非同期ランタイムをセットアップします。

use axum::{Router, routing::get};

#[tokio::main]
async fn main() {
    let app = Router::new().route("/", get(|| async { "Hi" }));
    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

複数のルート

route の呼び出しを連結して、1 つのルーターに複数のエンドポイントを登録します。

use axum::{Router, routing::get};

fn app() -> Router {
    Router::new()
        .route("/", get(|| async { "home" }))
        .route("/about", get(|| async { "about" }))
}

異なる HTTP メソッド

get(...).post(...) を使うと、1 つのパスに複数のメソッド用ハンドラーを組み合わせられます。各メソッドはそれぞれのハンドラーにルーティングされます。

use axum::{Router, routing::get};

fn app() -> Router {
    Router::new().route(
        "/items",
        get(|| async { "list" }).post(|| async { "create" }),
    )
}

パスパラメーター

{name} セグメントで URL の一部を取得し、Path extractor を使って読み取ります。

use axum::extract::Path;

async fn show(Path(id): Path<u32>) -> String {
    format!("item {}", id)
}

通常の Rust でルーティングをモデル化する

ルーティングの中心は、パスをレスポンスに対応付けることです。ここでは、フレームワークを使わずにその考え方を実行可能なモデルで示します。

fn route(path: &str) -> &str {
    match path {
        "/" => "home",
        "/about" => "about page",
        _ => "404 not found",
    }
}

fn main() {
    println!("{}", route("/"));
    println!("{}", route("/about"));
    println!("{}", route("/missing"));
}

ルーターを入れ子にする

nest を使ってサブのルーターをプレフィックスの下にマウントし、大きなアプリケーションを組み立てます。

use axum::{Router, routing::get};

fn api() -> Router {
    Router::new().route("/users", get(|| async { "users" }))
}

fn app() -> Router {
    Router::new().nest("/api", api())
}

フォールバックハンドラー

fallback を使って、一致するルートがない場合の動作を定義します。カスタム 404 ページに最適です。

use axum::{Router, http::StatusCode};

async fn not_found() -> (StatusCode, &'static str) {
    (StatusCode::NOT_FOUND, "nothing here")
}

fn app() -> Router {
    Router::new().fallback(not_found)
}

ステータスコードを返す

ハンドラーは (StatusCode, body) のタプルを返して、レスポンスのステータスを正確に制御できます。

use axum::http::StatusCode;

async fn create() -> (StatusCode, &'static str) {
    (StatusCode::CREATED, "created")
}

理解度チェック

Axum のルーティングについての理解度を確認しましょう。

まとめ

Axum のルーティングの基本を学びました。

  • ハンドラーはレスポンスを返す async 関数である
  • Router::new().route(path, get(handler)) でエンドポイントを登録する
  • Path で URL のセグメントを取得する
  • nest、fallback、ステータスのタプルでアプリケーションの構成を整える

次は、extractor を使って受信リクエストを解析します。

よくある質問

「Axumのルーティング」レッスンは無料ですか?

はい。「Axumのルーティング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。

「Axumのルーティング」で何を学びますか?

ハンドラーとルート ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Axumのルーティング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn Rust Codingレッスンでコードを書いて実行できますか?

はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Axumのルーティング
  2. エクストラクター
  3. JSONと状態
  4. ミドルウェア
← Learn Rust Codingに戻る