Lewati ke konten

Fiber v3

distlimit menyediakan adapter middleware native bebas dependensi untuk aplikasi Fiber v3 melalui package github.com/balramadan/distlimit/middleware/fiber.


Instal Fiber v3 dan distlimit menggunakan Go Modules:

Terminal window
go get github.com/gofiber/fiber/v3
go get github.com/balramadan/distlimit

Pasangkan middleware distlimit secara global pada aplikasi Fiber Anda:

package main
import (
"time"
"github.com/balramadan/distlimit"
"github.com/balramadan/distlimit/algorithm/tokenbucket"
"github.com/balramadan/distlimit/driver/memory"
distlimitfiber "github.com/balramadan/distlimit/middleware/fiber"
"github.com/gofiber/fiber/v3"
)
func main() {
// 1. Inisialisasi Driver & Limiter (100 request / menit)
memDriver := memory.New(5 * time.Minute)
limiter, _ := distlimit.New(
memDriver,
distlimit.WithLimit(100),
distlimit.WithWindow(1*time.Minute),
distlimit.WithAlgorithm(tokenbucket.New()),
)
app := fiber.New()
// 2. Registrasi Middleware distlimit
app.Use(distlimitfiber.New(limiter))
app.Get("/api/ping", func(c fiber.Ctx) error {
return c.SendString("pong")
})
app.Listen(":3000")
}

Konfigurasikan perilaku middleware dengan meneruskan opsi ke distlimitfiber.New(limiter, opts...):

Opsi Tipe Deskripsi
WithTrustedProxies(proxies) []string Blok CIDR atau IP reverse proxy terpercaya untuk parsing IP yang aman.
WithKeyFunc(fn) func(c fiber.Ctx) string Fungsi kustom untuk mengekstrak key rate limit dari context Fiber.
WithRouteLabeling(enable) bool Mengaktifkan pengiriman path route Fiber (c.Route().Path) ke label metrik.

Secara default, distlimit membatasi request berdasarkan alamat IP client. Anda dapat mengekstrak pengenal kustom seperti API Key atau Bearer Token menggunakan WithKeyFunc:

app.Use(distlimitfiber.New(
limiter,
distlimitfiber.WithKeyFunc(func(c fiber.Ctx) string {
if apiKey := c.Get("X-API-Key"); apiKey != "" {
return "api_key:" + apiKey
}
// Fallback ke alamat IP client
return distlimitfiber.ExtractClientIP(c, nil)
}),
))

Saat rate limiting aktif, distlimit secara otomatis menyisipkan header standar RFC 6585 ke dalam setiap response HTTP Fiber:

Header Deskripsi Contoh
RateLimit-Limit Kuota request maksimum dalam window aktif 100
RateLimit-Remaining Sisa kuota request yang diizinkan dalam window aktif 99
RateLimit-Reset Waktu dalam detik hingga kuota di-reset 45
X-RateLimit-Limit Header legacy untuk kuota limit maksimum 100
X-RateLimit-Remaining Header legacy untuk sisa kuota request 99
X-RateLimit-Reset Header legacy untuk durasi reset dalam detik 45

Saat client melampaui kuota yang diizinkan, Fiber akan menghentikan eksekusi dan mengembalikan status HTTP 429 Too Many Requests.