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

Usando a limitação 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 taxa 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 a limitação 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 a limitação de taxa, o que é útil para manter a integridade e a confiabilidade de suas APIs.

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

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

Antes de começar a implementar a limitação 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 em 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 uma 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 serem limitados. Para expor informações de limitação 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>

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

Resumo

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

Teste seus clientes

Depois de implementar a limitação de taxa em sua API, verifique se os aplicativos que chamam sua API lidam com isso. Quando um cliente ultrapassa um limite definido por rate-limit ou rate-limit-by-key, o Gerenciamento de API retorna 429 Too Many Requests com o cabeçalho Retry-After. Os clientes que o ignoram continuam tentando novamente e permanecem sob limitação de taxa.

Approach O que você encontra Do que você sente falta
Aguardar produção Comportamento real do cliente Cada cliente com falha, até que seus usuários atinjam o limite
Gerenciamento de API simulado nos testes do cliente Se a ramificação de nova tentativa do cliente é executada Seus limites reais, cabeçalhos e tempo de redefinição e a pilha HTTP real do cliente
Faça chamadas à sua instância de Gerenciamento de API até que ela atinja o limite de taxa Comportamento real Você precisa de uma instância de teste e não pode atingir o limite sob demanda sem queimar chamadas
Interceptar o tráfego do cliente e simular seus limites Seu limite, janela e cabeçalhos na URL da API real e se o cliente espera pelo tempo que Retry-After indica O código do cliente isoladamente. Mantenha testes de unidade para isso.

Dev Proxy simula o comportamento de limitação de taxa configurado, com o mesmo limite, janela de tempo e cabeçalhos de resposta, enquanto o aplicativo cliente continua chamando sua URL de API real. Use o RateLimitingPlugin com rateLimit e resetTimeWindowSeconds definidos para os calls e renewal-period da sua política, costPerRequest definido como 1 (o padrão é 2, que reduz pela metade o limite) e headerRemaining e headerLimit definidos como os nomes dos cabeçalhos da sua política. Adicione o RetryAfterPlugin antes disso para que o Dev Proxy informe quando um cliente ligar novamente muito cedo. Para obter detalhes, consulte Simular respostas da API de limite de taxa de requisições. Para instalar o Dev Proxy, consulte Configurar o Dev Proxy.

Próxima etapa