API Rate Limiting: Throttling, Quota e Proteção DDoS
API rate limiting previne abuso e sobrecarga da sua API. Este guia cobre as estratégias de rate limiting, throttling, gestão de quota e proteção DDoS.
Atualizado em:O que é Rate Limiting?
Rate limiting é limitar o número de solicitações que podem ser feitas em um período de tempo específico (segundo, minuto, hora).
Propósitos: Prevenir abuso da API, garantir uso justo, proteger recursos do servidor, reduzir ataques DDoS.
Quando o rate limit é excedido: Retorna o código de status HTTP 429 (Too Many Requests). Especifica quando tentar novamente com o header Retry-After.
Rate limiting aumenta a disponibilidade e confiabilidade da API. Garante a conformidade com SLA (Service Level Agreement).
Algoritmos de Rate Limiting
Fixed Window: Contador mantido em janela de tempo fixa (ex. 100 solicitações por minuto). Simples mas problema de boundary (spike nos limites da janela).
Sliding Window Log: Armazene o timestamp de cada solicitação. Conte as solicitações nos últimos N segundos. Mais preciso mas usa mais memória.
Sliding Window Counter: Híbrido de fixed window e sliding window log. Menos memória, resultado mais preciso.
Token Bucket: Tokens são produzidos a uma taxa específica. Cada solicitação consome um token. Fornece suporte de burst.
Leaky Bucket: Solicitações são adicionadas à fila e processadas a uma taxa fixa. Fornece suavização de tráfego.
Estratégias de Rate Limiting
Baseado em IP: Limite baseado no endereço IP do solicitante. Simples mas usuários atrás de NAT (mesmo IP) têm problemas.
Baseado em usuário: Limite baseado no usuário autenticado. Mais justo. Identifique o usuário com API key ou JWT.
Baseado em endpoint: Limite diferente para cada endpoint. /login (5/min) vs /users (100/min).
Tiered: Limites diferentes para diferentes tipos de usuários. Free (100/min), Pro (1000/min), Enterprise (10000/min).
Global vs por-endpoint: Limite global (para toda a API) + limite por-endpoint. Use ambos juntos.
Implementação
Redis: Armazene os contadores de rate limit no Redis. Contador atômico com comandos INCR e EXPIRE. Ideal para rate limiting distribuído.
Middleware: Middleware do Express.js (express-rate-limit), Django (django-ratelimit), Spring Boot (Bucket4j).
API Gateway: Rate limiting com Kong, AWS API Gateway, Cloudflare. Gestão e monitoramento centralizados.
Response headers: Retorne informações de limite com headers X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Client SDK: Bibliotecas cliente leem as informações de rate limit e realizam retry e backoff automaticamente.
Proteção DDoS
Rate limiting sozinho não fornece proteção DDoS. Ataques DDoS vêm em volumes que excedem o rate limit.
Cloudflare: Proteção DDoS, WAF (Web Application Firewall), gestão de bots. Tier gratuito disponível.
AWS Shield: Proteção DDoS para serviços da AWS. Standard (gratuito) e Advanced (pago).
Reputação de IP: Bloqueie IPs com má reputação. Use listas de reputação como Spamhaus, AbuseIPDB.
CAPTCHA: Verifique o tráfego suspeito com CAPTCHA. reCAPTCHA v3 (invisível) ou hCaptcha.
Geo-blocking: Bloqueie o tráfego de países específicos (se necessário).
Melhores Práticas
Graceful degradation: Dê uma mensagem de erro clara ao usuário quando o rate limit for excedido. Especifique quando tentar novamente com o header Retry-After.
Monitoramento: Monitore os hits de rate limit. Aumento anormal pode indicar ataque ou bug.
Whitelist: Coloque na whitelist os IPs confiáveis (serviços internos, APIs de parceiros).
Documentação: Declare claramente a política de rate limit na documentação da API. Informações de limite, janela e retry.
Testes: Teste o comportamento do rate limit com load testing. Use k6, Artillery ou JMeter.
Ferramentas relacionadas
Guias passo a passo
Artigos práticos sobre este tema
Cache HTTP e CDN: Estratégias de Cache para Desempenho Web
O cache HTTP e CDN (Content Delivery Network) melhoram dramaticamente o desempenho web.
Checklist de SEO Técnico: Otimização do Site e Indexação
SEO técnico cobre os fatores técnicos que afetam a capacidade dos motores de busca de rastrear, indexar e posicionar seu site.