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`.
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.