Episode ini membedah fiber.Ctx — objek yang dibawa setiap request: akses request, kontrol response dan alur eksekusi, helper properties, serta request extensions seperti port, namespace, dan sendStream.

fiber.Ctx adalah objek yang menyatukan request dan response dalam satu handler. Episode 10 membedah context Fiber v3: cara mengakses data request, mengontrol alur eksekusi, dan memakai request extensions seperti port, namespace, dan sendStream.
Sekilas banyak method di Ctx, tapi semuanya terkelompok dalam beberapa kategori: request, response, alur, helper, dan lainnya. Memahami peta kategorinya membuat Ctx jauh lebih mudah dikuasai daripada menghafal satu per satu.
Ctx menyediakan akses langsung ke informasi request. Beberapa yang paling sering dipakai:
app.Get("/hello/:name", func(c fiber.Ctx) error {
log.Println("method:", c.Method())
log.Println("path:", c.Path())
log.Println("full URL:", c.BaseURL()+c.OriginalURL())
log.Println("host:", c.Hostname())
log.Println("ip:", c.IP())
log.Println("protocol:", c.Protocol())
log.Println("param:", c.Params("name"))
log.Println("query:", c.Query("sort"))
return c.SendString("ok")
})c.Method() mengembalikan metode HTTP, c.BaseURL() skema dan host (misal http://localhost:3000), c.OriginalURL() path lengkap dengan query, c.IP() alamat pengirim, dan c.Protocol() skema request. Kombinasi helper ini sering dipakai untuk log, tracing, dan membuat link absolut.
Selain membaca data, Ctx mengontrol perjalanan request melalui pipeline:
app.Use(func(c fiber.Ctx) error {
if c.IP() == "127.0.0.1" {
return c.Next()
}
return fiber.NewError(fiber.StatusForbidden, "akses lokal saja")
})c.Next() meneruskan request ke handler berikutnya; mengembalikan error langsung dari middleware menghentikan pipeline dan memicu ErrorHandler. Method alur lain yang berguna: c.SendStatus(status) mengirim status dengan pesan standar, dan c.Redirect(url) memindahkan client.
Fiber v3 memakai sendStream untuk mengalirkan response, dan URI request menyimpan detail port serta namespace yang bisa dibaca di handler:
app.Get("/info", func(c fiber.Ctx) error {
port := c.Request().URI().Port()
ns := c.Request().URI().Namespace()
return c.JSON(fiber.Map{
"port": port,
"namespace": ns,
})
})c.Request().URI().Port() mengembalikan nomor port request, dan c.Request().URI().Namespace() nilai namespace yang terkirim di URL. Informasi ini berguna saat aplikasi berjalan di belakang proxy atau perlu tahu titik masuk spesifik.
Extension sendStream memungkinkan server mengirim respons berupa aliran data chunk demi chunk — berguna untuk streaming besar tanpa menahan semua data di memori:
app.Get("/stream", func(c fiber.Ctx) error {
c.SendStream(func() ([]byte, error) {
return []byte("chunk"), nil
}, fiber.StreamParams{Chunked: true})
return nil
})c.SendStream(fn, params) memanggil fn berulang untuk menghasilkan chunk hingga mengembalikan io.EOF. Dengan Chunked: true, response memakai transfer-encoding chunked. Ini sangat cocok untuk men-stream file besar atau feed data yang terus bertambah.
Tiga method yang sering dipakai bersama untuk mengontrol response:
c.Status(201).JSON(fiber.Map{"id": 1})
c.Set("Content-Type", "application/pdf")
c.Append("X-Extra", "value")c.Status() mengatur kode status (default 200), c.Set() mengatur satu header, dan c.Append() menambahkan nilai ke header yang mungkin sudah ada. Setelah response dikirim, c.Status() tidak bisa lagi mengubah status — karena itu selalu panggil status sebelum mengirim body.
curl http://localhost:3000/hello/budi?sort=desc
curl http://localhost:3000/info
curl http://localhost:3000/streamRequest pertama mencetak semua helper properties request ke terminal server. /info mengembalikan port dan namespace, dan /stream mengirim respons chunked yang diterima client sebagai satu payload.
Inti yang harus dibawa pulang:
fiber.Ctx menggabungkan request, response, dan alur dalam satu objek.Method, Path, BaseURL, OriginalURL, Hostname, IP, Protocol, Params, Query.c.Next() dan error dari middleware mengendalikan alur pipeline.c.Request().URI().Port() dan .Namespace() membaca detail titik masuk.c.SendStream mengalirkan respons chunk dengan StreamParams{Chunked}.Status, Set, dan Append mengontrol header serta status response.Di episode 11 selanjutnya kita membahas breaking changes Fiber v3 — perbedaan signifikan dari v2, pindahan handler variadic, penyesuaian middleware, dan cara migrasi aplikasi yang ada.