Endpoint: Rate Limiting
O que é Rate Limiting?
Rate Limiting é uma técnica fundamental para controlar o fluxo de requisições a um sistema, definindo limites máximos permitidos em determinado intervalo de tempo. Isso protege recursos, mantém a estabilidade do serviço e melhora a experiência dos usuários, prevenindo abusos e ataques.
Sem o Rate Limiting, sistemas ficam vulneráveis a ataques DoS (Denial of Service), brute force e sobrecarga acidental causada por clientes mal configurados.
Objetivos Principais do Rate Limiting
- Segurança: Mitigar ataques automatizados e abusos.
- Qualidade do Serviço: Garantir que o sistema não fique indisponível para usuários legítimos.
- Escalabilidade: Proteger recursos limitados, como banco de dados e servidores backend.
- Cobrança e Controle: Limitar uso para APIs pagas e controlar custos.
Como Funciona o Rate Limiting
O servidor monitora quantas requisições cada cliente faz dentro de um período específico. Quando o limite é atingido, novas requisições são rejeitadas ou atrasadas, dependendo da política aplicada.
Para aplicar a técnica, é necessário escolher um identificador para o cliente, que pode ser:
- Endereço IP
- Chave API
- Usuário autenticado
- Token JWT
Essa identificação permite aplicar limites individualizados e evitar penalizar injustamente outros usuários.
Tipos de Algoritmos para Rate Limiting
Vários algoritmos são usados, dependendo do nível de precisão e recursos do sistema:
Fixed Window Counter
Conta requisições em uma janela de tempo fixa (ex: 1 minuto). Simples, mas pode causar picos quando a janela reinicia.
Sliding Log
Armazena timestamps de cada requisição para cálculo mais preciso. Pode consumir muita memória em alto tráfego.
Sliding Window Counter
Combina fixed window com suavização dos picos, dividindo a janela em sub-janelas, balanceando precisão e eficiência.
Token Bucket
Permite "acumular" tokens que permitem requisições até um limite, permitindo picos controlados e regularizando o fluxo.
Leaky Bucket
Assemelha-se ao Token Bucket, mas libera requisições a uma taxa constante, suavizando bursts.
Exemplo Visual do Funcionamento - Token Bucket
Imagine um balde com tokens que enchem a uma taxa constante. Cada requisição "consome" um token. Se não houver tokens, a requisição é rejeitada ou enfileirada.

Fonte da imagem: Wikipedia - Token Bucket
Implementação Prática em Node.js com express-rate-limit
Um exemplo real com o middleware express-rate-limit
para controlar 100 requisições a cada 15
minutos:
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// Configura o limitador
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutos
max: 100, // limite máximo de requisições por IP
message: {
error: 'Você excedeu o número máximo de requisições. Tente novamente mais tarde.'
},
standardHeaders: true, // Retorna cabeçalhos de rate limit padrão
legacyHeaders: false, // Desativa cabeçalhos obsoletos
});
// Aplica o middleware a todas as rotas
app.use(limiter);
app.get('/', (req, res) => {
res.send('Bem-vindo à API da Apex T.I.C!');
});
app.listen(3000, () => {
console.log('Servidor rodando na porta 3000');
});
Cabeçalhos HTTP para Rate Limiting
APIs modernas usam cabeçalhos para informar ao cliente sobre o estado do limite, ajudando a criar clientes mais resilientes:
X-RateLimit-Limit
: Número máximo de requisições permitidas na janela atual.X-RateLimit-Remaining
: Quantidade restante de requisições antes de atingir o limite.X-RateLimit-Reset
: Tempo em segundos para o reset do limite.
Exemplo de resposta:
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 75
X-RateLimit-Reset: 60
Desafios Técnicos e Soluções
- Sincronização em ambientes distribuídos: Para APIs escaláveis, armazenar e sincronizar os contadores pode ser feito via Redis ou banco de dados centralizado.
- Usuários compartilhando IPs: Em redes corporativas ou NAT, IP pode não ser um identificador confiável, exigindo autenticação ou API keys.
- Backoff exponencial: Estratégia para desacelerar o cliente após repetidas requisições excedentes, evitando bloqueios abruptos.
- Monitoramento contínuo: Logs e métricas para ajustar políticas e detectar abusos.
Casos Reais e Integrações
Empresas como Google, Twitter e GitHub usam Rate Limiting em suas APIs públicas para garantir estabilidade e experiência de uso justa.
Ferramentas populares para implementar Rate Limiting incluem:
- Redis: Como armazenamento rápido para contadores distribuídos.
- Nginx: Pode aplicar Rate Limiting diretamente no proxy reverso.
- API Gateway: AWS API Gateway, Kong, Apigee e outros oferecem Rate Limiting configurável.