Beispiele für die Verwendung von Variablen bei Zuweisungsvorlagen-Transformationen in API Gateway - Amazon API Gateway

Beispiele für die Verwendung von Variablen bei Zuweisungsvorlagen-Transformationen in API Gateway

Die folgenden Beispiele zeigen, wie Sie $context-, input- und util-Variablen in Zuweisungsvorlagen verwenden. Sie können eine Scheinintegration oder eine Lambda-Nicht-Proxy-Integration verwenden, die das Eingabeereignis an API Gateway zurückgibt. Eine Liste aller unterstützten Variablen für Datentransformationen finden Sie unter Variablen für Datentransformationen für API Gateway.

Beispiel 1: Übergeben mehrerer $context-Variablen an den Integrationsendpunkt

Das folgende Beispiel zeigt eine Mapping-Vorlage für die Zuordnung eingehender $context Variablen zu Backend-Variablen mit geringfügig unterschiedlichen Namen in der Nutzlast einer Integrationsanforderung:

{ "stage" : "$context.stage", "request_id" : "$context.requestId", "api_id" : "$context.apiId", "resource_path" : "$context.resourcePath", "resource_id" : "$context.resourceId", "http_method" : "$context.httpMethod", "source_ip" : "$context.identity.sourceIp", "user-agent" : "$context.identity.userAgent", "account_id" : "$context.identity.accountId", "api_key" : "$context.identity.apiKey", "caller" : "$context.identity.caller", "user" : "$context.identity.user", "user_arn" : "$context.identity.userArn" }

Die Ausgabe dieser Zuweisungsvorlage sollte wie folgt aussehen:

{ stage: 'prod', request_id: 'abcdefg-000-000-0000-abcdefg', api_id: 'abcd1234', resource_path: '/', resource_id: 'efg567', http_method: 'GET', source_ip: '192.0.2.1', user-agent: 'curl/7.84.0', account_id: '111122223333', api_key: 'MyTestKey', caller: 'ABCD-0000-12345', user: 'ABCD-0000-12345', user_arn: 'arn:aws:sts::111122223333:assumed-role/Admin/carlos-salazar' }

Eine der Variablen ist ein API-Schlüssel. In diesem Beispiel wird vorausgesetzt, dass die Methode einen API-Schlüssel erfordert.

Beispiel 2: Übergeben aller Anfrageparameter an den Integrationsendpunkt über Nutzdaten im JSON-Format

Das folgende Beispiel übergibt alle Anfrageparameter, einschließlich path-, querystring- und header-Parameter, an den Integrationsendpunkt über Nutzdaten im JSON-Format:

#set($allParams = $input.params()) { "params" : { #foreach($type in $allParams.keySet()) #set($params = $allParams.get($type)) "$type" : { #foreach($paramName in $params.keySet()) "$paramName" : "$util.escapeJavaScript($params.get($paramName))" #if($foreach.hasNext),#end #end } #if($foreach.hasNext),#end #end } }

Wenn eine Anfrage die folgenden Eingabeparameter enthält:

  • Einen Pfadparameter namens myparam

  • Die Abfragezeichenfolgenparameter querystring1=value1,value2

  • Headers "header1" : "value1"

Die Ausgabe dieser Zuweisungsvorlage sollte wie folgt aussehen:

{"params":{"path":{"example2":"myparamm"},"querystring":{"querystring1":"value1,value2"},"header":{"header1":"value1"}}}

Beispiel 3: Übergeben eines Unterabschnitts einer Methodenanforderung an den Integrationsendpunkt

Im folgenden Beispiel wird der Eingabeparameter name verwendet, um nur den Parameter name abzurufen, und der Eingabeparameter input.json('$'), um den gesamten Body der Methodenanforderung abzurufen:

{ "name" : "$input.params('name')", "body" : $input.json('$') }

Für eine Anforderung, die die Parameter der Abfragezeichenfolge name=Bella&type=dog und den folgenden Text enthält:

{ "Price" : "249.99", "Age": "6" }

Die Ausgabe dieser Zuweisungsvorlage sollte wie folgt aussehen:

{ "name" : "Bella", "body" : {"Price":"249.99","Age":"6"} }

Diese Zuweisungsvorlage entfernt den Abfragezeichenfolgenparameter type=dog.

