Keamanan API: Implementasi Rate Limiting di Go Fiber
Sebagai backend engineer, salah satu aspek yang paling sering dilupakan adalah Rate Limiting. Tanpa batasan yang jelas, API kita sangat rentan terhadap serangan Brute Force atau bot yang membombardir endpoint kita hingga server tumbang.
Mengapa Rate Limiting Penting?
- Mencegah Abuse: Memastikan satu pengguna tidak mendominasi seluruh resource server.
- Keamanan: Mempersulit penyerang melakukan credential stuffing.
- Cost Efficiency: Mengurangi biaya operasional pada infrastruktur yang berbasis pay-per-use.
Implementasi di Fiber v3
Beruntungnya, Fiber sudah menyediakan middleware resmi yang sangat mudah dikonfigurasi. Kita tidak perlu membuat logika manual menggunakan Redis atau in-memory map dari nol.
Contoh Kode Middleware:
package main
import (
"time"
"[github.com/gofiber/fiber/v3](https://github.com/gofiber/fiber/v3)"
"[github.com/gofiber/fiber/v3/middleware/limiter](https://github.com/gofiber/fiber/v3/middleware/limiter)"
)
func main() {
app := fiber.New()
// Konfigurasi Limiter
app.Use(limiter.New(limiter.Config{
Max: 20, // Maksimal 20 request
Expiration: 1 * time.Minute, // per 1 menit
LimitReached: func(c fiber.Ctx) error {
return c.Status(429).JSON(fiber.Map{
"message": "Terlalu banyak permintaan, coba lagi nanti.",
})
},
}))
app.Get("/api/data", func(c fiber.Ctx) error {
return c.SendString("Data berhasil diambil!")
})
app.Listen(":3000")
}