Dynamic Path Segment
Penjelasan
Rocket menangkap segmen dinamis pada path dengan sintaks `<nama>` di dalam string path attribute macro, misalnya `#[get("/users/<id>")]`. Segmen ini otomatis dicocokkan dengan parameter fungsi yang punya nama SAMA PERSIS — `id` di path harus punya pasangan parameter `id: TipeData` di signature fungsi. Keunikan Rocket di sini: tipe parameter dicek KOMPILATOR, bukan cuma runtime. Kalau kamu deklarasikan `id: u32`, Rocket otomatis menolak request dengan segmen yang bukan angka SEBELUM handler-mu dijalankan — mengembalikan 404 (karena Rocket menganggap path itu tidak cocok pola sama sekali, bukan error 400 seperti Axum). Untuk beberapa segmen dinamis, cukup tambahkan lebih banyak `<nama>` di path dan parameter fungsi yang cocok, misalnya `/users/<user_id>/posts/<post_id>`.
Contoh Konsep
#[macro_use] extern crate rocket;
#[get("/users/<id>")]
fn get_user(id: u32) -> String {
format!("Detail user dengan id {}", id)
}
#[get("/users/<user_id>/posts/<post_id>")]
fn get_user_post(user_id: u32, post_id: u32) -> String {
format!("Post {} milik user {}", post_id, user_id)
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![get_user, get_user_post])
}
Praktikum
Buat handler `get_product` untuk path "/products/<product_id>" yang menerima `product_id: u32` dan mengembalikan string berisi id tersebut.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Karena parameter dicocokkan berdasarkan NAMA (bukan urutan seperti tuple di Axum), pastikan nama di dalam `<...>` path dan nama parameter fungsi ditulis identik huruf demi huruf — kalau beda (misalnya path pakai `<id>` tapi parameter fungsi `user_id`), Rocket akan menolak kompilasi dengan pesan error yang cukup jelas menyebut nama parameter mana yang tidak ditemukan.