Exemplos de uso de variáveis para mapear transformações de modelos para o API Gateway - Amazon API Gateway

Exemplos de uso de variáveis para mapear transformações de modelos para o API Gateway

Os exemplos a seguir mostram como usar as variáveis $context, input e util em modelos de mapeamento. Você pode usar uma integração simulada ou uma integração sem proxy do Lambda que retorna o evento de entrada ao API Gateway. Consulte uma lista de variáveis compatíveis com transformadores de dados em Variáveis para transformações de dados para o API Gateway.

Exemplo 1: passar várias variáveis $context ao endpoint de integração

O exemplo a seguir mostra um modelo de mapeamento que mapeia variáveis $context de entrada para variáveis de back-end com nomes um pouco diferentes em uma carga de solicitação de integração:

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

A saída deste modelo de mapeamento deve ser semelhante ao seguinte:

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

Uma das variáveis é uma chave de API. Este exemplo pressupõe que o método exige a chave de API.

Exemplo 2: passar todos os parâmetros de solicitação ao endpoint de integração por meio de uma carga útil JSON:

O exemplo a seguir passa todos os parâmetros de solicitação, incluindo os parâmetros path, querystring e header, ao endpoint de integração por meio de uma carga útil 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 uma solicitação tiver estes parâmetros de entrada:

  • Um parâmetro de caminho chamado myparam

  • Parâmetros de string de consulta querystring1=value1,value2

  • Cabeçalhos "header1" : "value1".

A saída deste modelo de mapeamento deve ser semelhante ao seguinte:

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

Exemplo 3: passar uma subseção de uma solicitação de método para o endpoint de integração

O exemplo a seguir usa o parâmetro de entrada name para recuperar somente o parâmetro name e o parâmetro de entrada input.json('$') para recuperar todo o corpo da solicitação do método:

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

Para uma solicitação que inclua os parâmetros de string de consulta name=Bella&type=dog e o seguinte corpo:

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

A saída deste modelo de mapeamento deve ser semelhante ao seguinte:

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

Esse modelo de mapeamento remove o parâmetro da string de consulta type=dog.

Se a entrada JSON contiver caracteres sem escape que não podem ser analisados pelo JavaScript, o API Gateway pode retornar uma resposta 400. Aplique $util.escapeJavaScript($input.json('$')) para garantir que a entrada JSON possa ser analisada corretamente.

O exemplo anterior com $util.escapeJavaScript($input.json('$')) aplicado é o seguinte:

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

Neste caso, a saída deste modelo de mapeamento deve ser semelhante ao seguinte:

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

Exemplo 4: usar a expressão JSONPath para passar uma subseção de uma solicitação de método ao endpoint de integração

O exemplo a seguir usa expressões JSONPath para recuperar somente o parâmetro de entrada name e o Age do corpo da solicitação:

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

Para uma solicitação que inclua os parâmetros de string de consulta name=Bella&type=dog e o seguinte corpo:

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

A saída deste modelo de mapeamento deve ser semelhante ao seguinte:

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

Esse modelo de mapeamento remove o parâmetro da string de consulta type=dog e o campo Price do corpo.

Se uma carga útil de solicitação de método contiver caracteres sem escape que não podem ser analisados por JavaScript, o API Gateway pode retornar uma resposta 400. Aplique $util.escapeJavaScript() para garantir que a entrada JSON possa ser analisada corretamente.

O exemplo anterior com $util.escapeJavaScript($input.json('$.Age')) aplicado é o seguinte:

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

Neste caso, a saída deste modelo de mapeamento deve ser semelhante ao seguinte:

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

Exemplo 5: usar uma expressão JSONPath para passar informações sobre uma solicitação de método ao endpoint de integração

O exemplo a seguir usa $input.params(), $input.path() e $input.json() para enviar informações sobre uma solicitação de método ao endpoint de integração. Esse modelo de mapeamento usa o método size() para fornecer o número de elementos em uma lista.

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

Para uma solicitação que inclui o parâmetro de caminho 123 e o seguinte corpo:

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

A saída deste modelo de mapeamento deve ser semelhante ao seguinte:

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

Se uma carga útil de solicitação de método contiver caracteres sem escape que não podem ser analisados por JavaScript, o API Gateway pode retornar uma resposta 400. Aplique $util.escapeJavaScript() para garantir que a entrada JSON possa ser analisada corretamente.

O exemplo anterior com $util.escapeJavaScript($input.json('$.things')) aplicado é o seguinte:

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

A saída deste modelo de mapeamento deve ser semelhante ao seguinte:

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