Limitation du nombre de demandes aux back-ends de passerelle d'API

Découvrez comment utiliser une stratégie de demande pour limiter le nombre de demandes envoyées aux services back-end à l'aide d'API Gateway.

Lorsque vous avez créé une passerelle d'API et déployé des API sur celle-ci, vous pouvez limiter le débit auquel les clients d'API peuvent envoyer des demandes aux services back-end. Notamment pour les raisons suivantes :

  • Maintenir une haute disponibilité et une utilisation équitable des ressources en prévenant la surcharge des back-ends par un trop grand nombre de demandes.
  • Empêcher les attaques par déni de service.
  • Limiter les coûts de consommation des ressources.
  • Restreindre l'utilisation des API en fonction des utilisateurs de vos clients pour monétiser les API.

Vous pouvez appliquer une limite de débit de façon globale à tous les routages d'une spécification de déploiement d'API.

Si une demande est refusée car la limite de débit a été dépassée, l'en-tête de réponse indique quand la demande peut être retentée.

Vous pouvez utiliser une stratégie de demande pour limiter le nombre de demandes (reportez-vous à Ajout de stratégies de demande et de réponse aux spécifications de déploiement d'API).

Vous pouvez ajouter une stratégie de demande de limitation de débit à une spécification de déploiement d'API en :

  • utilisant la console,
  • modifiant un fichier JSON.

Utilisation de la console pour ajouter des stratégies de demande de limitation de débit

Pour ajouter une stratégie de demande de limitation de débit à une spécification de déploiement d'API à l'aide de la console, procédez comme suit :

  1. Créez ou mettez à jour un déploiement d'API à l'aide de la console, sélectionnez l'option Entièrement nouveau, puis saisissez les détails sur la page Informations de base.

    Pour plus d'informations, reportez-vous à Déploiement d'une API sur une passerelle d'API en créant un déploiement d'API et à Mise à jour d'une passerelle d'API.

  2. Dans la section Stratégies de demande d'API de la page Informations de base, sélectionnez le bouton Ajouter en regard de Limitation de débit et indiquez les informations suivantes :

    • Nombre de demandes par seconde : nombre maximal de demandes par seconde à envoyer vers le déploiement d'API.
    • Type de limite de débit : mode d'application du seuil de nombre maximal de demandes par seconde. Vous pouvez indiquer que la valeur maximale s'applique au nombre de demandes envoyées à partir d'un client d'API (identifié par son adresse IP) ou au nombre total de demandes envoyées à partir de tous les clients d'API.
  3. Sélectionnez Enregistrer les modifications.

  4. Sélectionnez Suivant et indiquez les options d'authentification sur la page Authentification.

    Pour plus d'informations sur les options d'authentification, reportez-vous à Ajout de l'authentification et de l'autorisation aux déploiements d'API.

  5. Sélectionnez Suivant pour saisir les détails de chaque routage dans le déploiement d'API sur la page Routages. Vous ne pouvez pas appliquer de stratégie de limitation de débit à des routages dans la spécification de déploiement d'API.

  6. Sélectionnez Suivant afin de vérifier les détails saisis pour le déploiement d'API.
  7. Sélectionnez Créer ou Enregistrer les modifications pour créer ou mettre à jour le déploiement d'API.
  8. (Facultatif) Vérifiez que l'API a été déployée en l'appelant (reportez-vous à Appel d'une API déployée sur une passerelle d'API).

Modification d'un fichier JSON pour ajouter des stratégies de demande de limitation de débit

Pour ajouter une stratégie de demande de limitation de débit à une spécification de déploiement d'API dans un fichier JSON, procédez comme suit :

  1. A l'aide de l'éditeur JSON de votre choix, modifiez la spécification de déploiement d'API existante à laquelle vous voulez ajouter la limitation de débit ou créez une spécification de déploiement d'API (reportez-vous à Création d'une spécification de déploiement d'API).

    Par exemple, la spécification de déploiement d'API de base suivante définit une fonction simple sans serveur Hello World dans OCI Functions en tant que back-end unique :

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  2. Insérez une section requestPolicies avant la section routes, si elle n'existe pas déjà. Par exemple :

    {
      "requestPolicies": {},													
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  3. Ajoutez la stratégie rateLimiting suivante à la nouvelle section requestPolicies pour l'appliquer à tous les routages définis dans la spécification :

    {
      "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"
          }
        }
      ]
    }

    où :

    • <ratekey-value> indique si le seuil du nombre maximal de demandes s'applique au nombre de demandes provenant de clients d'API individuels (chacun identifié par son adresse IP) ou au nombre total de demandes envoyées au service back-end. Valeurs valides : CLIENT_IP et TOTAL.
    • <requests-per-second> est le nombre maximal de demandes par seconde à envoyer vers le déploiement d'API.

    Par exemple :

    {
      "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. Enregistrez le fichier JSON qui contient la spécification de déploiement d'API.
  5. Utilisez la spécification de déploiement d'API lorsque vous créez ou mettez à jour un déploiement d'API en :

    • spécifiant le fichier JSON dans la console lorsque vous sélectionnez l'option Télécharger une API existante,
    • spécifiant le fichier JSON dans une demande adressée à l'API REST d'API Gateway.

    Pour plus d'informations, reportez-vous à Déploiement d'une API sur une passerelle d'API en créant un déploiement d'API et à Mise à jour d'une passerelle d'API.

  6. (Facultatif) Vérifiez que l'API a été déployée en l'appelant (reportez-vous à Appel d'une API déployée sur une passerelle d'API).