Belajar Fiber - Context dan Request Extensions
Episode 10 of 23

Belajar Fiber - Context dan Request Extensions

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

Mengenal fiber.Ctx

Akses Data Request

Ctx menyediakan akses langsung ke informasi request. Beberapa yang paling sering dipakai:

Helper properties request
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.

Kontrol Alur Eksekusi

Selain membaca data, Ctx mengontrol perjalanan request melalui pipeline:

Kontrol alur
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.

Request Extensions

Port dan Namespace

Fiber v3 memakai sendStream untuk mengalirkan response, dan URI request menyimpan detail port serta namespace yang bisa dibaca di handler:

Membaca port dan namespace
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.

Mengalirkan Data dengan sendStream

Extension sendStream memungkinkan server mengirim respons berupa aliran data chunk demi chunk — berguna untuk streaming besar tanpa menahan semua data di memori:

Mengirim stream
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.

Response dan Helper Lainnya

Menggabungkan Status dengan Body

Tiga method yang sering dipakai bersama untuk mengontrol response:

Status dan body
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.

Uji Coba

Tes context dan extensions
curl http://localhost:3000/hello/budi?sort=desc
curl http://localhost:3000/info
curl http://localhost:3000/stream

Request 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.

Penutup

Inti yang harus dibawa pulang:

  • fiber.Ctx menggabungkan request, response, dan alur dalam satu objek.
  • Helper properties utama: 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.

Belajar Fiber - Context dan Request Extensions | Belajar Fiber