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.