

# Desenvolver APIs REST no API Gateway
<a name="rest-api-develop"></a>

 No Amazon API Gateway, você cria uma API REST como uma coleção de entidades programáveis conhecida como [recursos](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) do API Gateway. Por exemplo, você usa um recurso [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html) para representar uma API que pode conter uma coleção de entidades [Recurso](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html). 

Cada entidade `Resource` pode ter um ou mais recursos [Method](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html). Um `Method` é uma solicitação recebida enviada pelo cliente e pode conter os seguintes parâmetros de solicitação: um parâmetro de caminho, um cabeçalho ou um parâmetro de string de consulta. Além disso, dependendo do método HTTP, a solicitação pode conter um corpo. O método define como o cliente acessa o `Resource` exposto. Para integrar o `Method` a um endpoint de back-end, também conhecido como endpoint de integração, crie um recurso [Integration](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html). Isso encaminha a solicitação recebida para um URI de endpoint de integração especificado. Se necessário, é possível transformar os parâmetros ou o corpo da solicitação para atender aos requisitos de backend, ou criar uma integração de proxy, na qual o API Gateway envia a solicitação inteira em um formato padronizado ao URI do endpoint de integração e, depois, envia diretamente a resposta ao cliente.

Para as respostas, é possível criar um recurso [MethodResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html) para representar uma resposta recebida pelo cliente e criar um recurso [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html) para representar a resposta retornada pelo backend. Use uma resposta de integração para transformar os dados da resposta do backend antes de retornar os dados ao cliente ou transmitir a resposta do backend da forma em que se encontra para o cliente.

## Exemplo de recurso para uma API REST
<a name="rest-api-develop-example"></a>

O diagrama a seguir mostra como o API Gateway implementa esse modelo de solicitação/resposta para uma integração de proxy HTTP e uma integração HTTP sem proxy para o recurso `GET /pets`. O cliente envia o cabeçalho `x-version:beta` ao API Gateway e o API Gateway envia o código de status `204` ao cliente.

Na integração sem proxy, o API Gateway realiza transformações de dados para atender aos requisitos de backend, modificando a solicitação e a resposta da integração. Em uma integração sem proxy, é possível acessar o corpo na solicitação do método, mas ele é transformado na solicitação de integração. Quando o endpoint de integração retorna uma resposta com um corpo, você a acessa e a transforma na resposta de integração. Não é possível modificar o corpo na resposta do método.

Na integração de proxy, o endpoint de integração modifica a solicitação e a resposta. O API Gateway não modifica a solicitação nem a resposta de integração e envia a solicitação recebida ao backend no estado em que se encontra.

Independentemente do tipo de integração, o cliente enviou uma solicitação ao API Gateway, que a respondeu de forma síncrona.

------
#### [ Non-proxy integration ]

