

# Configurar uma resposta de gateway para uma API REST usando o console do API Gateway
<a name="set-up-gateway-response-using-the-console"></a>

O exemplo a seguir mostra como configurar uma resposta de gateway para uma API REST usando o console do API Gateway 

**Para personalizar uma resposta de gateway usando o console do API Gateway**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha uma API REST.

1. No painel de navegação principal, selecione **Respostas do gateway**.

1. Escolha um tipo de resposta e selecione **Editar**. Nesta demonstração, usamos **Token de autenticação ausente** como exemplo. 

1. Você pode alterar o **Código de status** gerado pelo API Gateway para retornar um código de status diferente que atenda aos requisitos da API. Neste exemplo, a personalização altera o código de status de padrão (`403`) para `404` porque esta mensagem de erro ocorre quando um cliente chama um recurso inválido ou incompatível que pode ser considerado como não encontrado.

1. Para retornar os cabeçalhos personalizados, selecione **Adicionar cabeçalho de resposta** em **Cabeçalhos de resposta**. Para fins de ilustração, adicionamos os seguintes cabeçalhos personalizados: 

   ```
   Access-Control-Allow-Origin:'a.b.c'
   x-request-id:method.request.header.x-amzn-RequestId
   x-request-path:method.request.path.petId
   x-request-query:method.request.querystring.q
   ```

   Nos mapeamentos de cabeçalho anteriores, um nome de domínio estático (`'a.b.c'`) é mapeado para o cabeçalho `Allow-Control-Allow-Origin`, para permitir acesso do CORS à API, o cabeçalho da solicitação de entrada de `x-amzn-RequestId` é mapeado para `request-id` na resposta, a variável de caminho `petId` da solicitação de entrada é mapeada para o cabeçalho `request-path` na resposta e o parâmetro de consulta `q` da solicitação original é mapeado para o cabeçalho `request-query` da resposta.

1. Em **Modelos de resposta**, mantenha `application/json` para **Tipo de conteúdo** e insira o seguinte modelo de mapeamento de corpo no editor do **Corpo do modelo**:

   ```
   {
        "message":"$context.error.messageString",
        "type": "$context.error.responseType",
        "statusCode": "'404'",
        "stage": "$context.stage",
        "resourcePath": "$context.resourcePath",
        "stageVariables.a": "$stageVariables.a"
   }
   ```

   Este exemplo mostra como mapear as propriedades `$context` e `$stageVariables` para propriedades do corpo de resposta de gateway.

1. Escolha **Salvar alterações**.

1. Implantar a API em um estágio novo ou existente.

Teste a resposta do gateway chamando o seguinte comando CURL, pressupondo que o URL de invocação do método da API correspondente seja `https://{{o81lxisefl}}.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}`:

```
curl -v -H 'x-amzn-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1
```

Como o parâmetro de string de consulta extra `q=1` não é compatível com a API, um erro é retornado da resposta do gateway especificado. Você receberá uma resposta do gateway semelhante à seguinte:

```
> GET /custErr/pets/5?q=1 HTTP/1.1
Host: o81lxisefl.execute-api.us-east-1.amazonaws.com
User-Agent: curl/7.51.0
Accept: */*
 
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 334
Connection: keep-alive
Date: Tue, 02 May 2017 03:15:47 GMT
x-amzn-RequestId: 123344566
Access-Control-Allow-Origin: a.b.c
x-amzn-ErrorType: MissingAuthenticationTokenException
header-1: static
x-request-query: 1
x-request-path: 5
X-Cache: Error from cloudfront
Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront)
X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA==
 
{
     "message":"Missing Authentication Token",
     "type": MISSING_AUTHENTICATION_TOKEN,
     "statusCode": '404',
     "stage": custErr,
     "resourcePath": /pets/{petId},
     "stageVariables.a": a
}
```

O exemplo anterior pressupõe que o backend da API seja [Pet Store](http://petstore-demo-endpoint.execute-api.com/petstore/pets) e que a API possua uma variável de estágio, `a`, definida.