Latihan 1: Rate Limiting — API

Latihan 1 dari materi Rate Limiting di API — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Batasi GET /api/data jadi maksimal 5 request per menit per IP. Paket express-rate-limit gak ada di tester, jadi limiter-nya kamu tulis sendiri sebagai middleware. Starter-nya sudah berisi WINDOW_MS, MAX_REQUESTS, object hits, function limiter yang masih kosong, dan route yang memasangnya: app.get("/api/data", limiter, ...).

Isi limiter(req, res, next):

  1. Ambil IP-nya: const ip = req.ip ?? "local";.
  2. Kalau IP itu belum punya catatan, atau window-nya sudah lewat (Date.now() - hits[ip].start >= WINDOW_MS), mulai catatan baru: { start: Date.now(), count: 0 }.
  3. Tambah count satu, lalu simpan lagi di hits[ip].
  4. Kalau count lebih dari MAX_REQUESTS, jawab return res.status(429).json({ error: "Too many requests, please try again later." });. Angka 429 harus ada di kodenya.
  5. Selain itu, panggil next() supaya handler-nya menjawab { data: "Hello!" } dengan status 200.

Tester mengirim GET /api/data sekali (harus 200), lima kali berturut-turut (yang kelima harus 200), dan enam kali berturut-turut (yang keenam harus 429). Window tetap, window geser, atau token bucket sama-sama lolos, asal request ke-6 dalam satu menit ditolak.

Hint