Study
Rocket

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.

Editor Latihan

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.