Rate Limiting — API

Rate Limiting membatasi jumlah request yang bisa dikirim client dalam periode waktu tertentu. Mengapa penting: Mencegah abuse dan DDoS attack Menjaga performa…

Rate Limiting membatasi jumlah request yang bisa dikirim client dalam periode waktu tertentu.

Mengapa penting:

Algoritma umum:

  1. Token Bucket: setiap user punya "ember" berisi token. Setiap request mengambil 1 token. Token diisi ulang secara berkala.
  2. Sliding Window: hitung request dalam window waktu yang bergeser. Misal: max 100 request per 15 menit.
  3. Fixed Window: hitung request per periode tetap (misal per menit). Sederhana tapi bisa ada burst di pergantian window.

Implementasi dengan express-rate-limit:

const rateLimit = require("express-rate-limit");

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 menit
  max: 100, // max 100 request per window
  message: { error: "Too many requests, coba lagi nanti" },
});

app.use("/api/", limiter);

Rate Limit Headers:

X-RateLimit-Limit: 100        → max request per window
X-RateLimit-Remaining: 42     → sisa request
X-RateLimit-Reset: 1625097600 → kapan reset (Unix timestamp)

Status code 429 Too Many Requests:

{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Terlalu banyak request. Coba lagi dalam 10 menit.",
    "retry_after": 600
  }
}

Per-user vs Per-IP:

Yang akan kamu pelajari