Limitar a taxa de chamadas por assinatura

APLICA-SE A: todas as camadas do Gerenciamento de API

A política rate-limit impede picos de uso da API para cada assinatura, limitando a taxa de chamadas para um número especificado por um período de tempo especificado. Quando a taxa da chamada for ultrapassada, o chamador receberá um código de status de resposta 429 Too Many Requests.

Para entender a diferença entre limites e cotas de taxa, confira Limites e cotas de taxa.

Cuidado

Devido à natureza distribuída da arquitetura de limitação, a limitação de taxa nunca é completamente precisa. A diferença entre o número configurado e o número real de solicitações permitidas varia de acordo com o volume e a taxa de solicitação, a latência de back-end e outros fatores.

Observação

Defina os elementos da política e os elementos filho na ordem fornecida na declaração da política. Saiba mais sobre como definir e editar as políticas de Gerenciamento de API.

Declaração de política

<rate-limit calls="number" renewal-period="seconds"  retry-after-header-name="custom header name, replaces default 'Retry-After'" 
        retry-after-variable-name="policy expression variable name"
        remaining-calls-header-name="header name"  
        remaining-calls-variable-name="policy expression variable name"
        total-calls-header-name="header name">
    <api name="API name" id="API id" calls="number" renewal-period="seconds" >
        <operation name="operation name" id="operation id" calls="number" renewal-period="seconds" />
    </api>
</rate-limit>

Atributos

Atributo Descrição Obrigatório Padrão
chamadas O número total máximo de chamadas permitidas durante o intervalo de tempo especificado em renewal-period. Expressões de política não são permitidas. Sim N/D
renewal-period A duração em segundos da janela deslizante durante a qual o número de solicitações permitidas não deve exceder o valor especificado em calls. Valor máximo permitido: 300 segundos. Expressões de política não são permitidas. Sim N/D
retry-after-header-name O nome de um cabeçalho de resposta cujo valor é o intervalo de repetição recomendado em segundos depois que a taxa de chamada especificada é excedida. Expressões de política não são permitidas. No Retry-After
retry-after-variable-name O nome de uma variável que armazena o intervalo de repetição recomendado em segundos após a taxa de chamada especificada ser excedida. Expressões de política não são permitidas. Não N/D
remaining-calls-header-name O nome de um cabeçalho de resposta cujo valor após cada execução de política é o número de chamadas restantes permitidas para o intervalo de tempo especificado no renewal-period. Expressões de política não são permitidas. Não N/D
remaining-calls-variable-name O nome de uma variável que, após cada execução da política, armazena o número de chamadas restantes permitidas no intervalo de tempo especificado no renewal-period. Expressões de política não são permitidas. Não N/D
total-calls-header-name O nome de um cabeçalho de resposta cujo valor é aquele especificado em calls. Expressões de política não são permitidas. Não N/D

Elementos

Elemento Descrição Obrigatório
api Adicione um ou mais desses elementos para impor um limite de taxa de chamadas às APIs dentro do produto. Limites de taxa de chamadas à API e ao produto são aplicados de forma independente. A API pode ser referenciada através de name ou id. Se ambos os atributos são fornecidos, id será usado e name será ignorado. No
operation Adicione um ou mais desses elementos para impor um limite de taxa de chamadas às operações dentro de uma API. Limites de taxa de chamadas à API, operação e produto são aplicados de forma independente. A operação pode ser referenciada através de name ou id. Se ambos os atributos são fornecidos, id será usado e name será ignorado. No

atributos da API

Atributo Descrição Obrigatório Padrão
name O nome da API para a qual aplicar o limite de taxa. É necessário especificar name ou id. N/D
id A ID da API para a qual aplicar o limite de taxa. É necessário especificar name ou id. N/D
chamadas O número total máximo de chamadas permitidas durante o intervalo de tempo especificado em renewal-period. Expressões de política não são permitidas. Sim N/D
renewal-period A duração em segundos da janela deslizante durante a qual o número de solicitações permitidas não deve exceder o valor especificado em calls. Valor máximo permitido: 300 segundos. Expressões de política não são permitidas. Sim N/D

atributos de operação

Atributo Descrição Obrigatório Padrão
name O nome da operação para a qual aplicar o limite de taxa. É necessário especificar name ou id. N/D
id A ID da operação para a qual aplicar o limite de taxa. É necessário especificar name ou id. N/D
chamadas O número total máximo de chamadas permitidas durante o intervalo de tempo especificado em renewal-period. Expressões de política não são permitidas. Sim N/D
renewal-period A duração em segundos da janela deslizante durante a qual o número de solicitações permitidas não deve exceder o valor especificado em calls. Valor máximo permitido: 300 segundos. Expressões de política não são permitidas. Sim N/D

Uso

Observações de uso

  • Essa política pode ser usada apenas uma vez por cada definição de política.
  • Essa política só é aplicada quando uma API é acessada usando uma chave de assinatura.
  • As contagens de limite de taxa em um gateway auto-hospedado podem ser configuradas para sincronizar localmente (entre instâncias de gateway em todos os nós de cluster), por exemplo, por meio da implantação do gráfico do Helm para Kubernetes ou usando os modelos de implantação do portal do Azure. No entanto, as contagens de limite de taxa não são sincronizadas com os outros recursos de gateway configurados na instância de Gerenciamento de API, incluindo o gateway gerenciado na nuvem. Saiba mais

Exemplo

No exemplo a seguir, o limite de taxa por assinatura é de 20 chamadas por 90 segundos. Após cada execução de política, as chamadas restantes permitidas no período são armazenadas na variável remainingCallsPerSubscription.

<policies>
    <inbound>
        <base />
        <rate-limit calls="20" renewal-period="90" remaining-calls-variable-name="remainingCallsPerSubscription"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Para obter mais informações sobre como trabalhar com políticas, consulte: