cara implementasi rate limiting dengan redis dan express",
Cara Implementasi Rate Limiting dengan Redis dan Express
Rate limiting itu penting banget buat melindungi API kamu dari spam request atau serangan DDoS. Nah, kombinasi Redis dan Express adalah solusi yang cukup populer dan efektif. Redis sebagai in-memory database yang super cepat, cocok banget buat nyimpen data sementara seperti jumlah request per user.
Kenapa Pakai Redis?
Redis punya fitur TTL (Time To Live) yang memungkinkan data otomatis hilang setelah waktu tertentu. Ini pas banget buat rate limiting karena kita bisa set counter request yang akan reset sendiri setiap menit atau jam. Plus, Redis itu cepat banget, jadi nggak akan bikin API kamu jadi lemot.
Setup Awal
Pertama, install dulu package yang dibutuhkan:
- express - framework web
- redis - client Redis untuk Node.js
- express-rate-limit - middleware rate limiting
- rate-limit-redis - store untuk express-rate-limit
Pastikan Redis server sudah running di komputer kamu. Kalau belum install, bisa pakai Docker atau install langsung sesuai OS yang kamu pakai.
Implementasi Sederhana
Konsep dasarnya gini: setiap kali ada request masuk, kita cek berapa kali IP address atau user ID tersebut sudah request dalam periode waktu tertentu. Kalau sudah melebihi batas, tolak requestnya dengan response 429 (Too Many Requests).
Kamu bisa bikin middleware custom atau pakai library yang sudah ada. Dengan rate-limit-redis, kamu tinggal setup connection ke Redis, tentuin berapa maksimal request yang diperbolehkan, dan berapa lama window timenya. Misalnya, maksimal 100 request per 15 menit.
Strategi Rate Limiting
Ada beberapa strategi yang bisa kamu pakai:
- Fixed Window - counter reset di waktu yang fixed, misalnya setiap jam tepat
- Sliding Window - lebih smooth, menghitung request dalam rolling time window
- Token Bucket - setiap user punya "token" yang berkurang tiap request dan refill secara berkala
Untuk kebanyakan kasus, sliding window adalah pilihan terbaik karena lebih adil dan nggak ada "burst" request di awal window baru.
Tips Tambahan
Beberapa hal yang perlu diperhatikan: pertama, tentukan key yang tepat untuk tracking. Bisa pakai IP address, user ID, atau kombinasi keduanya. Kedua, kasih response yang informatif ke client, jangan cuma 429 aja tapi kasih tau kapan mereka bisa request lagi lewat header seperti X-RateLimit-Remaining dan Retry-After.
Terakhir, jangan lupa monitoring. Pantau berapa banyak request yang di-reject dan dari mana asalnya. Ini bisa bantu kamu detect serangan atau adjust limit yang lebih reasonable.
Dengan implementasi rate limiting yang proper, API kamu akan lebih aman dan stabil. Selamat mencoba!