Study
Actix

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.

Editor Latihan

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.