Esempi di utilizzo di variabili per trasformazioni dei modelli di mappatura per Gateway API - Gateway Amazon API

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esempi di utilizzo di variabili per trasformazioni dei modelli di mappatura per Gateway API

L’esempio seguente mostra come utilizzare le variabili $context, input e util nei modelli di mappatura. È possibile utilizzare un’integrazione fittizia o un’integrazione non proxy Lambda che restituisce l’evento di input a Gateway API. Per l’elenco di tutte le variabili supportate per le trasformazioni dei dati, consultare Variabili per le trasformazioni dei dati per Gateway API.

Esempio 1: passare più variabili $context all’endpoint di integrazione

L'esempio seguente mostra un modello di mappatura che mappa variabili $context in ingresso a variabili back-end con nomi leggermente diversi nel payload di una richiesta di integrazione:

{ "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" }

L'output di questo modello di mappatura deve essere analogo al seguente:

{ 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' }

Una delle variabili è una chiave API. L'esempio presuppone che il metodo richieda una chiave API.

Esempio 2: passare tutti i parametri della richiesta all’endpoint di integrazione tramite un payload JSON

L’esempio seguente passa tutti i parametri della richiesta, inclusi path, querystring e header, all’endpoint di integrazione tramite un payload JSON:

#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 } }

Se una richiesta ha i seguenti parametri di input:

  • Un parametro di percorso denominato myparam

  • Parametri della stringa di query querystring1=value1,value2

  • Intestazioni "header1" : "value1".

L'output di questo modello di mappatura deve essere analogo al seguente:

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

Esempio 3: passare una sezione secondaria di una richiesta di metodo all’endpoint di integrazione

L’esempio seguente utilizza il parametro di input name per recuperare solo il parametro name e il parametro di input input.json('$') per recuperare l’intero corpo della richiesta di metodo:

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

Per una richiesta che include i parametri della stringa di query name=Bella&type=dog e il corpo seguente:

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

L'output di questo modello di mappatura deve essere analogo al seguente:

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

Questo modello di mappatura rimuove il parametro della stringa di query type=dog.

Se l'input JSON contiene caratteri senza escape che non possono essere analizzati, API JavaScript Gateway potrebbe restituire una risposta 400. Applica $util.escapeJavaScript($input.json('$')) per assicurare che l'input JSON possa essere analizzato correttamente.

L'esempio precedente con $util.escapeJavaScript($input.json('$')) applicato risulta come segue:

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

In questo caso, l'output di questo modello di mappatura deve essere analogo al seguente:

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

Esempio 4: usa l' JSONPath espressione per passare una sottosezione di una richiesta di metodo all'endpoint di integrazione

L'esempio seguente utilizza le JSONPath espressioni per recuperare solo il parametro di input name e il testo Age dal corpo della richiesta:

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

Per una richiesta che include i parametri della stringa di query name=Bella&type=dog e il corpo seguente:

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

L'output di questo modello di mappatura deve essere analogo al seguente:

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

Questo modello di mappatura rimuove il parametro della stringa di query type=dog e il campo Price dal corpo.

Se il payload di una richiesta di metodo contiene caratteri senza escape che non possono essere analizzati, API JavaScript Gateway potrebbe restituire una risposta. 400 Applica $util.escapeJavaScript() per assicurare che l'input JSON possa essere analizzato correttamente.

L'esempio precedente con $util.escapeJavaScript($input.json('$.Age')) applicato risulta come segue:

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

In questo caso, l'output di questo modello di mappatura deve essere analogo al seguente:

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

Esempio 5: utilizzare un' JSONPath espressione per passare informazioni su una richiesta di metodo all'endpoint di integrazione

L’esempio seguente utilizza $input.params(), $input.path() e $input.json() per inviare informazioni su una richiesta di metodo all’endpoint di integrazione. Questo modello di mappatura utilizza il metodo size() per fornire il numero di elementi di un elenco.

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

Per una richiesta che include il parametro di percorso 123 e il corpo seguente:

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

L'output di questo modello di mappatura deve essere analogo al seguente:

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

Se il payload di una richiesta di metodo contiene caratteri senza escape che non possono essere analizzati, API JavaScript Gateway potrebbe restituire una risposta. 400 Applica $util.escapeJavaScript() per assicurare che l'input JSON possa essere analizzato correttamente.

L'esempio precedente con $util.escapeJavaScript($input.json('$.things')) applicato risulta come segue:

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

L'output di questo modello di mappatura deve essere analogo al seguente:

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