API Rate Limiting: Throttling, Quota e Protezione DDoS
L'API rate limiting previene l'abuso e il sovraccarico della vostra API. Questa guida copre le strategie di rate limiting, il throttling, la gestione delle quote e la protezione DDoS.
Ultimo aggiornamento:Cos'è il Rate Limiting?
Il rate limiting è la limitazione del numero di richieste che possono essere fatte in un periodo di tempo specifico (secondo, minuto, ora).
Scopi: Prevenire l'abuso dell'API, garantire un uso equo, proteggere le risorse del server, ridurre gli attacchi DDoS.
Quando il rate limit viene superato: Restituisce il codice di stato HTTP 429 (Too Many Requests). Specifica quando riprovare con il header Retry-After.
Il rate limiting aumenta la disponibilità e l'affidabilità dell'API. Assicura la conformità SLA (Service Level Agreement).
Algoritmi di Rate Limiting
Fixed Window: Contatore mantenuto in una finestra di tempo fissa (es. 100 richieste al minuto). Semplice ma problema di boundary (spike ai limiti della finestra).
Sliding Window Log: Memorizzate il timestamp di ogni richiesta. Contate le richieste negli ultimi N secondi. Più preciso ma usa più memoria.
Sliding Window Counter: Ibrido di fixed window e sliding window log. Meno memoria, risultato più preciso.
Token Bucket: I token vengono prodotti a un tasso specifico. Ogni richiesta consuma un token. Fornisce supporto burst.
Leaky Bucket: Le richieste vengono aggiunte alla coda e elaborate a un tasso fisso. Fornisce il smoothing del traffico.
Strategie di Rate Limiting
Basato su IP: Limite basato sull'indirizzo IP del richiedente. Semplice ma gli utenti dietro NAT (stesso IP) hanno problemi.
Basato su utente: Limite basato sull'utente autenticato. Più equo. Identificate l'utente con API key o JWT.
Basato su endpoint: Limite diverso per ogni endpoint. /login (5/min) vs /users (100/min).
Tiered: Limiti diversi per diversi tipi di utenti. Free (100/min), Pro (1000/min), Enterprise (10000/min).
Global vs per-endpoint: Limite globale (per tutta l'API) + limite per-endpoint. Usate entrambi insieme.
Implementazione
Redis: Memorizzate i contatori di rate limit in Redis. Contatore atomico con i comandi INCR e EXPIRE. Ideale per il rate limiting distribuito.
Middleware: Middleware Express.js (express-rate-limit), Django (django-ratelimit), Spring Boot (Bucket4j).
API Gateway: Rate limiting con Kong, AWS API Gateway, Cloudflare. Gestione e monitoraggio centralizzati.
Response headers: Restituite le info di limite con gli header X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Client SDK: Le librerie client leggono le info di rate limit ed effettuano automaticamente retry e backoff.
Protezione DDoS
Il rate limiting da solo non fornisce protezione DDoS. Gli attacchi DDoS arrivano in volumi che superano il rate limit.
Cloudflare: Protezione DDoS, WAF (Web Application Firewall), gestione dei bot. Tier gratuito disponibile.
AWS Shield: Protezione DDoS per i servizi AWS. Standard (gratuito) e Advanced (a pagamento).
Reputazione IP: Bloccate gli IP con cattiva reputazione. Usate liste di reputazione come Spamhaus, AbuseIPDB.
CAPTCHA: Verificate il traffico sospetto con CAPTCHA. reCAPTCHA v3 (invisibile) o hCaptcha.
Geo-blocking: Bloccate il traffico da paesi specifici (se necessario).
Migliori Pratiche
Graceful degradation: Date un messaggio di errore chiaro all'utente quando il rate limit viene superato. Specificate quando riprovare con il header Retry-After.
Monitoraggio: Monitorate gli hit di rate limit. Un aumento anomalo può indicare un attacco o un bug.
Whitelist: Mettete in whitelist gli IP di fiducia (servizi interni, API di partner).
Documentazione: Dichiarate chiaramente la politica di rate limit nella documentazione dell'API. Info di limite, finestra e retry.
Test: Testate il comportamento del rate limit con il load testing. Usate k6, Artillery o JMeter.
Strumenti correlati
Guide passo passo
Articoli pratici su questo tema
Cache HTTP e CDN: Strategie di Cache per le Prestazioni Web
Il cache HTTP e il CDN (Content Delivery Network) migliorano drammaticamente le prestazioni web.
Checklist SEO Tecnico: Ottimizzazione del Sito e Indicizzazione
Il SEO tecnico copre i fattori tecnici che influenzano la capacità dei motori di ricerca di eseguire il crawling…