Episode ini membedah routing lanjutan Fiber v3: semua metode HTTP, app.Add dan app.All, mendaftarkan banyak handler pada satu route, handler variadic, multiple routes dalam satu panggilan, serta batas jumlah handler per route yang boleh didaftarkan.

Di episode 4 kalian sudah mengenal path parameter dan constraints. Episode 7 melengkapi fondasi routing: bagaimana mendaftarkan route untuk setiap metode HTTP, menggabungkan banyak handler dalam satu route, memakai handler variadic, dan memahami batasan jumlah handler yang bisa didaftarkan.
Topik ini sering diremehkan, padahal pola handler variadic dan multiple route dalam satu panggilan akan sering kalian temui saat membaca kode open-source Fiber. Menguasainya membuat kalian lancar membaca dan menulis API yang kompleks.
Fiber v3 menyediakan method untuk setiap verba HTTP standar. Berikut pemetaannya:
app.Get("/resource", listHandler) // READ
app.Post("/resource", createHandler) // CREATE
app.Put("/resource/:id", updateHandler) // UPDATE menyeluruh
app.Patch("/resource/:id", patchHandler)
app.Delete("/resource/:id", deleteHandler)
app.Options("/resource", optionsHandler)
app.Head("/resource", headHandler)
app.Trace("/resource", traceHandler)
app.Connect("/resource", connectHandler)Selain method eksplisit, ada dua helper penting. app.All(path, ...handler) mendaftarkan route yang cocok dengan metode apa pun, dan app.Add(method, path, ...handler) menerima metode sebagai string — berguna saat metode ditentukan secara dinamis dari data.
Satu route bisa memiliki beberapa handler. Fiber mengeksekusinya berurutan dalam satu pipeline — handler pertama bisa berperan sebagai middleware khusus route:
func checkBody(c fiber.Ctx) error {
if len(c.Body()) == 0 {
return c.Status(fiber.StatusBadRequest).SendString("body kosong")
}
return c.Next()
}
app.Post("/submit", checkBody, func(c fiber.Ctx) error {
return c.JSON(fiber.Map{"ok": true, "data": c.Body()})
})checkBody memvalidasi request sebelum handler utama berjalan. Karena di-passing langsung ke route, middleware ini hanya berlaku untuk /submit, bukan untuk semua route.
Fiber v3 menerima daftar handler yang beragam dalam satu panggilan, termasuk kombinasi string route dan fiber.Handler:
app.Get("/a", handlerA, "/b", handlerB, handlerC)Pola ini membuat app.Get("/a", handlerA, "/b", handlerB, handlerC) mendaftarkan dua route sekaligus: /a dengan handlerA, lalu /b dengan handlerB dan handlerC berurutan. Kemampuan ini berasal dari definisi signature handler yang variadic:
func (app *App) Get(path string, handlers ...any) RoutesVariadic ...any menerima string (path baru) maupun fiber.Handler. Ini berguna saat ingin mendaftarkan route dengan baris yang ringkas, misalnya kumpulan route sederhana yang menangani satu resource.
Tidak semua fungsi handler berbentuk fiber.Handler. Fiber menyediakan fungsi konversi agar handler dari library lain bisa langsung dipakai:
app.Get("/nethttp", adaptor.HTTPHandler(handler))
app.Get("/gin", adaptor.HTTPHandlerFunc(writeGinLikeResponse))Package github.com/gofiber/fiber/v3/adaptor menyediakan HTTPHandler, HTTPHandlerFunc, HTTPMiddleware, dan HTTPMiddlewareFunc untuk mengadaptasi handler net/http maupun Gin ke Fiber. Ini sangat membantu saat migrasi bertahap dari framework lain.
Fiber membatasi jumlah handler yang dapat didaftarkan pada satu route. Nilai defaultnya 5 dan bisa diubah lewat konfigurasi:
app := fiber.New(fiber.Config{
Routes: fiber.Routes{
UsePathParams: true,
StrictRouting: false,
CaseSensitive: false,
RouteHandlerLimit: 10,
},
})RouteHandlerLimit: 10 menaikkan batas handler per route dari default 5 menjadi 10. Jika kalian mendaftarkan lebih banyak handler dari batas, Fiber mengembalikan error pada saat startup. Sisanya, UsePathParams mengaktifkan parameter pada middleware app.Use dan StrictRouting/CaseSensitive mengatur ketegasan pencocokan path.
curl http://localhost:3000/a
curl -X POST http://localhost:3000/submit
curl -X POST -d '{"x":1}' http://localhost:3000/submit
curl http://localhost:3000/nethttpRequest pertama ke /a menjalankan handlerA yang didaftarkan secara variadic. Request POST ke /submit tanpa body mengembalikan 400 dari checkBody; dengan body mengembalikan {"ok":true}. Endpoint /nethttp membuktikan handler net/http bisa diadaptasi langsung.
Inti yang harus dibawa pulang:
Get, Post, Put, Patch, Delete, Options, Head, Trace, Connect.app.All mencocokkan semua metode; app.Add(method, path, ...) menerima metode dinamis.app.Get("/a", hA, "/b", hB) mendaftarkan banyak route sekaligus.adaptor mengubah handler net/http dan Gin menjadi fiber.Handler.Routes.RouteHandlerLimit mengontrol batas jumlah handler per route, default 5.Di episode 8 selanjutnya kita membahas group dan domain routing — mengorganisasi route ke dalam RouteGroup, nested group, mounting sub-app, serta fitur v3 RouteChain dan domain routing per host.