Configurar límites en métodos (rate limit)

Configurar límites en métodos (rate limit)

Resumen

Los límites permiten definir la cantidad de consultas y la transferencia máxima en MB que acepta el gateway por unidad de tiempo, además del tiempo de espera (timeout) y el tiempo que la respuesta permanece en caché. Se configuran a nivel de la API y pueden sobreescribirse en cada método, para todos los usuarios o para grupos y usuarios específicos. En este video ve cómo definir los límites de una API, cómo sobreescribirlos en un método y qué responde el gateway cuando se superan.

Qué es la regulación de solicitudes

La regulación de límites de solicitudes a las APIs, o API rate limiting, controla la cantidad de solicitudes que un cliente (usuario o aplicación) puede realizar en un período determinado. Permite evitar la sobrecarga de los orígenes de datos, protegerse contra ataques de denegación de servicio y controlar costos: en una API monetizada por transacción acota el consumo, y en una monetizada por suscripción define las cantidades de cada plan. Cuando se superan los límites, la API responde con el código 429 y un mensaje que indica el tiempo de espera o cuarentena.

Variables que se configuran

  • Cantidad de solicitudes por segundo, minuto, hora, día, mes y año.
  • Cantidad de megabytes a transferir por unidad de tiempo.
  • Tiempo máximo de la respuesta (timeout), en milisegundos.
  • Duración de la caché de la respuesta, en milisegundos. Conviene ajustarla a la frecuencia de actualización de los datos.
  • Máximo de filas por página, que acota el parámetro limit cuando el método pagina.

Si un usuario agota su cuota para un período, debe esperar a que se cumpla ese período para volver a consultar. Por ejemplo, si supera la cantidad de solicitudes por minuto, debe esperar un minuto.

Configurar los límites de la API

El paso Límites del asistente

Al crear o editar una API, el paso Límites define las cuotas globales que heredan todos sus métodos: solicitudes y megabytes por período, timeout, caché y filas por página. Modifique los valores por defecto según sus definiciones y guarde la API.

Configurar los límites de un método

Sobreescribir

Al agregar o editar un método, en el título Límites haga clic en el botón Sobreescribir.

Sección Límites del método con el botón Sobreescribir

Se abre una ventana donde puede agregar conjuntos de límites con Nuevo Límite. Cada conjunto tiene un nombre, una descripción y a quiénes aplica: Todos los usuarios, o Grupos/usuarios específicos.

Ventana Sobreescribir límites para este método con el botón Nuevo Límite

Para todos los usuarios

Seleccione Todos y modifique los valores por defecto de cada límite y unidad de tiempo.

Formulario de un conjunto de límites para todos los usuarios

Una vez creado el conjunto, puede editarlo con el lápiz de la columna Acciones, agregar otro con Agregar o terminar con Listo.

Listado de conjuntos de límites del método con sus acciones

Para grupos o usuarios

Seleccione Grupos/usuarios. Se muestra un selector de grupos y usuarios para agregarlos al conjunto, y los mismos valores por límite y unidad de tiempo.

Conjunto de límites por grupo guardado Selector de grupos y usuarios en un conjunto de límites

Guardar y publicar

Al hacer clic en Listo vuelve a la configuración del método. Haga clic en Listo y luego en Publicar para que la versión de la API quede publicada con la nueva configuración.

Paginar la respuesta

En el editor del método, el bloque Paginación define si el gateway pagina el resultado de la vista. Viene Activado, y Paginación comienza en la página elige si la primera página es la 0 (por defecto) o la 1.

Con la paginación activada, el método acepta los parámetros limit (filas por página) y page (número de página). Si limit falta o supera el Máximo de filas por página de la API o del método, se usa ese máximo. En la respuesta JSON, meta.count informa el total de filas del resultado: con 49 filas, ?limit=3&page=0 devuelve las tres primeras y page=1 las tres siguientes.

Con la paginación desactivada, el gateway devuelve el resultado completo y no interpreta limit ni page: si la vista define parámetros con esos nombres, los recibe ella.

Jerarquía de los conjuntos de límites

Los límites pueden definirse en cuatro niveles. Cuando hay más de uno, aplica el de mayor jerarquía:

  • API: aplica a todos los usuarios de la API. Es el de menor jerarquía: si existe cualquiera de los siguientes, no aplica.
  • Método para todos: límite específico para todos los usuarios de un método. Tiene menor jerarquía que los siguientes.
  • Método por grupos: aplica a los usuarios que pertenecen a un grupo. Tiene menor jerarquía que el nivel individual.
  • Método por usuario: límite específico para un usuario. Es el de mayor jerarquía.

Si un usuario está en dos grupos con conjuntos de límites distintos en un método, aplica el del primer grupo configurado.

Resultado esperado

Dentro de la cuota, el gateway responde normalmente. Al superarla responde con el código 429 hasta que se renueva el período. En el video, con un límite de cinco solicitudes por minuto, la sexta llamada recibe 429.

Errores frecuentes

  • El límite nuevo no se aplica: la versión de la API no fue publicada después del cambio.
  • Las respuestas no cambian aunque cambió el origen: la caché de la respuesta sigue vigente. Reduzca la duración de caché o espere a que venza.
  • El método devuelve menos filas que la vista: la paginación está activada y aplica el Máximo de filas por página. Pida las siguientes con page o suba el máximo.
  • Un usuario recibe un límite inesperado: pertenece a un grupo con su propio conjunto de límites, que tiene prioridad sobre el del método.

Artículos relacionados