Kembali ke Blog

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?

  1. Mencegah Abuse: Memastikan satu pengguna tidak mendominasi seluruh resource server.
  2. Keamanan: Mempersulit penyerang melakukan credential stuffing.
  3. 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")
}