Trasformazione delle richieste in entrata e delle risposte in uscita

Scopri come modificare le richieste in entrata e le risposte in uscita inviate ai e dai servizi backend con API Gateway.

Spesso si verificano situazioni in cui si desidera che un gateway API modifichi le richieste in entrata prima di inviarle ai servizi backend. Analogamente, potrebbe essere necessario che il gateway API modifichi le risposte restituite dai servizi backend. Ad esempio:

  • I servizi backend possono richiedere che le richieste includano un determinato set di intestazioni HTTP, ad esempio Accept-Language e Accept-Encoding. Per nascondere questi dettagli di implementazione ai consumer API e ai client API, è possibile utilizzare il gateway API per aggiungere le intestazioni richieste.
  • I server Web spesso includono informazioni complete sulla versione nelle intestazioni delle risposte. Per motivi di sicurezza, potresti voler impedire ai consumer API e ai client API di conoscere lo stack tecnologico sottostante. È possibile utilizzare il gateway API per rimuovere le intestazioni del server dalle risposte.
  • I servizi backend possono includere informazioni riservate in una risposta. È possibile utilizzare il gateway API per rimuovere tali informazioni.

Utilizzando un gateway API, puoi:

  • Aggiungere, rimuovere e modificare le intestazioni nelle richieste e nelle risposte.
  • Aggiungere, rimuovere e modificare i parametri di query nelle richieste.
  • Riscrivere gli URL delle richieste da un formato pubblico a un formato interno, forse per supportare applicazioni e migrazioni legacy.

I criteri di richiesta e risposta vengono utilizzati per trasformare le intestazioni e i parametri di query delle richieste in entrata e le intestazioni delle risposte in uscita (vedere Aggiunta di criteri di richiesta e di risposta alle specifiche di distribuzione API).

È possibile includere variabili di contesto nei criteri di richiesta e risposta di trasformazione dei parametri di intestazione e query. L'inclusione delle variabili di contesto consente di modificare le intestazioni e i parametri di query con i valori di altre intestazioni, parametri di query, parametri di percorso e parametri di autenticazione. Tenere presente che i valori delle variabili di contesto vengono estratti dalla richiesta o dalla risposta originale e non vengono successivamente aggiornati poiché un gateway API utilizza un criterio di trasformazione per valutare una richiesta o una risposta. Per ulteriori informazioni sulle variabili di contesto, vedere Aggiunta di variabili di contesto ai criteri e alle definizioni backend HTTP.

Se una richiesta di trasformazione di un parametro di intestazione o di query o un criterio di risposta genererà un'intestazione o un parametro di query non valido, il criterio di trasformazione verrà ignorato.

Tenere presente che non è possibile utilizzare i criteri di trasformazione dell'intestazione per trasformare determinate intestazioni di richiesta e risposta protette. Vedere Intestazioni delle richieste protette e intestazioni delle risposte.

È possibile aggiungere criteri di richiesta e risposta di trasformazione dei parametri di intestazione e query a una specifica di distribuzione API effettuando le operazioni riportate di seguito.

  • utilizzo di Console
  • modifica di un file JSON

Aggiunta dei criteri delle richieste di trasformazione dell'intestazione

È possibile aggiungere criteri di richiesta di trasformazione dell'intestazione alle specifiche di distribuzione API utilizzando la console o modificando un file JSON.

Tenere presente che non è possibile utilizzare i criteri di trasformazione dell'intestazione per trasformare determinate intestazioni di richiesta protette. Vedere Intestazioni delle richieste protette e intestazioni delle risposte.

Utilizzo della console per aggiungere i criteri di richiesta di trasformazione dell'intestazione

