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:
-
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.
-
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.
-
Fare clic su Avanti per immettere i dettagli relativi ai singoli instradamenti nella distribuzione API nella pagina Instradamenti.
- Nella pagina Cicli selezionare l'instradamento per il quale si desidera specificare i criteri di richiesta di trasformazione dell'intestazione.
- Fare clic su Mostra criteri di richiesta instradamento.
- Fare clic sul pulsante Aggiungi accanto a Trasformazioni intestazione per aggiornare le intestazioni incluse in una richiesta al gateway API per l'instradamento corrente.
-
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
.
-
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
.
-
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]}"
.
- Fare clic su Salva modifiche, quindi su Avanti per esaminare i dettagli immessi per i singoli instradamenti.
- Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
- (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.
-
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" } } ] }
-
Inserire una sezione
requestPolicies
dopo la sezionebackend
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": {} } ] }
-
Aggiungere una sezione
headerTransformations
alla sezionerequestPolicies
.{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "headerTransformations":{} } } ] }
-
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).
- Utilizzare
"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 elenchiALLOW
). 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. -
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 elenchiALLOW
). 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
inX-User-ID
, mantenendo il valore originale dell'intestazione. -
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 elenchiALLOW
). 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 direquest.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
. - Utilizzare
È 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'intestazioneX-Api-Key
di una richiesta in entrata è già impostata su un valore diverso, il gateway API sostituisce il valore esistente conzyx987wvu654tsu321
. - Salvare il file JSON contenente la specifica di distribuzione API.
-
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.
- (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.
-
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.
-
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.
-
Fare clic su Avanti per immettere i dettagli relativi ai singoli instradamenti nella distribuzione API nella pagina Instradamenti.
- Nella pagina Cicli selezionare l'instradamento per il quale si desidera specificare i criteri di richiesta di trasformazione dei parametri di query.
- Fare clic su Mostra criteri di richiesta instradamento.
- 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.
-
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
.
-
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
.
-
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.
- Fare clic su Salva modifiche, quindi su Avanti per esaminare i dettagli immessi per i singoli instradamenti.
- Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
- (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.
-
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" } } ] }
-
Inserire una sezione
requestPolicies
dopo la sezionebackend
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": {} } ] }
-
Aggiungere una sezione
queryParameterTransformations
alla sezionerequestPolicies
.{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "queryParameterTransformations":{} } } ] }
-
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).
- Utilizzare
"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 elenchiALLOW
). 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. -
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 elenchiALLOW
). 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
inX-User-ID
, mantenendo il valore originale del parametro di query. -
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 elenchiALLOW
). 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
. - Utilizzare
È 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 queryX-Api-Key
per una richiesta in entrata è già impostato su un valore diverso, il gateway API sostituisce il valore esistente conzyx987wvu654tsu321
. - Salvare il file JSON contenente la specifica di distribuzione API.
-
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.
- (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.
-
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.
-
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.
-
Fare clic su Avanti per immettere i dettagli relativi ai singoli instradamenti nella distribuzione API nella pagina Instradamenti.
- Nella pagina Cicli selezionare l'instradamento per il quale si desidera specificare i criteri di risposta per la trasformazione dell'intestazione.
- Fare clic su Mostra criteri di risposta instradamento.
- Fare clic sul pulsante Aggiungi accanto a Trasformazioni intestazione per aggiornare le intestazioni incluse in una risposta dal gateway API per l'instradamento corrente.
-
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
.
-
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
.
-
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.
- Fare clic su Salva modifiche, quindi su Avanti per esaminare i dettagli immessi per i singoli instradamenti.
- Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
- (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.
-
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" } } ] }
-
Inserire una sezione
responsePolicies
dopo la sezionebackend
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": {} } ] }
-
Aggiungere una sezione
headerTransformations
alla sezioneresponsePolicies
.{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "responsePolicies": { "headerTransformations":{} } } ] }
-
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).
- Utilizzare
"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 elenchiALLOW
). 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. -
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 elenchiALLOW
). 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
inX-User-ID
, mantenendo il valore originale dell'intestazione. -
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 elenchiALLOW
). 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
. - Utilizzare
È 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'intestazioneX-Api-Key
di una risposta in uscita è già impostata su un valore diverso, il gateway API sostituisce il valore esistente conzyx987wvu654tsu321
. - Salvare il file JSON contenente la specifica di distribuzione API.
-
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.
- (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 | Sì |
intestazioni consentite per controllo dell'accesso | non applicabile | Sì |
metodi consentiti per controllo dell'accesso | non applicabile | Sì |
origine-consenso-controllo-accesso | non applicabile | Sì |
access-control-expose-headers | non applicabile | Sì |
età-max-controllo-accesso | non applicabile | Sì |
ciclo CDN | Sì | non applicabile |
connessione | Sì | Sì |
content-length | Sì | Sì |
cookie | Sì | non applicabile |
eccetto | Sì | Sì |
controllo attività | Sì | Sì |
opc-request-id | Sì | Sì |
origine | Sì | non applicabile |
autenticazione proxy | non applicabile | Sì |
autorizzazione proxy | Sì | non applicabile |
pin-chiave-pubblico | non applicabile | Sì |
riprovare dopo | non applicabile | Sì |
rigoroso trasporto-sicurezza | non applicabile | Sì |
te | Sì | Sì |
rimorchi | non applicabile | Sì |
codifica trasferimento | Sì | Sì |
upgrade | Sì | Sì |
x-content-tipo-opzioni | non applicabile | Sì |
x-forwarded-for | Sì | non applicabile |
opzioni x-frame | non applicabile | Sì |
x-real-ip | Sì | non applicabile |
protezione x-xss | non applicabile | Sì |