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):
- Ambil IP-nya:
const ip = req.ip ?? "local";.
- 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 }.
- Tambah
count satu, lalu simpan lagi di hits[ip].
- 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.
- 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.