Wenn die JSON-Eingabe Zeichen enthält, die nicht durch Escape-Zeichen geschützt sind, können diese von JavaScript nicht eingelesen werden. API Gateway gibt dann möglicherweise eine 400-Antwort zurück. Eine Anwendung von $util.escapeJavaScript($input.json('$')) stellt sicher, dass die JSON-Eingabe ordnungsgemäß eingelesen werden kann.

Im vorangegangenen Beispiel hätte eine Anwendung von $util.escapeJavaScript($input.json('$')) folgendes Ergebnis:

{ "name" : "$input.params('name')", "body" : "$util.escapeJavaScript($input.json('$'))" }

In diesem Fall sollte die Ausgabe dieser Zuweisungsvorlage wie folgt aussehen:

{ "name" : "Bella", "body": {"Price":"249.99","Age":"6"} }

Beispiel 4: Verwenden eines JSONPath-Ausdrucks, um einen Unterabschnitt einer Methodenanforderung an den Integrationsendpunkt zu übergeben

Im folgenden Beispiel werden die JSONPath-Ausdrücke verwendet, um nur die Eingabeparameter name und Age aus dem Body der Anfrage abzurufen:

{ "name" : "$input.params('name')", "body" : $input.json('$.Age') }

Für eine Anforderung, die die Parameter der Abfragezeichenfolge name=Bella&type=dog und den folgenden Text enthält:

{ "Price" : "249.99", "Age": "6" }

Die Ausgabe dieser Zuweisungsvorlage sollte wie folgt aussehen:

{ "name" : "Bella", "body" : "6" }

Diese Zuweisungsvorlage entfernt den Abfragezeichenfolgenparameter type=dog sowie das Feld Price aus dem Body.

Wenn die Nutzlast einer Methodenanforderung Zeichen enthält, die nicht durch Escape-Zeichen geschützt sind, können diese von JavaScript nicht eingelesen werden. In diesem Fall gibt API Gateway möglicherweise eine 400-Antwort zurück. Eine Anwendung von $util.escapeJavaScript() stellt sicher, dass die JSON-Eingabe ordnungsgemäß eingelesen werden kann.

Im vorangegangenen Beispiel hätte eine Anwendung von $util.escapeJavaScript($input.json('$.Age')) folgendes Ergebnis:

{ "name" : "$input.params('name')", "body" : "$util.escapeJavaScript($input.json('$.Age'))" }

In diesem Fall sollte die Ausgabe dieser Zuweisungsvorlage wie folgt aussehen:

{ "name" : "Bella", "body": "\"6\"" }

Beispiel 5: Verwenden eines JSONPath-Ausdrucks, um Informationen über eine Methodenanforderung an den Integrationsendpunkt zu übergeben

Im folgenden Beispiel werden $input.params(), $input.path() und $input.json() verwendet, um Informationen über eine Methodenanforderung an den Integrationsendpunkt zu senden. Diese Zuweisungsvorlage nutzt die Methode size(), um die Anzahl der Elemente in einer Liste bereitzustellen.

{ "id" : "$input.params('id')", "count" : "$input.path('$.things').size()", "things" : $input.json('$.things') }

Für eine Anforderung, die den Pfadparameter 123 und den folgenden Text enthält:

{ "things": { "1": {}, "2": {}, "3": {} } }

Die Ausgabe dieser Zuweisungsvorlage sollte wie folgt aussehen:

{"id":"123","count":"3","things":{"1":{},"2":{},"3":{}}}

Wenn die Nutzlast einer Methodenanforderung Zeichen enthält, die nicht durch Escape-Zeichen geschützt sind, können diese von JavaScript nicht eingelesen werden. In diesem Fall gibt API Gateway möglicherweise eine 400-Antwort zurück. Eine Anwendung von $util.escapeJavaScript() stellt sicher, dass die JSON-Eingabe ordnungsgemäß eingelesen werden kann.

Im vorangegangenen Beispiel hätte eine Anwendung von $util.escapeJavaScript($input.json('$.things')) folgendes Ergebnis:

{ "id" : "$input.params('id')", "count" : "$input.path('$.things').size()", "things" : "$util.escapeJavaScript($input.json('$.things'))" }

Die Ausgabe dieser Zuweisungsvorlage sollte wie folgt aussehen:

{"id":"123","count":"3","things":"{\"1\":{},\"2\":{},\"3\":{}}"}