![Diagrama da integração sem proxy do API Gateway](http://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/images/develop-non-proxy.png)


------
#### [ Proxy integration ]

![Diagrama de integração com proxy do API Gateway](http://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/images/develop-proxy.png)


------

Os exemplos de logs de execução a seguir mostram o que o API Gateway registraria no exemplo anterior. Para garantir maior clareza, alguns valores e logs iniciais foram removidos:

------
#### [ Non-proxy integration ]

```
Wed Feb 12 23:56:44 UTC 2025 : Starting execution for request: abcd-1234-5678
Wed Feb 12 23:56:44 UTC 2025 : HTTP Method: GET, Resource Path: /pets
Wed Feb 12 23:56:44 UTC 2025 : Method request path: {}
Wed Feb 12 23:56:44 UTC 2025 : Method request query string: {}
Wed Feb 12 23:56:44 UTC 2025 : Method request headers: {x-version=beta}
Wed Feb 12 23:56:44 UTC 2025 : Method request body before transformations: 
Wed Feb 12 23:56:44 UTC 2025 : Endpoint request URI: http://petstore-demo-endpoint.execute-api.com/petstore/pets
Wed Feb 12 23:56:44 UTC 2025 : Endpoint request headers: {app-version=beta}
Wed Feb 12 23:56:44 UTC 2025 : Endpoint request body after transformations: 
Wed Feb 12 23:56:44 UTC 2025 : Sending request to http://petstore-demo-endpoint.execute-api.com/petstore/pets
Wed Feb 12 23:56:45 UTC 2025 : Received response. Status: 200, Integration latency: 123 ms
Wed Feb 12 23:56:45 UTC 2025 : Endpoint response headers: {Date=Wed, 12 Feb 2025 23:56:45 GMT}
Wed Feb 12 23:56:45 UTC 2025 : Endpoint response body before transformations:
Wed Feb 12 23:56:45 UTC 2025 : Method response body after transformations: (null)
Wed Feb 12 23:56:45 UTC 2025 : Method response headers: {X-Amzn-Trace-Id=Root=1-abcd-12345}
Wed Feb 12 23:56:45 UTC 2025 : Successfully completed execution
Wed Feb 12 23:56:45 UTC 2025 : Method completed with status: 204
```

------
#### [ Proxy integration ]

```
Wed Feb 12 23:59:42 UTC 2025 : Starting execution for request: abcd-1234-5678
Wed Feb 12 23:59:42 UTC 2025 : HTTP Method: GET, Resource Path: /pets
Wed Feb 12 23:59:42 UTC 2025 : Method request path: {}
Wed Feb 12 23:59:42 UTC 2025 : Method request query string: {}
Wed Feb 12 23:59:42 UTC 2025 : Method request headers: {x-version=beta}
Wed Feb 12 23:59:42 UTC 2025 : Method request body before transformations: 
Wed Feb 12 23:59:42 UTC 2025 : Endpoint request URI: http://petstore-demo-endpoint.execute-api.com/petstore/pets
Wed Feb 12 23:59:42 UTC 2025 : Endpoint request headers: { x-version=beta}
Wed Feb 12 23:59:42 UTC 2025 : Endpoint request body after transformations: 
Wed Feb 12 23:59:42 UTC 2025 : Sending request to http://petstore-demo-endpoint.execute-api.com/petstore/pets
Wed Feb 12 23:59:43 UTC 2025 : Received response. Status: 204, Integration latency: 123 ms
Wed Feb 12 23:59:43 UTC 2025 : Endpoint response headers: {Date=Wed, 12 Feb 2025 23:59:43 GMT}
Wed Feb 12 23:59:43 UTC 2025 : Endpoint response body before transformations: 
Wed Feb 12 23:59:43 UTC 2025 : Method response body after transformations:
Wed Feb 12 23:59:43 UTC 2025 : Method response headers: {Date=Wed, 12 Feb 2025 23:59:43 GMT}
Wed Feb 12 23:59:43 UTC 2025 : Successfully completed execution
Wed Feb 12 23:59:43 UTC 2025 : Method completed with status: 204
```

------

Para importar uma API semelhante e testá-la no Console de gerenciamento da AWS, consulte o [exemplo de API](api-gateway-create-api-from-example.md).

## Recursos adicionais da API REST para desenvolvimento
<a name="rest-api-develop-details"></a>

O API Gateway é compatível com recursos adicionais para o desenvolvimento da API REST. Por exemplo, para ajudar os clientes a compreenderem sua API, você pode fornecer a documentação da API. Para fazer isso, adicione um recurso [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html) para uma entidade de API compatível.

Para controlar como os clientes chamam uma API, use [permissões do IAM](permissions.md), um [autorizador de Lambda](apigateway-use-lambda-authorizer.md) ou um [grupo de usuários Amazon Cognito](apigateway-integrate-with-cognito.md). Para medir o uso da sua API, configure [planos de uso](api-gateway-api-usage-plans.md) para limitar as solicitações de API. Você pode habilitá-los ao criar ou atualizar a API.

O diagrama a seguir mostra os recursos disponíveis para o desenvolvimento da API REST e onde, no modelo de solicitação/resposta, esses recursos são configurados.

![Diagrama dos recursos do API Gateway](http://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/images/develop-features.png)


Para conferir uma introdução sobre como criar uma API, consulte [Tutorial: Crie uma API REST com uma integração de proxy do Lambda](api-gateway-create-api-as-simple-proxy-for-lambda.md). Para obter mais informações sobre os recursos do API Gateway que você pode usar ao desenvolver uma API REST, consulte os tópicos a seguir. Esses tópicos contêm informações conceituais e procedimentos que você pode executar usando o console do API Gateway, a API REST do API Gateway, a AWS CLI ou um dos AWS SDKs.

**Topics**
+ [Exemplo de recurso para uma API REST](#rest-api-develop-example)
+ [Recursos adicionais da API REST para desenvolvimento](#rest-api-develop-details)
+ [Tipos de endpoint da API para APIs REST no API Gateway](api-gateway-api-endpoint-types.md)
+ [Políticas de segurança para APIs REST no API Gateway](apigateway-security-policies.md)
+ [Tipos de endereço IP para APIs REST no API Gateway](api-gateway-ip-address-type.md)
+ [Métodos para APIs REST no API Gateway](how-to-method-settings.md)
+ [Controlar e gerenciar o acesso a APIs REST no API Gateway](apigateway-control-access-to-api.md)
+ [Integrações para APIs REST no API Gateway](how-to-integration-settings.md)
+ [Solicitar validação para APIs REST no API Gateway](api-gateway-method-request-validation.md)
+ [Transformações de dados para APIs REST no API Gateway](rest-api-data-transformations.md)
+ [Respostas do gateway para APIs REST no API Gateway](api-gateway-gatewayResponse-definition.md)
+ [CORS para APIs REST no API Gateway](how-to-cors.md)
+ [Tipos de mídia binários para APIs REST no API Gateway](api-gateway-payload-encodings.md)
+ [Invocar APIs REST no API Gateway](how-to-call-api.md)
+ [Desenvolver APIs REST usando OpenAPI no API Gateway](api-gateway-import-api.md)