Como implementar a limitação de taxa no Gerenciamento de API do Azure

Usando o limite de taxa, você pode limitar o número de chamadas de API que um usuário ou serviço pode fazer em um período de tempo específico. A limitação de taxas ajuda a garantir o uso justo e impede que qualquer usuário ou serviço monopolize os recursos da API. O Gerenciamento de API do Azure fornece uma maneira conveniente de implementar o limite de taxa para suas APIs.

Por que usar o Gerenciamento de API do Azure?

O Gerenciamento de API do Azure é um serviço de nuvem poderoso e versátil que ajuda as organizações a publicar APIs para desenvolvedores externos, parceiros e internos. Ele fornece ferramentas para proteger, gerenciar e dimensionar chamadas de API. Um de seus recursos é controlar o limite de taxa, o que é útil para manter a integridade e a confiabilidade de suas APIs.

Configurar limitação de taxa no Gerenciamento de API do Azure

O Gerenciamento de API do Azure usa políticas para impor o limite de taxa. Você pode definir essas políticas em diferentes escopos: global, específico do produto ou da API. Essa flexibilidade permite que você personalize a limitação de taxa de acordo com os requisitos e padrões de uso da sua API.

Antes de começar a implementar o limite de taxa, decida sobre os limites de taxa. Os limites definidos dependem da capacidade da API e do tráfego esperado. Os limites comuns são definidos como o número de chamadas por segundo, minuto ou hora. Por exemplo, você pode permitir 1.000 chamadas por minuto por usuário.

Para definir limites de taxa na sua API no Gerenciamento de API do Azure, use as políticas rate-limit ou rate-limit-by-key. A rate-limit política define um limite para todos os usuários. A rate-limit-by-key política permite limites por chave identificada (como uma assinatura ou um ID de usuário).

Aqui está um exemplo de uma política que limita as chamadas a 1.000 por minuto.

<policies>
  <inbound>
    <base />
    <rate-limit calls="1000" renewal-period="60" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

Quando você excede o número especificado de chamadas, o Gerenciamento de API do Azure envia um 429 Too Many Requests código de status, juntamente com o cabeçalho de retry-after resposta e uma mensagem que indica quando você pode tentar novamente.

HTTP/1.1 429 Too Many Requests
content-type: application/json
retry-after: 60
    
{
  "statusCode": 429,
  "message": "Rate limit is exceeded. Try again in 60 seconds."
}

Expor informações de limite de taxa em cabeçalhos de resposta

Por padrão, o Gerenciamento de API do Azure não expõe informações de limite de taxa em cabeçalhos de resposta. Não comunicar os limites de taxa torna difícil para os aplicativos evitar exceder o limite e ser limitado. Para expor informações sobre o limite de taxa, estenda a política rate-limit com as propriedades remaining-calls-header-name e total-calls-header-name.

<policies>
  <inbound>
    <base />
    <rate-limit calls="1000" renewal-period="60" remaining-calls-header-name="ratelimit-remaining" total-calls-header-name="ratelimit-limit" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

Quando você chama sua API agora, cada resposta inclui os ratelimit-remaining cabeçalhos e ratelimit-limit . Os cabeçalhos comunicam quantas chamadas mais a API pode processar antes de exceder o limite.

Resumo

A implementação do limite de taxa no Gerenciamento de API do Azure ajuda a criar APIs robustas e escaláveis. Ao usar o limite de taxa, você pode garantir que sua API atenda seus usuários de forma confiável e eficiente. A chave é encontrar o equilíbrio certo. Se um limite de taxa for muito rigoroso, você pode prejudicar a usabilidade. Se um limite de taxa for muito brando, você corre o risco de sobrecarregar sua API. Com um planejamento cuidadoso e monitoramento contínuo, você pode alcançar esse equilíbrio e manter um ambiente de API saudável.

Teste os seus clientes

Depois de implementares limitação de taxa na tua API, verifica se as apps que chamam a tua API tratam disso. Quando um cliente ultrapassa um limite definido por rate-limit ou rate-limit-by-key, a API Management retorna 429 Too Many Requests com o cabeçalho Retry-After. Os clientes que ignoram continuam a tentar e continuam sujeitos a limitação de taxa.

Approach O que encontra Do que sente falta
Aguardar o ambiente de produção Comportamento real do cliente Cada cliente com falha, até que os seus utilizadores atingirem o limite
Mock API Management nos testes do cliente Se o ramo de retentativas do cliente é executado Os teus limites reais, cabeçalhos e timing de reinicialização, e a verdadeira pilha HTTP do cliente
Invoca a tua instância de Gestão de API até que ela comece a limitar pedidos Comportamento real Precisas de uma instância de teste, e não consegues atingir o limite quando quiseres sem queimar chamadas
Intercete o tráfego do cliente e simule os seus limites O seu limite, janela e cabeçalhos no URL real da API, e se o cliente espera durante o tempo indicado por Retry-After O código do cliente isoladamente. Mantém os testes unitários para isso.

Dev Proxy simula o comportamento de limitação de taxa que configuraste, com o mesmo limite, janela de tempo e cabeçalhos de resposta, enquanto a aplicação cliente continua a chamar o URL real da tua API. Use o RateLimitingPlugin com rateLimit e resetTimeWindowSeconds definidos para os valores da sua política calls e renewal-period, com costPerRequest definido para 1 (o padrão é 2, o que reduz para metade o seu limite), e headerLimit e headerRemaining definidos para os nomes dos cabeçalhos da sua política. Adiciona o RetryAfterPlugin antes para que o Dev Proxy te avise quando um cliente faz um novo pedido demasiado cedo. Para detalhes, consulte Simular respostas da API com limite de taxa. Para instalar Dev Proxy, consulte Configurar Dev Proxy.

Próximo passo