Limitar la tasa de llamadas por suscripción
SE APLICA A: todos los niveles de API Management
La directiva rate-limit
evita los picos de uso de la API según suscripción limitando la tasa de llamadas a un número especificado por un período de tiempo establecido. Cuando se supera la tasa de llamadas, el autor de la llamada recibe un código de estado de respuesta 429 Too Many Requests
.
Para comprender la diferencia entre las cuotas y los límites de frecuencia, consulte Límites y cuotas de frecuencia.
Precaución
Debido a la naturaleza distribuida de la arquitectura de limitación, el límite de velocidad nunca es completamente preciso. La diferencia entre la cantidad configurada y la cantidad real de solicitudes permitidas varía según el volumen y la frecuencia de solicitudes, la latencia del back-end y otros factores.
Nota
Establezca los elementos de la directiva y los elementos secundarios en el orden proporcionado en la instrucción de directiva. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.
Instrucción de la directiva
<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 | Descripción | Necesario | Valor predeterminado |
---|---|---|---|
calls | Número total máximo de llamadas permitidas durante el intervalo de tiempo especificado en renewal-period . No se permiten expresiones de directiva. |
Sí | N/D |
renewal-period | La longitud en segundos de la ventana deslizante durante la cual el número de solicitudes permitidas no debe superar el valor especificado en calls . Valor máximo permitido: 300 segundos. No se permiten expresiones de directiva. |
Sí | N/D |
retry-after-header-name | Nombre de un encabezado de respuesta personalizado cuyo valor es el intervalo de reintento recomendado en segundos, después de que se supere la tasa de llamadas especificada. No se permiten expresiones de directiva. | No | Retry-After |
retry-after-variable-name | Nombre de una variable que almacena el intervalo de reintento recomendado en segundos después de que se supere la tasa de llamadas especificada. No se permiten expresiones de directiva. | No | N/D |
remaining-calls-header-name | Nombre de un encabezado de respuesta cuyo valor después de cada ejecución de directiva es el número de llamadas restantes permitidas para el intervalo de tiempo especificado en renewal-period . No se permiten expresiones de directiva. |
No | N/D |
remaining-calls-variable-name | Nombre de una variable que después de cada ejecución de directiva almacena el número de llamadas restantes permitidas para el intervalo de tiempo especificado en renewal-period . No se permiten expresiones de directiva. |
No | N/D |
total-calls-header-name | Nombre de un encabezado de respuesta cuyo valor es el valor especificado en calls . No se permiten expresiones de directiva. |
No | N/D |
Elementos
Elemento | Descripción | Obligatorio |
---|---|---|
api | Agregue uno o varios de estos elementos para imponer un límite de tasa de llamadas a las API del producto. Los límites de tasa de llamadas a la API y al producto se aplican de forma independiente. Se puede hacer referencia a la API a través de name o id . Si se proporcionan ambos atributos, id se usará y name se omitirá. |
No |
operation | Agregue uno o varios de estos elementos para imponer un límite de tasa de llamadas a las operaciones de una API. Los límites de tasa de llamadas se aplican de forma independiente a la API, a la operación y al producto. Se puede hacer referencia a la operación a través de name o id . Si se proporcionan ambos atributos, id se usará y name se omitirá. |
No |
Atributos api
Atributo | Descripción | Necesario | Valor predeterminado |
---|---|---|---|
name | Nombre de la API a la que se va a aplicar un límite de tasa. | Se debe especificar name o id . |
N/D |
id | Identificador de la API a la que se va a aplicar un límite de tasa. | Se debe especificar name o id . |
N/D |
calls | Número total máximo de llamadas permitidas durante el intervalo de tiempo especificado en renewal-period . No se permiten expresiones de directiva. |
Sí | N/D |
renewal-period | La longitud en segundos de la ventana deslizante durante la cual el número de solicitudes permitidas no debe superar el valor especificado en calls . Valor máximo permitido: 300 segundos. No se permiten expresiones de directiva. |
Sí | N/D |
Atributos operation
Atributo | Descripción | Necesario | Valor predeterminado |
---|---|---|---|
name | Nombre de la operación a la que se va a aplicar un límite de tasa. | Se debe especificar name o id . |
N/D |
id | Identificador de la operación a la que se va a aplicar un límite de tasa. | Se debe especificar name o id . |
N/D |
calls | Número total máximo de llamadas permitidas durante el intervalo de tiempo especificado en renewal-period . No se permiten expresiones de directiva. |
Sí | N/D |
renewal-period | La longitud en segundos de la ventana deslizante durante la cual el número de solicitudes permitidas no debe superar el valor especificado en calls . Valor máximo permitido: 300 segundos. No se permiten expresiones de directiva. |
Sí | N/D |
Uso
- Secciones de la directiva: inbound (entrada)
- Ámbitos de la directiva: product, api, operation (producto, API, operación)
- Puertas de enlace: clásica, v2, consumo, autohospedada y área de trabajo
Notas de uso
- Esta directiva se puede usar una sola vez por definición de directiva.
- Esta directiva solo se aplica cuando se accede a una API mediante una clave de suscripción.
- Los recuentos de límites de volumen en una puerta de enlace autohospedada se pueden configurar para sincronizarse localmente (entre instancias de puerta de enlace en nodos de clúster), por ejemplo, mediante la implementación de gráficos de Helm para Kubernetes o con las plantillas de implementación de Azure Portal. Pero los recuentos de límites de volumen no se sincronizan con otros recursos de puerta de enlace configurados en la instancia de API Management, incluida la puerta de enlace administrada en la nube. Más información
Ejemplo
En el ejemplo siguiente, el límite de tasa por suscripción es de 20 llamadas por 90 segundos. Después de cada ejecución de directiva, las llamadas restantes permitidas en el período de tiempo se almacenan en la variable remainingCallsPerSubscription
.
<policies>
<inbound>
<base />
<rate-limit calls="20" renewal-period="90" remaining-calls-variable-name="remainingCallsPerSubscription"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>
Directivas relacionadas
Contenido relacionado
Para más información sobre el trabajo con directivas, vea:
- Tutorial: Transformación y protección de una API
- Referencia de directivas para una lista completa de instrucciones de directivas y su configuración
- Expresiones de directiva
- Establecimiento o edición de directivas
- Reutilización de configuraciones de directivas
- Repositorio de fragmentos de código de directiva
- Creación de directivas mediante Microsoft Copilot en Azure