Como lidar com a limitação de taxa

A limitação de taxa é uma técnica comum usada por provedores de API para gerenciar o número de solicitações que podem ser feitas ao seu serviço em um período de tempo específico. Os provedores de API usam limitação de taxa para garantir que seu serviço permaneça disponível e responsivo a todos os usuários, e para evitar abuso ou uso excessivo do serviço.

Quando você usa APIs de nuvem em seu aplicativo, você deve entender seus limites de taxa. As técnicas a seguir podem ajudá-lo a lidar com a limitação de taxa em seus aplicativos:

  • Entenda os limites de taxa. Verifique a documentação da API que você usa para entender seus limites de taxa. Os limites de taxa podem depender do provedor de API ou do plano de serviço que você usa. Por exemplo, algumas APIs podem ter limites de taxa diferentes para planos gratuitos e pagos.
  • Informações de limitação de taxa de uso. As APIs que utilizam limites de taxa normalmente comunicam os limites atuais nos cabeçalhos de resposta. Por exemplo, o RateLimit-Remaining cabeçalho indica o número de solicitações que permanecem na janela atual. Se receber uma resposta com este cabeçalho definido como 0, sabe que atingiu o limite de taxa e deve aguardar a próxima janela antes de enviar outro pedido. O cabeçalho RateLimit-Reset indica a hora em que o limite de taxa é redefinido. Os nomes e formatos dos cabeçalhos variam consoante a API: o GitHub, por exemplo, usa x-ratelimit-remaining e x-ratelimit-reset em segundos de época UTC. Algumas APIs enviam os cabeçalhos apenas depois de atingires um determinado limite. Um exemplo é quando você tem 10% das solicitações restantes.
  • Otimize o uso da API. Alguns serviços atribuem custos diferentes a diferentes pedidos com base na sua complexidade. Por exemplo, algumas APIs podem cobrar mais por solicitações que retornam mais dados. Para reduzir o custo do seu aplicativo, otimize o uso da API buscando apenas os dados de que você precisa. Use solicitações em lote se a API oferecer suporte a elas. Eles ajudam a reduzir o número de recursos necessários para processar a resposta e permanecer dentro dos limites de taxa.
  • Implemente um limitador de taxa local. Implemente um limitador de taxa dentro do próprio aplicativo para limitar o número de solicitações que podem ser feitas à API em um período de tempo específico. Você pode fazer isso usando técnicas como os algoritmos de "token bucket" ou "leaky bucket", que permitem que o aplicativo faça muitas solicitações por período de tempo determinado. Quaisquer solicitações adicionais são enfileiradas ou descartadas.
  • Evite exceder os limites tarifários. Quando ultrapassa os limites de taxa, a API limita os seus pedidos, normalmente com um código de estado HTTP 429 Too Many Requests . O throttling afeta o débito da sua aplicação mais do que a limitação de taxa. Utilize a informação nos cabeçalhos de resposta do limite de taxa para se manter dentro dos limites e evitar limitações.

Usando essas técnicas, você pode criar aplicativos que são resilientes à limitação de taxa e podem continuar a funcionar mesmo quando a API está sob carga pesada. Depois testa se isso acontece, porque raramente atinges um limite de taxa enquanto desenvolves.

Como testar a gestão do seu limite de taxa de pedidos

Approach O que encontra Do que sente falta
Aguardar o ambiente de produção Limites de taxa reais Tudo, até que um utilizador lhe clique
Simula a API nos teus testes, ou deixa o teu agente de programação escrever o mock Se o seu código lê os cabeçalhos que mockou Os nomes reais dos cabeçalhos, formatações e comportamento de reset da API, e a política de retentativas do seu SDK. A tua aplicação também precisa de um switch só de teste para chegar ao mock.
Chama a API real até atingires o limite Comportamento real Não consegues atingir o limite a pedido, gastas a tua quota real e alguns limites só são reiniciados após uma hora
Intercete o tráfego real da sua aplicação e simule o limite URLs reais, um limite e uma janela de tempo que escolhes, e os próprios cabeçalhos da API O teu código isoladamente. Guarda os testes unitários para isso.

Experimente na sua app

O Dev Proxy conta os pedidos da tua app para as APIs que escolhes, adiciona cabeçalhos de limite de taxa às respostas e responde com 429 quando a tua app ultrapassa o limite, enquanto a tua app continua a chamar os URLs reais. Escolhes o limite e a janela temporal, por isso podes atingi-lo num minuto em vez de uma hora.

Para o GitHub, descarrega a predefinição e inicia o Dev Proxy com ela:

devproxy config get github-rate-limiting
devproxy --config-file "~dataFolder/configs/github-rate-limiting/.devproxy/devproxyrc.json"

Para chamadas Microsoft Graph para OneDrive e SharePoint (/drive, /shares, /sites), use o microsoft-graph-rate-limiting preset. Para instalar Dev Proxy, consulte Configurar Dev Proxy.

Próximo passo