Routing dengan Attribute Macro
Penjelasan
Di Rocket, setiap route dideklarasikan langsung di atas fungsi handler memakai attribute macro seperti `#[get("/path")]`, `#[post("/path")]`, `#[put("/path")]`, `#[delete("/path")]`. Ini berbeda dari Axum yang mendaftarkan path secara terpisah lewat `Router::route()` — di Rocket, path dan handler menyatu dalam satu deklarasi, sehingga lebih mudah dibaca method+path apa yang dilayani sebuah fungsi hanya dengan melihat fungsinya saja. Setelah semua fungsi handler didefinisikan dengan attribute macro-nya masing-masing, mereka harus didaftarkan ke instance Rocket lewat `.mount(base_path, routes![handler1, handler2, ...])`. Makro `routes!` mengumpulkan beberapa handler menjadi satu list yang dipasang di bawah prefix `base_path`. Karena deklarasi route dicek Rocket saat kompilasi (bukan runtime), kalau kamu typo path atau lupa memasukkan handler ke `routes!`, error akan muncul lebih awal — baik di pesan compiler atau warning runtime bahwa route tertentu tidak pernah terpasang.
Contoh Konsep
#[macro_use] extern crate rocket;
#[get("/items")]
fn list_items() -> &'static str {
"daftar semua item"
}
#[post("/items")]
fn create_item() -> &'static str {
"item baru dibuat"
}
#[delete("/items")]
fn delete_all_items() -> &'static str {
"semua item dihapus"
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![list_items, create_item, delete_all_items])
}
Praktikum
Tambahkan handler PUT untuk path "/items" bernama `update_items`, lalu daftarkan ke `routes!`.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Kalau lupa memasukkan handler ke dalam `routes![...]`, Rocket TETAP bisa dikompilasi (karena fungsinya valid secara Rust), tapi route itu tidak akan pernah bisa diakses — request ke path tersebut akan mengembalikan 404. Ini kesalahan paling umum pemula Rocket, jadi selalu cek ulang `routes!` setelah menambah handler baru.