Limitazione del numero di richieste ai backend del gateway API

Scopri come utilizzare un criterio di richiesta per limitare il numero di richieste inviate ai servizi backend con API Gateway.

Dopo aver creato un gateway API e distribuito una o più API, in genere si desidera limitare la frequenza con cui i client API possono effettuare richieste ai servizi backend. Ad esempio:

  • mantenere alta disponibilità e un uso corretto delle risorse proteggendo i back-end dal sovraccarico di troppe richieste
  • prevenire gli attacchi denial-of-service
  • limitare i costi del consumo delle risorse
  • limitare l'uso delle API da parte degli utenti dei clienti per monetizzare le API

È possibile applicare un limite di frequenza a livello globale a tutti gli instradamenti in una specifica di distribuzione API.

Se una richiesta viene negata perché il limite di frequenza è stato superato, l'intestazione della risposta specifica quando è possibile rieseguire la richiesta.

Per limitare il numero di richieste, utilizzare un criterio di richiesta (vedere Aggiunta di criteri di richiesta e di risposta alle specifiche di distribuzione API).

È possibile aggiungere un criterio di richiesta che limita la frequenza a una specifica di distribuzione API effettuando le operazioni riportate di seguito.

  • utilizzo di Console
  • modifica di un file JSON

Utilizzo della console per aggiungere criteri di richiesta con limitazione di frequenza

Per aggiungere un criterio di richiesta che limita la frequenza a una specifica di distribuzione API utilizzando la console, procedere come segue.

  1. Creare o aggiornare una distribuzione API utilizzando la console, selezionare l'opzione Da zero e immettere i dettagli nella pagina Informazioni di base.

    Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un gateway API mediante la creazione di una distribuzione API e Aggiornamento di un gateway API o di una distribuzione API.

  2. Nella sezione Criteri di richiesta API della pagina Informazioni di base, fare clic sul pulsante Aggiungi accanto a Limitazione dei tassi e specificare:

    • Numero di richieste al secondo: il numero massimo di richieste al secondo da inviare alla distribuzione dell'API.
    • Tipo di limite di frequenza: modalità di applicazione della soglia del numero massimo di richieste al secondo. È possibile specificare che il valore massimo si applichi al numero di richieste inviate da un client API qualsiasi (identificato dal relativo indirizzo IP) o al numero totale di richieste inviate da tutti i client API.
  3. Fare clic su Salva modifiche.

  4. Fare clic su Avanti e specificare le opzioni di autenticazione nella pagina Autenticazione.

    Per ulteriori informazioni sulle opzioni di autenticazione, vedere Aggiunta di autenticazione e autorizzazione alle distribuzioni API.

  5. Fare clic su Avanti per immettere i dettagli relativi ai singoli instradamenti nella distribuzione API nella pagina Instradamenti. Tenere presente che non è possibile applicare criteri che limitano la frequenza a singoli instradamenti nella specifica di distribuzione API.

  6. Fare clic su Successivo per esaminare i dettagli immessi per la distribuzione API.
  7. Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
  8. (Facoltativo) Confermare che l'interfaccia API sia stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita in un gateway API).

Modifica di un file JSON per aggiungere criteri di richiesta con limitazione di frequenza

Per aggiungere un criterio di richiesta che limita la frequenza a una specifica di distribuzione API in un file JSON, effettuare le operazioni riportate di seguito.

  1. Utilizzando l'editor JSON preferito, modificare la specifica di distribuzione API esistente alla quale si desidera aggiungere un limite di richiesta o creare una nuova specifica di distribuzione API (vedere Creazione di una specifica di distribuzione API).

    Ad esempio, la seguente specifica di distribuzione API di base definisce una semplice funzione serverless Hello World in Funzioni OCI come un singolo backend:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  2. Se non esiste già, inserire una sezione requestPolicies prima della sezione routes. Ad esempio:

    {
      "requestPolicies": {},													
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  3. Aggiungere il seguente criterio rateLimiting alla nuova sezione requestPolicies da applicare a tutti gli instradamenti definiti nella specifica:

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

    dove:

    • <ratekey-value> specifica se la soglia del numero massimo di richieste si applica al numero di richieste dei singoli client API (ciascuno identificato dal proprio indirizzo IP) o al numero totale di richieste inviate al servizio backend. I valori validi sono CLIENT_IP e TOTAL.
    • <requests-per-second> è il numero massimo di richieste al secondo da inviare alla distribuzione dell'API.

    Ad esempio:

    {
      "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. Salvare il file JSON contenente la specifica di distribuzione API.
  5. Utilizzare la specifica di distribuzione API quando si crea o si aggiorna una distribuzione API nei modi riportati di seguito.

    • specificando il file JSON nella console quando si seleziona l'opzione Carica un'interfaccia API esistente
    • specificando il file JSON in una richiesta all'API REST del gateway API

    Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un gateway API mediante la creazione di una distribuzione API e Aggiornamento di un gateway API o di una distribuzione API.

  6. (Facoltativo) Confermare che l'interfaccia API sia stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita in un gateway API).