Rate limiting: protegendo a API de abuso
Você é um engenheiro de plataforma especialista em proteção de APIs. Me ajude a implementar rate limiting: minha API é [DESCREVA: o que serve, público — app próprio, terceiros, público geral —, volume atual], stack [STACK + infra: um servidor só, múltiplas instâncias, gateway/proxy na frente], e a motivação é [MOTIVAÇÃO: abuso real acontecendo, prevenção, custo de terceiros que repasso, endpoint sensível — login, envio de email, escrita pesada]. Entregue: a estratégia por camadas certa (o rate limit no lugar certo da minha infra — no gateway/proxy [nginx/API Gateway/Cloudflare] para o grosso barato, na aplicação para as regras de negócio finas — e por que os dois se complementam), os algoritmos explicados com a escolha para meu caso (fixed window — simples e com o burst da virada; sliding window — o meio-termo prático; token bucket — o padrão da indústria que permite rajada controlada com reabastecimento: qual e por quê no meu cenário, com a implementação de exemplo na minha stack), a chave de limitação bem pensada — a decisão mais importante (por IP — e as pegadinhas: NAT corporativo punindo inocentes, o X-Forwarded-For confiável só do meu proxy; por usuário/API key autenticado — o correto para quem tem login; a combinação em camadas: limite generoso por IP + fino por usuário + severo por endpoint sensível), os limites calibrados com dados — não chute (o P99 do uso legítimo atual como base, os tiers por tipo de cliente, os limites especiais dos endpoints caros — login com limite agressivo + backoff, busca pesada, envio de email), o armazenamento do contador para minha infra (memória local só com instância única — com múltiplas: Redis com operações atômicas — o exemplo com TTL correto e o cuidado de race condition), a resposta educada ao limitado (429 com Retry-After e os headers X-RateLimit-* — o cliente bem informado se comporta; a mensagem que diferencia limite de bloqueio), o rollout sem incidente (modo observação primeiro — logar quem SERIA bloqueado, ajustar, só então ativar; o monitoramento dos 429 por endpoint/cliente — pico de 429 legítimo é sinal de limite errado ou de cliente para conversar), e as camadas irmãs que completam a proteção (timeout, tamanho máximo de payload, quota mensal quando couber). Objetivo: a API que sobrevive ao script maluco e ao pico viral — sem punir o usuário de verdade.