

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
<a name="api-gateway-mapping-variable-examples"></a>

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](api-gateway-mapping-template-reference.md).

## Esempio 1: passare più variabili `$context` all’endpoint di integrazione
<a name="context-variables-template-example"></a>

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
<a name="input-examples-mapping-templates"></a>

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
<a name="input-example-json-mapping-template"></a>

 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
<a name="input-example-inputs-mapping-template"></a>

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
<a name="input-example-request-and-response"></a>

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\":{}}"}
```