Study
Axum

Routing Dasar

Penjelasan

`Router` adalah struktur inti untuk mendaftarkan endpoint di Axum. Setiap pemanggilan `.route(path, method_router)` menambahkan satu entri routing. `method_router` didapat dari fungsi seperti `get()`, `post()`, `put()`, `delete()`, `patch()` yang diimpor dari `axum::routing`. Satu hal yang membedakan Axum dari beberapa framework lain: beberapa method HTTP untuk PATH YANG SAMA bisa digabung dengan chaining, misalnya `get(handler_a).post(handler_b)` — ini artinya GET `/items` dan POST `/items` ditangani handler berbeda tapi didaftarkan dalam satu pemanggilan `.route()`. Axum juga mendukung path dinamis dengan sintaks `{param}` (versi terbaru) atau `:param` (versi lama) untuk menangkap segmen path sebagai variabel — ini akan dibahas detail di topik Path Extractor. Untuk sekarang, fokus dulu pada pola path statis dan method routing.

Contoh Konsep

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

async fn list_items() -> &'static str {
    "daftar semua item"
}

async fn create_item() -> &'static str {
    "item baru dibuat"
}

async fn delete_item() -> &'static str {
    "item dihapus"
}

#[tokio::main]
async fn main() {
    let app = Router::new()
        // GET dan POST untuk path yang sama, digabung lewat chaining
        .route("/items", get(list_items).post(create_item))
        .route("/items/{id}", delete(delete_item));

    let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

Praktikum

Tambahkan route PUT untuk `/items/{id}` yang memanggil handler `update_item`.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Kalau route kamu banyak dan terasa berantakan dalam satu fungsi `main`, pecah jadi fungsi terpisah yang mengembalikan `Router`, misalnya `fn item_routes() -> Router { ... }`, lalu gabungkan dengan `.merge()` di `main`. Ini juga jadi pola dasar sebelum kamu belajar `.nest()` untuk router bersarang.