Exemplos de substituição de parâmetros de solicitação e resposta e códigos de status de uma API
Os exemplos a seguir mostram como criar e testar uma substituição de modelo de mapeamento. Os dois primeiros exemplos usam o AWS Management Console e a API de exemplo como ponto de partida. Os dois últimos exemplos usam a AWS CLI e o SDK para JavaScript.
Substituir código de status de resposta de uma API usando o AWS Management Console
Para recuperar um animal de estimação usando a API de exemplo PetStore, use a solicitação de método de API de GET
/pets/{petId}
, em que {petId}
, é um parâmetro de caminho que pode obter um número em tempo de execução.
Neste exemplo, você vai substituir esse código de resposta do método GET
criando um modelo de mapeamento que associa $context.responseOverride.status
a 400
quando é detectada uma condição de erro.
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Em APIs, selecione a API PetStore e, depois, Recursos.
-
Na árvore Recursos, selecione o método
GET
em/{petId}
. -
Selecione a guia Testar. Talvez seja necessário selecionar o botão de seta para a direita para mostrar a guia.
-
Em petId, insira
-1
e, depois, selecione Testar.Nos resultados, você verá dois fatores:
Primeiro, o Corpo da resposta indica um erro fora do intervalo:
{ "errors": [ { "key": "GetPetRequest.petId", "message": "The value is out of range." } ] }
Segundo, a última linha na caixa Log termina com:
Method completed with status: 200
. -
Na guia Resposta de integração, em Padrão - Resposta, selecione Editar.
-
Selecione Modelos de mapeamento.
-
Escolha Add mapping template (Adicionar modelo de mapeamento).
-
Em Tipo de conteúdo, insira
application/json
. -
Em Corpo do modelo, insira o seguinte:
#set($inputRoot = $input.path('$')) $input.json("$") #if($inputRoot.toString().contains("error")) #set($context.responseOverride.status = 400) #end
-
Escolha Salvar.
-
Selecione a guia Testar.
-
Em petId, insira
-1
. -
Nos resultados, Response Body (Corpo da resposta) indica um erro fora do intervalo:
{ "errors": [ { "key": "GetPetRequest.petId", "message": "The value is out of range." } ] }
Entretanto, a última linha na caixa Logs agora termina com:
Method completed with status: 400
.
Substituir parâmetros e cabeçalhos de solicitação de uma API usando o AWS Management Console
Neste exemplo, você vai substituir o código do cabeçalho da solicitação do método GET
criando um modelo de mapeamento que associa $context.requestOverride.header.
a um novo cabeçalho que combina dois outros cabeçalhos.header_name
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Em APIs, escolha a API PetStore.
-
Na árvore Recursos, selecione o método
GET
em/pet
. -
Na guia Solicitação de método, em Configurações de solicitação de método, selecione Editar.
-
Selecione Cabeçalhos de solicitação HTTP e, depois, Adicionar cabeçalho.
-
Em Nome, digite
header1
. -
Selecione Adicionar cabeçalho e, depois, crie um segundo cabeçalho chamado
header2
. -
Escolha Salvar.
-
Na guia Solicitação de integração, em Configurações de solicitação de integração, selecione Editar.
-
Em Passagem do corpo da solicitação, selecione Quando não há modelos definidos (recomendado).
-
Selecione Modelos de mapeamento e, depois, faça o seguinte:
-
Escolha Add mapping template (Adicionar modelo de mapeamento).
-
Em Tipo de conteúdo, insira
application/json
. -
Em Corpo do modelo, insira o seguinte:
#set($header1Override = "foo") #set($header3Value = "$input.params('header1')$input.params('header2')") $input.json("$") #set($context.requestOverride.header.header3 = $header3Value) #set($context.requestOverride.header.header1 = $header1Override) #set($context.requestOverride.header.multivalueheader=[$header1Override, $header3Value])
-
-
Escolha Salvar.
-
Selecione a guia Testar.
-
Em Headers (Cabeçalhos) para {pets}, copie o seguinte código:
header1:header1Val header2:header2Val
-
Escolha Test (Testar).
No Log, você deve ver uma entrada com este texto:
Endpoint request headers: {header3=header1Valheader2Val, header2=header2Val, header1=foo, x-amzn-apigateway-api-id=
<api-id>
, Accept=application/json, multivalueheader=foo,header1Valheader2Val}
Substituir parâmetros e cabeçalhos de solicitação de uma API usando o AWS CLI
O seguinte exemplo de CLI mostra como usar o comando put-integration
para substituir um código de resposta:
aws apigateway put-integration --rest-api-id
<API_ID>
--resource-id<PATH_TO_RESOURCE_ID>
--http-method<METHOD>
--type<INTEGRATION_TYPE>
--request-templates<REQUEST_TEMPLATE_MAP>
onde <REQUEST_TEMPLATE_MAP>
é um mapa do tipo de conteúdo para uma string do modelo a ser aplicado. A estrutura do mapa é como a seguir:
Content_type1=template_string,Content_type2=template_string
ou, na sintaxe JSON:
{"content_type1": "template_string" ...}
O seguinte exemplo mostra como usar o comando put-integration-response
para substituir o código de resposta de uma API:
aws apigateway put-integration-response --rest-api-id
<API_ID>
--resource-id<PATH_TO_RESOURCE_ID>
--http-method<METHOD>
--status-code<STATUS_CODE>
--response-templates<RESPONSE_TEMPLATE_MAP>
onde <RESPONSE_TEMPLATE_MAP>
tem o mesmo formato que <REQUEST_TEMPLATE_MAP>
acima.
Substituir parâmetros e cabeçalhos de solicitação de uma API usando o SDK para JavaScript
O seguinte exemplo de mostra como usar o comando put-integration
para substituir um código de resposta:
Solicitação:
var params = { httpMethod: 'STRING_VALUE', /* required */ resourceId: 'STRING_VALUE', /* required */ restApiId: 'STRING_VALUE', /* required */ type: HTTP | AWS | MOCK | HTTP_PROXY | AWS_PROXY, /* required */ requestTemplates: { '
<Content_type>
': 'TEMPLATE_STRING', /* '<String>
': ... */ }, }; apigateway.putIntegration(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response });
Resposta:
var params = { httpMethod: 'STRING_VALUE', /* required */ resourceId: 'STRING_VALUE', /* required */ restApiId: 'STRING_VALUE', /* required */ statusCode: 'STRING_VALUE', /* required */ responseTemplates: { '<Content_type>': 'TEMPLATE_STRING', /* '<String>': ... */ }, }; apigateway.putIntegrationResponse(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response });