Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine um restaurante popular durante o horário de almoço. Se todos os clientes chegarem ao mesmo tempo, a cozinha ficará sobrecarregada, o serviço diminuirá e a experiência de todos será prejudicada. O Rate Limiting em APIs funciona de forma semelhante: controla o fluxo de solicitações para proteger o servidor de sobrecargas, garantindo disponibilidade e desempenho consistente para todos os usuários.
Em APIs modernas, o Rate Limiting é absolutamente essencial para prevenir ataques de negação de serviço (DoS), gerenciar recursos limitados e proporcionar uma experiência justa para todos. Nesta aula, você aprenderá a implementar Rate Limiting em suas APIs Express usando o middleware express-rate-limit.
Dentro do ecossistema Node.js/Express, o express-rate-limit se integra perfeitamente ao pipeline de requisições, interceptando-as antes que cheguem às suas rotas e aplicando as regras de limitação definidas.
Conceito Fundamental (7 min)
Rate Limiting, ou limitação de taxa, é uma técnica fundamental que restringe o número de solicitações que um cliente pode fazer a um servidor dentro de um período específico. Essa prática visa preservar a estabilidade e a segurança da API. Termos como “janela de tempo”, “limite de requisições” e “bucket” são frequentes nesse contexto. A “janela de tempo” define o período durante o qual o limite de requisições é aplicado, enquanto o “bucket” representa o contador de requisições para cada cliente.
Em cenários reais, o Rate Limiting é usado por gigantes da tecnologia como Google, Facebook e Twitter para proteger suas infraestruturas de abusos. Imagine um sistema de login: o Rate Limiting impede tentativas excessivas de login, mitigando ataques de força bruta. Essa prática se integra a firewalls, balanceadores de carga e caches para otimizar a performance e a segurança da aplicação.
Implementar Rate Limiting oferece inúmeras vantagens: previne o esgotamento de recursos, protege contra ataques DoS, garante a disponibilidade da API e melhora a experiência geral do usuário. A principal desvantagem reside na possível frustração de usuários legítimos que excedem o limite, o que requer configurações cuidadosas e mensagens de erro informativas.
Implementação Prática (10 min)
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
const port = 3000;
// Configurações específicas para HostGator Plano M (ajuste conforme necessário)
const limiter = rateLimit({
windowMs: 15 60 1000, // Janela de 15 minutos
max: 100, // Limite de 100 requisições por janela
standardHeaders: true, // Retorna os headers padrão do Rate Limit
legacyHeaders: false, // Desativa os headers antigos para maior clareza
message: {
status: 429, // Código de status HTTP para "Too Many Requests"
message: "Muitas requisições. Por favor, tente novamente mais tarde."
},
handler: (req, res, next, options) => { // Manipulador de erro customizado
console.error("Rate limit excedido:", options.message);
res.status(options.message.status).json(options.message);
}
});
app.use('/api', limiter); // Aplica o limitador a todas as rotas /api
app.get('/api/users', (req, res) => {
res.json([{ id: 1, nome: 'João' }, { id: 2, nome: 'Maria' }]);
});
// Rota para testar o Rate Limiting
app.get('/api/test', (req, res) => {
res.send('Teste de Rate Limiting');
});
app.listen(port, () => {
console.log(Servidor rodando em http://localhost:${port});
});
npm install express express-rate-limit
node index.js
Exercício Hands-On (5 min)
Desafio: Implemente Rate Limiting para a rota /api/produtos, permitindo apenas 50 requisições a cada 5 minutos.
Solução:
- Crie um novo limitador com as configurações desejadas:
const productLimiter = rateLimit({
windowMs: 5 60 1000,
max: 50,
message: { status: 429, message: "Limite de requisições excedido para /api/produtos." }
});
- Aplique o limitador à rota
/api/produtos:
app.use('/api/produtos', productLimiter);
- Crie a rota
/api/produtos:
app.get('/api/produtos', (req, res) => {
res.json([{id:1, nome:"Camiseta"}, {id:2, nome:"Calça"}]);
});
Teste: Faça várias requisições rápidas para /api/produtos usando uma ferramenta como curl ou Postman. Após exceder o limite, você receberá a mensagem de erro configurada.
Troubleshooting: Verifique se o express-rate-limit está instalado corretamente e se as configurações do limitador estão sendo aplicadas à rota correta. Analise os logs do console para identificar possíveis problemas.
Próximos Passos: Explore configurações avançadas do express-rate-limit, como skip, keyGenerator e store, para personalizar ainda mais o comportamento do Rate Limiting.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!