Pernahkah saldo gateway OTP SMS atau WhatsApp Anda ludes dalam semalam gara-gara ada bot yang memborbardir form pendaftaran? Tanpa Rate Limiting di level API gateway, backend Anda rentan menjadi korban DoS dan tagihan API pihak ketiga yang membengkak.
Algoritma Token Bucket dengan Redis
Token Bucket adalah metode paling populer: Setiap client (diidentifikasi via IP Address atau User ID) diberi kuota "token" (misal: 10 token). Tiap kali client request, 1 token diambil. Token akan otomatis terisi kembali secara berkala (misal: 1 token tiap 5 detik).
Contoh Implementasi Ringkas di Node.js / Express
import rateLimit from 'express-rate-limit';
import RedisStore from 'rate-limit-redis';
import { createClient } from 'redis';
const redisClient = createClient({ url: 'redis://127.0.0.1:6379' });
await redisClient.connect();
export const otpLimiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 3,
standardHeaders: true,
legacyHeaders: false,
store: new RedisStore({
sendCommand: (...args) => redisClient.sendCommand(args),
}),
message: { error: 'Terlalu banyak permintaan OTP. Silakan coba 15 menit lagi.' }
});