Limitación del número de solicitudes para backends de gateway de API

Descubra cómo utilizar una política de solicitud para limitar el número de solicitudes enviadas a servicios de backend con API Gateway.

Tras crear un gateway de API y desplegar una o varias API en él, probablemente desee limitar la frecuencia con la que los clientes de API pueden realizar solicitudes a servicios de backend. Por ejemplo, para:

  • Mantener una alta disponibilidad y un uso justo de los recursos, evitando que los backends se sobrepasen debido a demasiadas solicitudes.
  • Impedir ataques de denegación de servicio.
  • Reducir costos del consumo de recursos.
  • Restringir el uso de API de los usuarios de clientes para monetizar las API.

Se aplica un límite de frecuencia de forma global a todas las rutas de una especificación de despliegue de API.

Si se deniega una solicitud porque se ha superado el límite de frecuencia, la cabecera de respuesta especifica cuándo se puede reintentar la solicitud.

La política de solicitud se utiliza para limitar el número de solicitudes (consulte Agregación de políticas de solicitud y políticas de respuesta a especificaciones de despliegue de API).

Puede agregar una política de solicitud de limitación de ratio a una especificación de despliegue de API mediante:

  • uso de la consola
  • edición de un archivo JSON

Uso de la consola para agregar políticas de solicitud de limitación de ratio

Siga estos pasos para agregar una política de solicitud de limitación de ratio a una especificación de despliegue de API mediante la consola:

  1. Cree o actualice un despliegue de API con la consola, seleccione la opción Desde cero e introduzca los detalles en la página Información básica.

    Para obtener más información, consulte Despliegue de una API en un gateway de API mediante la creación de un despliegue de API y Actualización de un gateway de API.

  2. En la sección Políticas de solicitud de API de la página Información básica, seleccione el botón Agregar situado junto a Limitación de frecuencia y especifique:

    • Number of Requests per Second: número máximo de solicitudes por segundo que se envían al despliegue de API.
    • Tipo de límite de frecuencia: indica cómo se aplica el número máximo de umbral de solicitudes por segundo. Puede especificar que el máximo se aplica al número de solicitudes enviadas desde un cliente de API cualquiera (identificado por su dirección IP) o bien al número total de solicitudes enviadas desde todos los clientes de API.
  3. Seleccione Guardar cambios.

  4. Seleccione Siguiente y especifique las opciones de autenticación en la página Autenticación.

    Para obtener más información sobre las opciones de autenticación, consulte Agregación de autenticación y autorización a despliegues de API.

  5. Seleccione Siguiente para introducir detalles de rutas individuales en el despliegue de API en la página Rutas. Tenga en cuenta que no puede aplicar políticas de limitación de ratio a rutas individuales en la especificación de despliegue de API.

  6. Seleccione Siguiente para revisar los detalles introducidos para el despliegue de API.
  7. Seleccione Crear o Guardar cambios para crear o actualizar el despliegue de API.
  8. (Opcional) Confirme que la API se ha desplegado correctamente llamándola. Para ello, consulte Llamada a una API desplegada en un gateway de API.

Edición de un archivo JSON para agregar políticas de solicitud de limitación de ratio

Siga estos pasos para agregar una política de solicitud de limitación de ratio una especificación de despliegue de API en un archivo JSON:

  1. Con su editor de JSON preferido, edite la especificación de despliegue de API existente a la que desea agregar un límite de solicitud o cree una nueva especificación de despliegue de API (consulte Creación de una especificación de despliegue de API).

    Por ejemplo, la siguiente especificación básica de despliegue de API define una función sencilla de Hello World sin servidor en OCI Functions como un único backend:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  2. Inserte una sección requestPolicies antes de la sección routes si no existe ninguna. Por ejemplo:

    {
      "requestPolicies": {},													
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  3. Agregue la siguiente política rateLimiting a la nueva sección requestPolicies para aplicarla a todas las rutas definidas en la especificación:

    {
      "requestPolicies": {
        "rateLimiting": {
          "rateKey": "<ratekey-value>",
          "rateInRequestsPerSecond": <requests-per-second>
        }
      },													
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }

    donde:

    • <ratekey-value> especifica si el número máximo de umbral de solicitudes se aplica al número de solicitudes de clientes de API individuales (cada uno identificado por su dirección IP) o al número total de solicitudes enviadas al servicio de backend. Los valores válidos son CLIENT_IP y TOTAL.
    • <requests-per-second> es el número máximo de solicitudes por segundo que se envían al despliegue de API.

    Por ejemplo:

    {
      "requestPolicies": {
        "rateLimiting": {
          "rateKey": "CLIENT_IP",
          "rateInRequestsPerSecond": 10
        }
      },													
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  4. Guarde el archivo JSON que contiene la especificación de despliegue de API.
  5. Utilice la especificación de despliegue de API al crear o actualizar un despliegue de API de las siguientes formas:

    • Especificando el archivo JSON en la consola al seleccionar la opción Cargar API.
    • Especificando el archivo JSON en una solicitud para la API REST de gateway de API.

    Para obtener más información, consulte Despliegue de una API en un gateway de API mediante la creación de un despliegue de API y Actualización de un gateway de API.

  6. (Opcional) Confirme que la API se ha desplegado correctamente llamándola. Para ello, consulte Llamada a una API desplegada en un gateway de API.