Study
Rocket

Fairings

Penjelasan

Fairing adalah jawaban Rocket untuk middleware — istilah ini sengaja dipilih tim Rocket (artinya "pelengkap perjalanan", merujuk metafora pesawat/roket) untuk menekankan bahwa fairing "menempel" pada siklus hidup aplikasi, bukan cuma membungkus satu request seperti `Layer` Tower di Axum. Fairing meng-implementasi trait `Fairing` dan bisa mengait ke beberapa titik siklus hidup: `on_ignite` (saat aplikasi start), `on_request` (sebelum handler dipanggil), `on_response` (sebelum response dikirim), dan `on_liftoff` (setelah server benar-benar mulai listen). Kamu bisa memilih mengimplementasikan hanya sebagian titik ini sesuai kebutuhan. Untuk kebutuhan logging sederhana, Rocket sendiri sudah punya logging bawaan yang otomatis aktif — fairing biasanya dipakai untuk kebutuhan lebih spesifik seperti menambahkan header keamanan ke semua response, mengukur waktu eksekusi request, atau memodifikasi response secara global.

Contoh Konsep

#[macro_use] extern crate rocket;

use rocket::fairing::{Fairing, Info, Kind};
use rocket::{Request, Response};

struct SecurityHeaders;

#[rocket::async_trait]
impl Fairing for SecurityHeaders {
    fn info(&self) -> Info {
        Info {
            name: "Security Headers",
            kind: Kind::Response,
        }
    }

    async fn on_response<'r>(&self, _req: &'r Request<'_>, res: &mut Response<'r>) {
        res.set_raw_header("X-Content-Type-Options", "nosniff");
    }
}

#[get("/")]
fn hello() -> &'static str { "Hello!" }

#[launch]
fn rocket() -> _ {
    rocket::build()
        .attach(SecurityHeaders)
        .mount("/", routes![hello])
}

Praktikum

Lengkapi fairing `RequestCounter` (versi sederhana) yang mencetak log setiap kali `on_request` dipanggil.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Pasang fairing dengan `.attach(...)` pada instance Rocket, mirip `.layer(...)` di Axum — tapi ingat urutan pemasangannya BERBEDA maknanya: fairing dijalankan sesuai urutan `Kind` (Ignite, Liftoff, Request, Response) dan urutan pemasangan dalam kategori yang sama, bukan bertumpuk dari luar ke dalam seperti Layer Tower di Axum.