Esempi di trasformazione
Utilizzare esempi per imparare a modificare le richieste in entrata e le risposte in uscita inviate ai e dai servizi backend con API Gateway.
Gli esempi in questa sezione presuppongono la definizione di distribuzione API e la specifica di distribuzione API di base seguenti 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": {}
}Si noti che 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, creare una specifica di distribuzione API che includa 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'intestazione diversa
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, creare una specifica di distribuzione API che includa un criterio di richiesta di trasformazione dell'intestazione per acquisire 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 il valore della richiesta sub in un token Web JSON convalidato (JWT) da includere in una richiesta come intestazione con il nome JWT_SUBJECT. Il servizio Gateway API ha salvato il valore della richiesta sub inclusa nel JWT come parametro di autenticazione nella tabella request.auth.
Per includere il valore 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 è stata 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 le richieste di includere un parametro di query denominato access_key ai fini dell'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 dei parametri di query. Il criterio di richiesta recupera 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 le 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, 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.