Guards di Actix-web
Penjelasan
Guard adalah kondisi tambahan yang harus dipenuhi sebelum sebuah route dianggap cocok dengan request, di luar pencocokan path dan method dasar. Actix-web punya guard bawaan seperti `guard::Header` (cocok kalau header tertentu ada dengan nilai tertentu) atau kamu bisa membuat guard custom sendiri. Guard berguna misalnya untuk membuat dua handler berbeda di path yang sama tapi merespons berdasarkan header `Accept` (JSON vs HTML), atau membatasi route hanya bisa diakses lewat request internal.
Contoh Konsep
use actix_web::{guard, web, App, HttpResponse, HttpServer};
async fn handler_json() -> HttpResponse {
HttpResponse::Ok().json("respons JSON")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new().route(
"/data",
web::get()
.guard(guard::Header("content-type", "application/json"))
.to(handler_json),
)
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
Praktikum
Lengkapi route agar hanya cocok kalau header content-type bernilai application/json.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Guard berbeda dari extractor — guard hanya menentukan APAKAH route cocok dengan request (mempengaruhi routing), sementara extractor mengambil DATA dari request setelah route sudah cocok dan handler dijalankan.