Per aggiungere criteri di richiesta di trasformazione intestazione a una specifica di distribuzione API utilizzando la console:

  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. 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.

  3. Fare clic su Avanti per immettere i dettagli relativi ai singoli instradamenti nella distribuzione API nella pagina Instradamenti.

  4. Nella pagina Cicli selezionare l'instradamento per il quale si desidera specificare i criteri di richiesta di trasformazione dell'intestazione.
  5. Fare clic su Mostra criteri di richiesta instradamento.
  6. Fare clic sul pulsante Aggiungi accanto a Trasformazioni intestazione per aggiornare le intestazioni incluse in una richiesta al gateway API per l'instradamento corrente.
  7. Per limitare le intestazioni incluse in una richiesta, specificare:

    • Azione: filtro.
    • Tipo: Blocca per rimuovere dalla richiesta le intestazioni elencate in modo esplicito oppure Consenti di consentire nella richiesta solo le intestazioni elencate in modo esplicito (qualsiasi altra intestazione viene rimossa dalla richiesta).
    • Nomi intestazione: la lista di intestazioni da rimuovere dalla richiesta o da consentire nella richiesta (a seconda dell'impostazione di Tipo). I nomi specificati non fanno distinzione tra maiuscole e minuscole e non devono essere inclusi in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi filtrati come consentito). Ad esempio, User-Agent.
  8. Per modificare il nome di un'intestazione inclusa in una richiesta (mantenendo il valore originale), specificare:

    • Azione: rinominare.
    • Da: il nome originale dell'intestazione che si sta rinominando. Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento. Ad esempio, X-Username.
    • A: il nuovo nome dell'intestazione che si sta rinominando. Il nome specificato non fa distinzione tra maiuscole e minuscole (la capitalizzazione potrebbe essere ignorata) e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi filtrati come consentito). Ad esempio, X-User-ID.
  9. Per aggiungere una nuova intestazione a una richiesta (o per modificare o conservare i valori di un'intestazione esistente già inclusa in una richiesta), specificare:

    • Azione: impostare.
    • Comportamento: se l'intestazione esiste già, specificare le operazioni da eseguire con il valore esistente dell'intestazione:

      • Sovrascrivi, per sostituire il valore esistente dell'intestazione con il valore specificato.
      • Aggiungi, per aggiungere il valore specificato al valore esistente dell'intestazione.
      • Salta, per mantenere il valore esistente dell'intestazione.
    • Nome: il nome dell'intestazione da aggiungere alla richiesta o per modificare il valore di. Il nome specificato non fa distinzione tra maiuscole e minuscole (la capitalizzazione potrebbe essere ignorata) e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi filtrati come consentito). Ad esempio, X-Api-Key.
    • Valori: il valore della nuova intestazione (o il valore da sostituire o aggiungere al valore di un'intestazione esistente, a seconda dell'impostazione di Comportamento). È possibile specificare più valori. Il valore specificato può essere una stringa semplice o includere variabili di contesto (ad eccezione di request.body) racchiuse nei delimitatori ${...}. Ad esempio, "value": "zyx987wvu654tsu321", "value": "${request.path[region]}", "value": "${request.headers[opc-request-id]}".
  10. Fare clic su Salva modifiche, quindi su Avanti per esaminare i dettagli immessi per i singoli instradamenti.
  11. Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
  12. (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 i criteri di richiesta di trasformazione dell'intestazione

Per aggiungere criteri di richiesta di trasformazione intestazione 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 criteri di richiesta di trasformazione dell'intestazione oppure 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. Inserire una sezione requestPolicies dopo la sezione backend per l'instradamento a cui si desidera applicare il criterio di richiesta di trasformazione dell'intestazione. Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {}
        }
      ]
    }
  3. Aggiungere una sezione headerTransformations alla sezione requestPolicies.

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerTransformations":{}
          }
        }
      ]
    }
  4. Per limitare le intestazioni incluse in una richiesta, specificare un criterio di richiesta di trasformazione dell'intestazione filterHeaders:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerTransformations": {
              "filterHeaders": {
                "type": "<BLOCK|ALLOW>",
                "items": [
                  {
                    "name": "<header-name>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "type": "<BLOCK|ALLOW>" indica le operazioni da eseguire con le intestazioni specificate da "items":[{"name":"<header-name>"}]:
      • Utilizzare BLOCK per rimuovere dalla richiesta le intestazioni elencate in modo esplicito.
      • Utilizzare ALLOW per consentire nella richiesta solo le intestazioni elencate in modo esplicito (qualsiasi altra intestazione viene rimossa dalla richiesta).
    • "name":"<header-name> è un'intestazione da rimuovere dalla richiesta o consentire nella richiesta (a seconda dell'impostazione di "type": "<BLOCK|ALLOW>"). Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, User-Agent.

    È possibile rimuovere e consentire fino a 50 intestazioni in un criterio di richiesta di trasformazione dell'intestazione filterHeaders.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerTransformations": {
              "filterHeaders": {
                "type": "BLOCK",
                "items": [
                  {
                    "name": "User-Agent"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API rimuove l'intestazione User-Agent da tutte le richieste in entrata.

  5. Per modificare il nome di un'intestazione inclusa in una richiesta (mantenendo il valore originale), specificare un criterio di richiesta di trasformazione dell'intestazione renameHeaders:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerTransformations": {
              "renameHeaders": {
                "items": [
                  {
                    "from": "<original-name>",
                    "to": "<new-name>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "from": "<original-name>" è il nome originale dell'intestazione che si sta rinominando. Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento. Ad esempio, X-Username.
    • "to": "<new-name>" è il nuovo nome dell'intestazione che si sta rinominando. Il nome specificato non fa distinzione tra maiuscole e minuscole (la capitalizzazione potrebbe essere ignorata) e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, X-User-ID.

    È possibile rinominare fino a 20 intestazioni in un criterio di richiesta di trasformazione dell'intestazione renameHeaders.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerTransformations": {
              "renameHeaders": {
                "items": [
                  {
                    "from": "X-Username",
                    "to": "X-User-ID"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API rinomina qualsiasi intestazione X-Username in X-User-ID, mantenendo il valore originale dell'intestazione.

  6. Per aggiungere una nuova intestazione a una richiesta (o per modificare o conservare i valori di un'intestazione esistente già inclusa in una richiesta), specificare un criterio di richiesta di trasformazione dell'intestazione setHeaders:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerTransformations": {
              "setHeaders": {
                "items": [
                  {
                    "name": "<header-name>",
                    "values": ["<header-value>"],
                    "ifExists": "<OVERWRITE|APPEND|SKIP>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "name":"<header-name> è il nome dell'intestazione da aggiungere alla richiesta o per modificare il valore di. Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, X-Api-Key.
    • "values": ["<header-value>"] è il valore della nuova intestazione (o il valore da sostituire o aggiungere al valore di un'intestazione esistente, a seconda dell'impostazione di "ifExists": "<OVERWRITE|APPEND|SKIP>"). Il valore specificato può essere una stringa semplice o includere variabili di contesto (ad eccezione di request.body) racchiuse nei delimitatori ${...}. Ad esempio, "values": "zyx987wvu654tsu321", "values": "${request.path[region]}", "values": "${request.headers[opc-request-id]}".

      È possibile specificare fino a 10 valori. Se si specificano più valori, il gateway API aggiunge un'intestazione per ogni valore.

    • "ifExists": "<OVERWRITE|APPEND|SKIP>" indica le operazioni da eseguire con il valore esistente dell'intestazione se l'intestazione specificata da <header-name> esiste già:

      • Utilizzare OVERWRITE per sostituire il valore esistente dell'intestazione con il valore specificato.
      • Utilizzare APPEND per aggiungere il valore specificato al valore esistente dell'intestazione.
      • Utilizzare SKIP per mantenere il valore esistente dell'intestazione.

      Se non viene specificato, il valore predefinito è OVERWRITE.

    È possibile aggiungere o modificare i valori di un massimo di 20 intestazioni in un criterio di richiesta di trasformazione dell'intestazione setHeaders.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerTransformations": {
              "setHeaders": {
                "items": [
                  {
                    "name": "X-Api-Key",
                    "values": ["zyx987wvu654tsu321"],
                    "ifExists": "OVERWRITE"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API aggiunge l'intestazione X-Api-Key:zyx987wvu654tsu321 a tutte le richieste in entrata. Se un'intestazione X-Api-Key di una richiesta in entrata è già impostata su un valore diverso, il gateway API sostituisce il valore esistente con zyx987wvu654tsu321.

  7. Salvare il file JSON contenente la specifica di distribuzione API.
  8. 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.

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

Aggiunta dei criteri di richiesta di trasformazione dei parametri di query

È possibile aggiungere criteri di richiesta di trasformazione dei parametri di query alle specifiche di distribuzione API utilizzando la console o modificando un file JSON.

Utilizzo della console per aggiungere i criteri di richiesta di trasformazione dei parametri di query

Per aggiungere criteri di richiesta di trasformazione dei parametri di query 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. 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.

  3. Fare clic su Avanti per immettere i dettagli relativi ai singoli instradamenti nella distribuzione API nella pagina Instradamenti.

  4. Nella pagina Cicli selezionare l'instradamento per il quale si desidera specificare i criteri di richiesta di trasformazione dei parametri di query.
  5. Fare clic su Mostra criteri di richiesta instradamento.
  6. Fare clic sul pulsante Aggiungi accanto a Trasformazioni dei parametri di query per aggiornare i parametri di query inclusi in una richiesta al gateway API per l'instradamento corrente.
  7. Per limitare i parametri di query inclusi in una richiesta, specificare:

    • Azione: filtro.
    • Tipo: Blocca per rimuovere dalla richiesta i parametri di query elencati in modo esplicito oppure Consenti di consentire nella richiesta solo i parametri di query elencati in modo esplicito (qualsiasi altro parametro di query viene rimosso dalla richiesta).
    • Nomi dei parametri di query: la lista dei parametri di query da rimuovere dalla richiesta o consentire nella richiesta (a seconda dell'impostazione di Tipo). I nomi specificati fanno distinzione tra maiuscole e minuscole e non devono essere inclusi in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi filtrati come consentito). Ad esempio, User-Agent.
  8. Per modificare il nome di un parametro di query incluso in una richiesta (mantenendo il valore originale), specificare:

    • Azione: rinominare.
    • Da: il nome originale del parametro di query che si sta rinominando. Il nome specificato fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento. Ad esempio, X-Username.
    • A: il nuovo nome del parametro di query che si sta rinominando. Il nome specificato fa distinzione tra maiuscole e minuscole (la capitalizzazione viene rispettata) e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi filtrati come consentito). Ad esempio, X-User-ID.
  9. Per aggiungere un nuovo parametro di query a una richiesta (o per modificare o conservare i valori di un parametro di query esistente già incluso in una richiesta), specificare:

    • Azione: impostare.
    • Comportamento: se il parametro di query esiste già, specificare le operazioni da eseguire con il valore esistente del parametro di query:

      • Sovrascrivi, per sostituire il valore esistente del parametro di query con il valore specificato.
      • Aggiungi, per aggiungere il valore specificato al valore esistente del parametro di query.
      • Salta, per mantenere il valore esistente del parametro di query.
    • Nome parametro query: il nome del parametro di query da aggiungere alla richiesta o per modificare il valore di. Il nome specificato fa distinzione tra maiuscole e minuscole e non deve essere incluso in nessun altro criterio di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi filtrati come consentito). Ad esempio, X-Api-Key.
    • Valori: il valore del nuovo parametro di query (o il valore da sostituire o aggiungere al valore di un parametro di query esistente, a seconda dell'impostazione di Comportamento). Il valore specificato può essere una stringa semplice o includere variabili di contesto racchiuse nei delimitatori ${...}. Ad esempio, "value": "zyx987wvu654tsu321", "value": "${request.path[region]}", "value": "${request.headers[opc-request-id]}". È possibile specificare più valori.
  10. Fare clic su Salva modifiche, quindi su Avanti per esaminare i dettagli immessi per i singoli instradamenti.
  11. Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
  12. (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 di trasformazione dei parametri di query

Per aggiungere criteri di richiesta di trasformazione dei parametri di query a una specifica di distribuzione API in un file JSON, procedere come segue.

  1. Utilizzando l'editor JSON preferito, modificare la specifica di distribuzione API esistente alla quale si desidera aggiungere criteri di richiesta di trasformazione dei parametri di query oppure 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. Inserire una sezione requestPolicies dopo la sezione backend per l'instradamento a cui si desidera applicare il criterio di richiesta di trasformazione dei parametri di query. Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {}
        }
      ]
    }
  3. Aggiungere una sezione queryParameterTransformations alla sezione requestPolicies.

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterTransformations":{}
          }
        }
      ]
    }
  4. Per limitare i parametri di query inclusi in una richiesta, specificare un criterio di richiesta di trasformazione dei parametri di query filterQueryParameters:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterTransformations": {
              "filterQueryParameters": {
                "type": "<BLOCK|ALLOW>",
                "items": [
                  {
                    "name": "<query-parameter-name>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "type": "<BLOCK|ALLOW>" indica le operazioni da eseguire con i parametri di query specificati da "items":[{"name":"<query-parameter-name>"}]:
      • Utilizzare BLOCK per rimuovere dalla richiesta i parametri di query elencati in modo esplicito.
      • Utilizzare ALLOW per consentire nella richiesta solo i parametri di query elencati in modo esplicito (qualsiasi altro parametro di query viene rimosso dalla richiesta).
    • "name":"<query-parameter-name> è un parametro di query da rimuovere dalla richiesta o consentire nella richiesta (a seconda dell'impostazione di "type": "<BLOCK|ALLOW>"). Il nome specificato fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, User-Agent.

    È possibile rimuovere e consentire fino a 50 parametri di query in un criterio di richiesta di trasformazione dei parametri di query filterQueryParameters.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterTransformations": {
              "filterQueryParameters": {
                "type": "BLOCK",
                "items": [
                  {
                    "name": "User-Agent"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API rimuove il parametro di query User-Agent da tutte le richieste in entrata.

  5. Per modificare il nome di un parametro di query incluso in una richiesta (mantenendo il valore originale), specificare un criterio di richiesta di trasformazione dei parametri di query renameQueryParameters:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterTransformations": {
              "renameQueryParameters": {
                "items": [
                  {
                    "from": "<original-name>",
                    "to": "<new-name>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "from": "<original-name>" è il nome originale del parametro di query che si sta rinominando. Il nome specificato fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento. Ad esempio, X-Username.
    • "to": "<new-name>" è il nuovo nome del parametro di query che si sta rinominando. Il nome specificato fa distinzione tra maiuscole e minuscole (la capitalizzazione viene rispettata) e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, X-User-ID.

    È possibile rinominare fino a 20 parametri di query in un criterio di richiesta di trasformazione dei parametri di query renameQueryParameters.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterTransformations": {
              "renameQueryParameters": {
                "items": [
                  {
                    "from": "X-Username",
                    "to": "X-User-ID"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API rinomina qualsiasi parametro di query X-Username in X-User-ID, mantenendo il valore originale del parametro di query.

  6. Per aggiungere un nuovo parametro di query a una richiesta (o per modificare o conservare i valori di un parametro di query esistente già incluso in una richiesta), specificare un criterio di richiesta di trasformazione del parametro di query setQueryParameters:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterTransformations": {
              "setQueryParameters": {
                "items": [
                  {
                    "name": "<query-parameter-name>",
                    "values": ["<query-parameter-value>"],
                    "ifExists": "<OVERWRITE|APPEND|SKIP>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "name": "<query-parameter-name>" è il nome del parametro di query da aggiungere alla richiesta o per modificare il valore di. Il nome specificato fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di richiesta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, X-Api-Key.
    • "values": ["<query-parameter-value>"] è il valore del nuovo parametro di query (o il valore da sostituire o aggiungere al valore di un parametro di query esistente, a seconda dell'impostazione di "ifExists": "<OVERWRITE|APPEND|SKIP>"). Il valore specificato può essere una stringa semplice o includere variabili di contesto racchiuse nei delimitatori ${...}. Ad esempio, "values": "zyx987wvu654tsu321", "values": "${request.path[region]}", "values": "${request.headers[opc-request-id]}".

      È possibile specificare fino a 10 valori. Se si specificano più valori, il gateway API aggiunge un parametro di query per ogni valore.

    • "ifExists": "<OVERWRITE|APPEND|SKIP>" indica le operazioni da eseguire con il valore esistente del parametro di query se il parametro di query specificato da <query-parameter-name> esiste già:

      • Utilizzare OVERWRITE per sostituire il valore esistente del parametro di query con il valore specificato.
      • Utilizzare APPEND per aggiungere il valore specificato al valore esistente del parametro di query.
      • Utilizzare SKIP per mantenere il valore esistente del parametro di query.

      Se non viene specificato, il valore predefinito è OVERWRITE.

    È possibile aggiungere o modificare i valori di un massimo di 20 parametri di query in un criterio di richiesta di trasformazione dei parametri di query setQueryParameters.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterTransformations": {
              "setQueryParameters": {
                "items": [
                  {
                    "name": "X-Api-Key",
                    "values": ["zyx987wvu654tsu321"],
                    "ifExists": "OVERWRITE"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API aggiunge il parametro di query X-Api-Key:zyx987wvu654tsu321 a tutte le richieste in entrata. Se un parametro di query X-Api-Key per una richiesta in entrata è già impostato su un valore diverso, il gateway API sostituisce il valore esistente con zyx987wvu654tsu321.

  7. Salvare il file JSON contenente la specifica di distribuzione API.
  8. 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.

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

Aggiunta dei criteri di risposta per la trasformazione dell'intestazione

È possibile aggiungere criteri di risposta di trasformazione dell'intestazione alle specifiche di distribuzione API utilizzando la console o modificando un file JSON.

Tenere presente che non è possibile utilizzare i criteri di trasformazione dell'intestazione per trasformare determinate intestazioni di risposta protette. Vedere Intestazioni delle richieste protette e intestazioni delle risposte.

Utilizzo della console per aggiungere i criteri di risposta di trasformazione dell'intestazione

Per aggiungere criteri di risposta di trasformazione intestazione 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. 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.

  3. Fare clic su Avanti per immettere i dettagli relativi ai singoli instradamenti nella distribuzione API nella pagina Instradamenti.

  4. Nella pagina Cicli selezionare l'instradamento per il quale si desidera specificare i criteri di risposta per la trasformazione dell'intestazione.
  5. Fare clic su Mostra criteri di risposta instradamento.
  6. Fare clic sul pulsante Aggiungi accanto a Trasformazioni intestazione per aggiornare le intestazioni incluse in una risposta dal gateway API per l'instradamento corrente.
  7. Per limitare le intestazioni incluse in una risposta, specificare:

    • Azione: filtro.
    • Tipo: Blocca per rimuovere dalla risposta le intestazioni elencate in modo esplicito oppure Consenti di consentire solo nella risposta le intestazioni elencate in modo esplicito (qualsiasi altra intestazione viene rimossa dalla risposta).
    • Nomi intestazione: la lista di intestazioni da rimuovere dalla risposta o da consentire nella risposta (a seconda dell'impostazione di Tipo). I nomi specificati non fanno distinzione tra maiuscole e minuscole e non devono essere inclusi in altri criteri di risposta di trasformazione per l'instradamento (ad eccezione degli elementi filtrati come consentito). Ad esempio, User-Agent.
  8. Per modificare il nome di un'intestazione inclusa in una risposta (mantenendo il valore originale), specificare:

    • Azione: rinominare.
    • Da: il nome originale dell'intestazione che si sta rinominando. Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di risposta di trasformazione per l'instradamento. Ad esempio, X-Username.
    • A: il nuovo nome dell'intestazione che si sta rinominando. Il nome specificato non fa distinzione tra maiuscole e minuscole (la capitalizzazione potrebbe essere ignorata) e non deve essere incluso in altri criteri di risposta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, X-User-ID.
  9. Per aggiungere una nuova intestazione a una risposta (o per modificare o conservare i valori di un'intestazione esistente già inclusa in una risposta), specificare:

    • Azione: impostare.
    • Comportamento: se l'intestazione esiste già, specificare le operazioni da eseguire con il valore esistente dell'intestazione:

      • Sovrascrivi, per sostituire il valore esistente dell'intestazione con il valore specificato.
      • Aggiungi, per aggiungere il valore specificato al valore esistente dell'intestazione.
      • Salta, per mantenere il valore esistente dell'intestazione.
    • Nome: il nome dell'intestazione da aggiungere alla risposta (o per modificare il valore di). Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di risposta alla trasformazione per l'instradamento (ad eccezione degli elementi filtrati come consentito). Ad esempio, X-Api-Key.
    • Valori: il valore della nuova intestazione (o il valore da sostituire o aggiungere al valore di un'intestazione esistente, a seconda dell'impostazione di Comportamento). Il valore specificato può essere una stringa semplice o includere variabili di contesto racchiuse nei delimitatori ${...}. Ad esempio, "value": "zyx987wvu654tsu321". È possibile specificare più valori.
  10. Fare clic su Salva modifiche, quindi su Avanti per esaminare i dettagli immessi per i singoli instradamenti.
  11. Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
  12. (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 i criteri di risposta di trasformazione dell'intestazione

Per aggiungere criteri di risposta di trasformazione intestazione a una specifica di distribuzione API in un file JSON, procedere come segue.

  1. Utilizzando l'editor JSON preferito, modificare la specifica di distribuzione API esistente alla quale si desidera aggiungere criteri di risposta di trasformazione dell'intestazione oppure 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. Inserire una sezione responsePolicies dopo la sezione backend per l'instradamento a cui si desidera applicare il criterio di risposta di trasformazione dell'intestazione. Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "responsePolicies": {}
        }
      ]
    }
  3. Aggiungere una sezione headerTransformations alla sezione responsePolicies.

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "responsePolicies": {
            "headerTransformations":{}
          }
        }
      ]
    }
  4. Per limitare le intestazioni incluse in una risposta, specificare un criterio di risposta di trasformazione dell'intestazione filterHeaders:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "responsePolicies": {
            "headerTransformations": {
              "filterHeaders": {
                "type": "<BLOCK|ALLOW>",
                "items": [
                  {
                    "name": "<header-name>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "type": "<BLOCK|ALLOW>" indica le operazioni da eseguire con le intestazioni specificate da "items":[{"name":"<header-name>"}]:
      • Utilizzare BLOCK per rimuovere dalla risposta le intestazioni elencate in modo esplicito.
      • Utilizzare ALLOW per consentire nella risposta solo le intestazioni elencate in modo esplicito (qualsiasi altra intestazione viene rimossa dalla risposta).
    • "name":"<header-name> è un'intestazione da rimuovere dalla risposta o da consentire nella risposta (a seconda dell'impostazione di "type": "<BLOCK|ALLOW>"). Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di risposta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, User-Agent.

    È possibile rimuovere e consentire fino a 20 intestazioni in un criterio di risposta di trasformazione dell'intestazione filterHeaders.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "responsePolicies": {
            "headerTransformations": {
              "filterHeaders": {
                "type": "BLOCK",
                "items": [
                  {
                    "name": "User-Agent"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API rimuove l'intestazione User-Agent da tutte le risposte in uscita.

  5. Per modificare il nome di un'intestazione inclusa in una risposta (mantenendo il valore originale), specificare un criterio di risposta di trasformazione dell'intestazione renameHeaders:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "responsePolicies": {
            "headerTransformations": {
              "renameHeaders": {
                "items": [
                  {
                    "from": "<original-name>",
                    "to": "<new-name>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "from": "<original-name>" è il nome originale dell'intestazione che si sta rinominando. Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di risposta di trasformazione per l'instradamento. Ad esempio, X-Username.
    • "to": "<new-name>" è il nuovo nome dell'intestazione che si sta rinominando. Il nome specificato non fa distinzione tra maiuscole e minuscole (la capitalizzazione potrebbe essere ignorata) e non deve essere incluso in altri criteri di risposta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, X-User-ID.

    È possibile rinominare fino a 20 intestazioni in un criterio di risposta di trasformazione dell'intestazione renameHeaders.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "responsePolicies": {
            "headerTransformations": {
              "renameHeaders": {
                "items": [
                  {
                    "from": "X-Username",
                    "to": "X-User-ID"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API rinomina qualsiasi intestazione X-Username in X-User-ID, mantenendo il valore originale dell'intestazione.

  6. Per aggiungere una nuova intestazione a una risposta (o per modificare o conservare i valori di un'intestazione esistente già inclusa in una risposta), specificare un criterio di risposta di trasformazione dell'intestazione setHeaders:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "responsePolicies": {
            "headerTransformations": {
              "setHeaders": {
                "items": [
                  {
                    "name": "<header-name>",
                    "values": ["<header-value>"],
                    "ifExists": "<OVERWRITE|APPEND|SKIP>"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    dove:

    • "name":"<header-name> è il nome dell'intestazione da aggiungere alla risposta (o per modificare il valore di). Il nome specificato non fa distinzione tra maiuscole e minuscole e non deve essere incluso in altri criteri di risposta di trasformazione per l'instradamento (ad eccezione degli elementi negli elenchi ALLOW). Ad esempio, X-Api-Key.
    • "values": ["<header-value>"] è il valore della nuova intestazione (o il valore da sostituire o aggiungere al valore di un'intestazione esistente, a seconda dell'impostazione di "ifExists": "<OVERWRITE|APPEND|SKIP>"). Il valore specificato può essere una stringa semplice o includere variabili di contesto racchiuse nei delimitatori ${...}. Ad esempio, "values": "zyx987wvu654tsu321".

      È possibile specificare fino a 10 valori. Se si specificano più valori, il gateway API aggiunge un'intestazione per ogni valore.

    • "ifExists": "<OVERWRITE|APPEND|SKIP>" indica le operazioni da eseguire con il valore esistente dell'intestazione se l'intestazione specificata da <header-name> esiste già:

      • Utilizzare OVERWRITE per sostituire il valore esistente dell'intestazione con il valore specificato.
      • Utilizzare APPEND per aggiungere il valore specificato al valore esistente dell'intestazione.
      • Utilizzare SKIP per mantenere il valore esistente dell'intestazione.

      Se non viene specificato, il valore predefinito è OVERWRITE.

    È possibile aggiungere o modificare i valori di un massimo di 20 intestazioni in un criterio di risposta di trasformazione dell'intestazione setHeaders.

    Ad esempio:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "responsePolicies": {
            "headerTransformations": {
              "setHeaders": {
                "items": [
                  {
                    "name": "X-Api-Key",
                    "values": ["zyx987wvu654tsu321"],
                    "ifExists": "OVERWRITE"
                  }
                ]
              }
            }
          }
        }
      ]
    }

    In questo esempio, il gateway API aggiunge l'intestazione X-Api-Key:zyx987wvu654tsu321 a tutte le risposte in uscita. Se un'intestazione X-Api-Key di una risposta in uscita è già impostata su un valore diverso, il gateway API sostituisce il valore esistente con zyx987wvu654tsu321.

  7. Salvare il file JSON contenente la specifica di distribuzione API.
  8. 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.

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

Esempi

Gli esempi in questa sezione presuppongono la seguente definizione di distribuzione API e la specifica di distribuzione API di base in un file JSON:

{
  "displayName": "Marketing Deployment",
  "gatewayId": "ocid1.apigateway.oc1..aaaaaaaab______hga",
  "compartmentId": "ocid1.compartment.oc1..aaaaaaaa7______ysq",
  "pathPrefix": "/marketing",
  "specification": {
    "routes": [
      {
        "path": "/weather",
        "methods": ["GET"],
        "backend": {
          "type": "HTTP_BACKEND",
          "url": "https://api.weather.gov"
        },
        "requestPolicies": {}
      }
    ]
  },
  "freeformTags": {},
  "definedTags": {}
}

Gli esempi si applicano anche quando si definisce una specifica di distribuzione API utilizzando le finestre di dialogo nella console.

Esempio 1: trasformazione dei parametri di intestazione in parametri di query

In questo esempio, si supponga che un backend HTTP esistente gestisca solo le richieste contenenti parametri di query, non i parametri di intestazione. Tuttavia, si desidera che il backend HTTP gestisca le richieste che includono parametri di intestazione. A tale scopo, si crea una specifica di distribuzione API che include un criterio di richiesta di trasformazione dei parametri di query per passare il valore ottenuto da un'intestazione di richiesta al backend HTTP come parametro di query.

        "requestPolicies": {
          "queryParameterTransformations":  {
            "setQueryParameters": {
              "items": [
                {
                  "name": "region",
                  "values": ["${request.headers[region]}"],
                  "ifExists": "OVERWRITE"
                }
              ]
            }
          }
        }

In questo esempio, una richiesta come curl -H "region: west" https://<gateway-hostname>/marketing/weather viene risolta in https://api.weather.gov?region=west.

Esempio 2: trasformazione di un'intestazione in un'altra intestazione

In questo esempio, si supponga che un backend HTTP esistente gestisca solo le richieste contenenti una determinata intestazione. Tuttavia, si desidera che il backend HTTP gestisca le richieste che includono un'intestazione diversa. A tale scopo, è possibile creare una specifica di distribuzione API che includa un criterio di richiesta di trasformazione dell'intestazione per prendere il valore ottenuto da un'intestazione di richiesta e passarlo al backend HTTP come intestazione di richiesta diversa.

        "requestPolicies": {
          "headerTransformations": {
            "setHeaders": {
              "items": [
                {
                  "name": "region",
                  "values": ["${request.headers[locale]}"],
                  "ifExists": "OVERWRITE"
                }
              ]
            }
          }
        }

In questo esempio, una richiesta come curl -H "locale: west" https://<gateway-hostname>/marketing/weather viene risolta nella richiesta curl -H "region: west" https://api.weather.gov.

Esempio 3: aggiunta di un parametro di autenticazione ottenuto da un JWT come intestazione di richiesta

In questo esempio, si supponga che un backend HTTP esistente richieda l'inclusione del valore della richiesta sub in un token Web JSON convalidato (JWT) in una richiesta come intestazione denominata JWT_SUBJECT. Il servizio gateway API ha salvato il valore della richiesta sub inclusa nel token JWT come parametro di autenticazione nella tabella request.auth.

Per includere il valore di sub in un'intestazione denominata JWT_SUBJECT, è necessario creare una specifica di distribuzione API che includa un criterio di richiesta di trasformazione dell'intestazione. Il criterio di richiesta ottiene il valore sub dalla tabella request.auth e lo passa al backend HTTP come valore dell'intestazione JWT_SUBJECT.

        "requestPolicies": {
          "headerTransformations": {
            "setHeaders": {
              "items": [
                {
                  "name": "JWT_SUBJECT",
                  "values": ["${request.auth[sub]}"],
                  "ifExists": "OVERWRITE"
                }
              ]
            }
          }
        }

In questo esempio, quando una richiesta viene convalidata correttamente, l'intestazione JWT_SUBJECT viene aggiunta alla richiesta passata al backend HTTP.

Esempio 4: aggiunta di una chiave ottenuta da una funzione del responsabile autorizzazioni come parametro di query

In questo esempio, si supponga che un backend HTTP esistente richieda che le richieste includano un parametro di query denominato access_key a scopo di autenticazione. Si desidera che il parametro di query access_key abbia il valore di una chiave denominata apiKey che è stata restituita da una funzione del responsabile autorizzazioni che ha convalidato correttamente la richiesta. Il servizio Gateway API ha salvato il valore apiKey come parametro di autenticazione nella tabella request.auth.

Per includere il parametro di query access_key nella richiesta, creare una specifica di distribuzione API che includa un criterio di richiesta di trasformazione del parametro di query. Il criterio di richiesta ottiene il valore apiKey dalla tabella request.auth e lo passa al backend HTTP come valore del parametro di query access_key.

        "requestPolicies": {
          "queryParameterTransformations": {
            "setQueryParameters": {
              "items": [
                {
                  "name": "access_key",
                  "values": ["${request.auth[apiKey]}"],
                  "ifExists": "OVERWRITE"
                }
              ]
            }
          }
        }

In questo esempio, il parametro di query access_key viene aggiunto alla richiesta passata al backend HTTP, con il valore apiKey della tabella request.auth. Una richiesta come https://<gateway-hostname>/marketing/weather viene risolta in una richiesta come https://api.weather.gov?access_key=fw5n9abi0ep

Esempio 5: aggiunta di un valore predefinito per un parametro di query facoltativo

In questo esempio, si supponga che un backend HTTP esistente richieda richieste per includere un parametro di query denominato country. Tuttavia, il parametro di query country è facoltativo e non è incluso da alcuni client API che inviano richieste. Se una richiesta include già un parametro di query country e un valore, si desidera che entrambi vengano passati così com'è al backend HTTP. Tuttavia, se una richiesta non include già un parametro di query country, si desidera che il parametro di query country e un valore predefinito vengano aggiunti alla richiesta.

Per assicurarsi che ogni richiesta includa un parametro di query country, è necessario creare una specifica di distribuzione API che includa un criterio di richiesta di trasformazione dei parametri di query. Il criterio di richiesta aggiunge il parametro di query country e un valore predefinito a tutte le richieste che non includono già il parametro di query country.

        "requestPolicies": {
          "queryParameterTransformations": {
            "setQueryParameters": {
              "items": [
                {
                  "name": "country",
                  "values": ["usa"],
                  "ifExists": "SKIP"
                }
              ]
            }
          }
        }

In questo esempio, una richiesta come https://<gateway-hostname>/marketing/weather viene risolta in https://api.weather.gov?country=usa. Una richiesta come https://<gateway-hostname>/marketing/weather?country=canada viene risolta in https://api.weather.gov?country=canada.

Header richiesta protetta e intestazioni risposta

Non è possibile utilizzare i criteri di trasformazione dell'intestazione per trasformare determinate intestazioni di richiesta e risposta protette, come riportato di seguito.

Intestazione Protetto come intestazione richiesta Protetto come intestazione risposta
access-control-allow-credentials non applicabile
intestazioni consentite per controllo dell'accesso non applicabile
metodi consentiti per controllo dell'accesso non applicabile
origine-consenso-controllo-accesso non applicabile
access-control-expose-headers non applicabile
età-max-controllo-accesso non applicabile
ciclo CDN non applicabile
connessione
content-length
cookie non applicabile
eccetto
controllo attività
opc-request-id
origine non applicabile
autenticazione proxy non applicabile
autorizzazione proxy non applicabile
pin-chiave-pubblico non applicabile
riprovare dopo non applicabile
rigoroso trasporto-sicurezza non applicabile
te
rimorchi non applicabile
codifica trasferimento
upgrade
x-content-tipo-opzioni non applicabile
x-forwarded-for non applicabile
opzioni x-frame non applicabile
x-real-ip non applicabile
protezione x-xss non applicabile