Rate Limiting (Limitação de Taxa)
O Rate Limiting (limitação de taxa) restringe o número de pedidos à API que um cliente pode fazer dentro de um determinado período. Protege a infraestrutura da API contra sobrecarga, garante uma utilização justa entre todos os clientes e previne abusos ou ciclos descontrolados acidentais.
O que é o Rate Limiting?
O Rate Limiting é um mecanismo de controlo de tráfego que limita quantos pedidos à REST API um único cliente (identificado pela chave de API ou endereço IP) pode fazer dentro de um período definido. Por exemplo, um limite de 100 pedidos por minuto significa que o 101.º pedido dentro desse minuto é rejeitado com o estado HTTP 429 (Too Many Requests). O cliente tem de aguardar que a janela se reponha antes de enviar novos pedidos.
O Rate Limiting funciona a vários níveis: por endpoint (por exemplo, o envio de mensagens pode ter limites mais apertados do que a leitura de contactos), por conta (total de pedidos em todas as chaves) e, por vezes, por canal (o WhatsApp impõe os seus próprios limites, separados da camada da API). Compreender estas camadas ajuda a conceber aplicações que operam dentro destes limites de forma fiável.
Por que é importante o Rate Limiting?
Sem Rate Limiting, um único script com falhas poderia inundar a API com milhões de pedidos, degradando o desempenho para todos. Os limites de taxa servem três objetivos: Proteção da infraestrutura – impedem a sobrecarga dos servidores e mantêm tempos de resposta consistentes para todos os utilizadores. Utilização justa – garantem que nenhum cliente individual monopoliza os recursos partilhados. Prevenção de abusos – travam bots de spam e chaves de API comprometidas, evitando danos em grande escala.
Para os programadores, o Rate Limiting funciona também como uma rede de segurança. Um erro num ciclo de repetição poderia enviar milhares de mensagens duplicadas – os limites de taxa detetam-no antes de se tornar um problema dispendioso. Obrigam a escrever código robusto, com tratamento de erros adequado, estratégias de backoff e gestão de filas.
Exemplo prático
Imagine que está a criar uma funcionalidade de campanha que envia mensagens de WhatsApp a 10.000 contactos. Sem consciência dos limites, o seu código poderia tentar disparar os 10.000 pedidos em simultâneo. A API rejeitaria a maioria com erros 429, a sua campanha falharia parcialmente e desperdiçaria volume incluído em repetições.
A abordagem correta: verifique os cabeçalhos da resposta para obter informação sobre os limites de taxa. A SendSeven devolve cabeçalhos como X-RateLimit-Limit (máximo de pedidos), X-RateLimit-Remaining (pedidos restantes) e X-RateLimit-Reset (quando a janela se repõe). Use-os para regular o ritmo dos seus pedidos. Implemente backoff exponencial: se receber um 429, aguarde 1 segundo, depois 2, depois 4 – não martele a API de imediato.
Arquitetura baseada em filas: para envios de grande volume, use uma fila de mensagens (Redis, RabbitMQ ou uma simples fila em memória). Coloque os 10.000 destinatários na fila e consuma a um ritmo que se mantenha abaixo do limite. Esta abordagem é resiliente, mensurável e evita chamadas de API desperdiçadas. A funcionalidade de campanhas da SendSeven (Reach) trata disto automaticamente.
Rate Limiting com a SendSeven
A SendSeven aplica os limites de taxa por espaço de trabalho, e não por chave de API; os endpoints de início de sessão e autenticação contam por endereço IP. Cada limite é medido numa janela móvel de 60 segundos, e a sua integração partilha esse orçamento com o painel. Os limites são os mesmos em todos os planos. Todas as respostas incluem os cabeçalhos X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset, para que a sua aplicação saiba sempre em que ponto está. Quando ultrapassa um limite, a API devolve uma resposta 429 com um cabeçalho Retry-After que indica quantos segundos deve aguardar.
Para o envio em massa, recomendamos a funcionalidade integrada Reach (Campanhas) da SendSeven, em vez de chamadas individuais à API. As campanhas são processadas do lado do servidor: define a velocidade de envio e o tamanho dos lotes e, no WhatsApp, pode distribuir um envio grande por vários dias para proteger um número novo. Para isso, não precisa de gerir limites de taxa do seu lado.
Os valores atuais estão na documentação da API em docs.sendseven.com. Boa prática: acompanhe X-RateLimit-Remaining, abrande antes de chegar a zero e coloque os pedidos numa fila do lado do cliente, para que um erro 429 nunca chegue aos seus utilizadores.