Path & Query Extractors
Penjelasan
Extractor adalah cara Actix-web mengambil data dari request secara type-safe. `web::Path<T>` mengekstrak segmen dinamis dari URL (misalnya `/catatan/{id}`), sedangkan `web::Query<T>` mengekstrak parameter query string (misalnya `?halaman=2`). Kamu cukup menambahkan parameter dengan tipe extractor tersebut di signature handler, dan Actix otomatis melakukan parsing serta deserialisasi sebelum handler dipanggil — kalau parsing gagal (misalnya id bukan angka), Actix otomatis mengembalikan response error tanpa kamu perlu menulis validasi manual.
Contoh Konsep
use actix_web::{get, web, Responder};
use serde::Deserialize;
#[derive(Deserialize)]
struct Paginasi {
halaman: Option<u32>,
}
#[get("/catatan/{id}")]
async fn detail_catatan(path: web::Path<u32>) -> impl Responder {
let id = path.into_inner();
format!("Detail catatan id: {}", id)
}
#[get("/catatan")]
async fn daftar_catatan(query: web::Query<Paginasi>) -> impl Responder {
let halaman = query.halaman.unwrap_or(1);
format!("Menampilkan halaman: {}", halaman)
}
Praktikum
Lengkapi handler agar mengekstrak `id` dari path sebagai u32.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Untuk path dengan lebih dari satu segmen dinamis, gunakan tuple: `web::Path<(u32, String)>`, atau lebih jelas lagi pakai struct dengan `#[derive(Deserialize)]` supaya nama field-nya eksplisit alih-alih mengandalkan urutan tuple.