Transformationsbeispiele
Anhand von Beispielen erfahren Sie, wie Sie eingehende Anforderungen und ausgehende Antworten ändern, die mit API Gateway an und von Backend-Services gesendet werden.
In den Beispielen in diesem Abschnitt wird von der folgenden API-Deployment-Definition und grundlegenden API-Deployment-Spezifikation in einer JSON-Datei ausgegangen:
{
"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": {}
}Beachten Sie, dass diese Beispiele auch gelten, wenn Sie eine API-Deployment-Spezifikation mit Dialogfeldern in der Konsole definieren.
Beispiel 1: Headerparameter in Abfrageparameter transformieren
In diesem Beispiel wird angenommen, dass ein vorhandenes HTTP-Backend nur Anforderungen mit Abfrageparametern und nicht mit Headerparametern verarbeitet. Sie möchten jedoch, dass das HTTP-Backend auch Anforderungen mit Headerparametern verarbeitet. Um dies zu erreichen, erstellen Sie eine API-Deployment-Spezifikation, die eine Abfrageparameter-Transformationsanforderungs-Policy enthält, um den Wert aus einem Anforderungsheader als Abfrageparameter an das HTTP-Backend zu übergeben.
"requestPolicies": {
"queryParameterTransformations": {
"setQueryParameters": {
"items": [
{
"name": "region",
"values": ["${request.headers[region]}"],
"ifExists": "OVERWRITE"
}
]
}
}
}In diesem Beispiel wird eine Anforderung wie curl -H "region: west" https://<gateway-hostname>/marketing/weather in https://api.weather.gov?region=west aufgelöst.
Beispiel 2: Einen Header in einen anderen Header transformieren
In diesem Beispiel wird angenommen, dass ein vorhandenes HTTP-Backend nur Anforderungen verarbeitet, die einen bestimmten Header enthalten. Sie möchten jedoch, dass das HTTP-Backend auch Anforderungen mit einem anderen Header verarbeitet. Um dies zu erreichen, erstellen Sie eine API-Deployment-Spezifikation, die eine Headertransformationsanforderungs-Policy enthält, um den Wert aus einem Anforderungsheader als ein anderer Anforderungsheader an das HTTP-Backend zu übergeben.
"requestPolicies": {
"headerTransformations": {
"setHeaders": {
"items": [
{
"name": "region",
"values": ["${request.headers[locale]}"],
"ifExists": "OVERWRITE"
}
]
}
}
}In diesem Beispiel wird eine Anforderung wie curl -H "locale: west" https://<gateway-hostname>/marketing/weather in die Anforderung curl -H "region: west" https://api.weather.gov aufgelöst.
Beispiel 3: Authentifizierungsparameter aus einem JWT als Anforderungsheader hinzufügen
In diesem Beispiel wird angenommen, dass ein vorhandenes HTTP-Backend erfordert, dass der Wert des sub-Claims in einem validierten JSON Web Token (JWT) in einer Anforderung als Header mit dem Namen JWT_SUBJECT enthalten sein muss. Der API Gateway-Service hat den Wert des sub-Claims gespeichert, der im JWT als Authentifizierungsparameter in der Tabelle request.auth enthalten ist.
Um den sub-Wert in einen Header namens JWT_SUBJECT aufzunehmen, erstellen Sie eine API-Deployment-Spezifikation, die eine Headertransformationsanforderungs-Policy enthält. Die Anforderungs-Policy ruft den sub-Wert aus der request.auth-Tabelle ab und übergibt ihn als Wert des JWT_SUBJECT-Headers an das HTTP-Backend.
"requestPolicies": {
"headerTransformations": {
"setHeaders": {
"items": [
{
"name": "JWT_SUBJECT",
"values": ["${request.auth[sub]}"],
"ifExists": "OVERWRITE"
}
]
}
}
}Wenn eine Anforderung erfolgreich validiert wurde, wird in diesem Beispiel der JWT_SUBJECT-Header zu der Anforderung hinzugefügt, die an das HTTP-Backend übergeben wird.
Beispiel 4: Schlüssel aus einer Autorisiererfunktion als Abfrageparameter hinzufügen
In diesem Beispiel wird angenommen, dass ein vorhandenes HTTP-Backend erfordert, dass Anforderungen zu Authentifizierungszwecken einen Abfrageparameter namens access_key enthalten müssen. Sie möchten, dass der Abfrageparameter access_key den Wert eines Schlüssels namens apiKey enthält, der von einer Autorisiererfunktion zurückgegeben wurde, die die Anforderung erfolgreich validiert hat. Der API Gateway-Service hat den Wert apiKey als Authentifizierungsparameter in der Tabelle request.auth gespeichert.
Um den Abfrageparameter access_key in die Anforderung aufzunehmen, erstellen Sie eine API-Deployment-Spezifikation, die eine Abfrageparameter-Transformationsanforderungs-Policy enthält. Die Anforderungs-Policy ruft den apiKey-Wert aus der request.auth-Tabelle ab und übergibt ihn als Wert des access_key-Abfrageparameters an das HTTP-Backend.
"requestPolicies": {
"queryParameterTransformations": {
"setQueryParameters": {
"items": [
{
"name": "access_key",
"values": ["${request.auth[apiKey]}"],
"ifExists": "OVERWRITE"
}
]
}
}
}In diesem Beispiel wird der Abfrageparameter access_key zu der Anforderung hinzugefügt, die an das HTTP-Backend übergeben wird, wobei der apiKey-Wert aus der request.auth-Tabelle verwendet wird. Eine Anforderung wie https://<gateway-hostname>/marketing/weather wird in eine Anforderung wie https://api.weather.gov?access_key=fw5n9abi0ep aufgelöst.
Beispiel 5: Standardwert für einen optionalen Abfrageparameter hinzufügen
In diesem Beispiel wird angenommen, dass ein vorhandenes HTTP-Backend erfordert, dass Anforderungen einen Abfrageparameter namens country enthalten müssen. Der Abfrageparameter country ist jedoch optional und wird von einigen API-Clients, die Anforderungen senden, nicht eingefügt. Wenn eine Anforderung bereits einen country-Abfrageparameter und einen Wert enthält, möchten Sie, dass beide unverändert an das HTTP-Backend übergeben werden. Wenn eine Anforderung jedoch noch keinen country-Abfrageparameter enthält, möchten Sie, dass der country-Abfrageparameter und ein Standardwert zur Anforderung hinzugefügt werden.
Um sicherzustellen, dass jede Anforderung einen country-Abfrageparameter enthält, erstellen Sie eine API-Deployment-Spezifikation, die eine Abfrageparameter-Transformationsanforderungs-Policy enthält. Die Anforderungs-Policy fügt allen Anforderungen, die den Abfrageparameter country noch nicht enthalten, den Abfrageparameter country und einen Standardwert hinzu.
"requestPolicies": {
"queryParameterTransformations": {
"setQueryParameters": {
"items": [
{
"name": "country",
"values": ["usa"],
"ifExists": "SKIP"
}
]
}
}
}In diesem Beispiel wird eine Anforderung wie https://<gateway-hostname>/marketing/weather in https://api.weather.gov?country=usa aufgelöst. Eine Anforderung wie https://<gateway-hostname>/marketing/weather?country=canada wird in https://api.weather.gov?country=canada aufgelöst.