

# API de calculadora simples no API Gateway
<a name="simple-calc-lambda-api"></a>

Nossa API de calculadora simples expõe três métodos (GET, POST, GET) para invocar o [Função de calculadora simples do Lambda](simple-calc-nodejs-lambda-function.md). Uma representação gráfica dessa API é mostrada da seguinte forma:

![\[API de calculadora simples para SDK gerado\]](http://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/images/simple-calc-api-console-hierarchy-new-console.png)


Esses três métodos mostram maneiras diferentes de fornecer a entrada para a função do Lambda de backend para executar a mesma operação: 
+ O método `GET /?a=...&b=...&op=...` usa os parâmetros de consulta para especificar a entrada.
+ O método `POST /` usa uma carga JSON de `{"a":"Number", "b":"Number", "op":"string"}` para especificar a entrada.
+ O método `GET /{a}/{b}/{op}` usa os parâmetros de caminho para especificar a entrada.

Se não estiver definido, o API Gateway gerará o nome do método de SDK correspondente, combinando as partes de método e caminho HTTP. A parte do caminho raiz (`/`) é referida como `Api Root`. Por exemplo, o nome do método de SDK Java padrão para o método de API de `GET /?a=...&b=...&op=...` é `getABOp`, o nome do método de SDK padrão para `POST /` é `postApiRoot`, e o nome do método de SDK padrão para `GET /{a}/{b}/{op}` é `getABOp`. SDKs individuais podem personalizar a convenção. Consulte a documentação na origem do SDK gerado para obter os nomes de método específicos do SDK. 

Você pode, e deve, substituir os nomes de método de SDK padrão, especificando a propriedade [operationName](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#operationName) em cada método de API. Você pode fazer isso ao [criar o método de API](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html) ou ao [atualizar o método de API](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html) usando a API REST do API Gateway. Na definição do Swagger da API, você pode definir o `operationId` para obter o mesmo resultado.

Antes de mostrar como chamar esses métodos usando um SDK gerado pelo API Gateway para essa API, vamos lembrar brevemente como configurá-los. Para obter instruções detalhadas, consulte [Desenvolver APIs REST no API Gateway](rest-api-develop.md). Se você ainda é iniciante com o API Gateway, consulte [Escolher um tutorial de integração do AWS Lambda](getting-started-with-lambda-integration.md) primeiro.

## Criar modelos para entrada e saída
<a name="simple-calc-lambda-api-create-models-for-input-and-output"></a>

Para especificar uma entrada de tipo forte no SDK, criamos um modelo `Input` para a API: Para descrever o tipo de dados do corpo de resposta, criamos um modelo `Output` e um `Result`.

**Como criar modelos para entrada, saída e resultado**

1. No painel de navegação principal, selecione **Modelos**.

1. Escolha **Criar modelo**.

1. Em **Nome**, digite **input**.

1. Em **Tipo de conteúdo**, insira **application/json**. 

   Se nenhum tipo de conteúdo correspondente for encontrado, a validação da solicitação não será executada. Para usar o mesmo modelo, independentemente do tipo de conteúdo, insira  **\$1default**.

1. Em **Esquema do modelo**, insira o seguinte modelo:

   ```
   {
       "$schema" : "$schema": "http://json-schema.org/draft-04/schema#",
       "type":"object",
       "properties":{
           "a":{"type":"number"},
           "b":{"type":"number"},
           "op":{"type":"string"}
       },
       "title":"Input"
   }
   ```

1. Escolha **Criar modelo**.

1. Repita as etapas a seguir para criar um modelo `Output` e um `Result`.

   Para o modelo `Output`, insira o seguinte para o **Esquema do modelo**:

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type": "object",
       "properties": {
           "c": {"type":"number"}
       },
       "title": "Output"
   }
   ```

   Para o modelo `Result`, insira o seguinte para o **Esquema do modelo**. Substitua o ID da API `abc123` pelo o ID de sua API.

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type":"object",
       "properties":{
           "input":{
               "$ref":"https://apigateway.amazonaws.com/restapis/abc123/models/Input"
           },
           "output":{
               "$ref":"https://apigateway.amazonaws.com/restapis/abc123/models/Output"
           }
       },
       "title":"Result"
   }
   ```

## Configurar parâmetros de consulta do método GET /
<a name="simple-calc-lambda-api-set-up-get-method-query-parameters"></a>

Para o método `GET /?a=..&b=..&op=..`, os parâmetros de consulta estão declarados em **Method Request**:

**Como configurar parâmetros de string de consulta GET/URL**

1. Na seção **Solicitação de método** para o método `GET` no recurso de raiz (`/`), selecione **Editar**.

1. Selecione **Parâmetros de string de consulta de URL** e faça o seguinte:

   1. Escolha **Add query string** (Adicionar string de consulta).

   1. Em **Nome**, digite **a**.

   1. Mantenha **Obrigatório** e **Armazenamento em cache** desativados. 

   1. Mantenha **Armazenamento em cache** desativado.

   Repita as mesmas etapas e crie uma string de consulta chamada **b** e uma string de consulta chamada **op**.

1. Escolha **Salvar**.

## Configurar o modelo de dados para a carga como entrada para o backend
<a name="simple-calc-lambda-api-set-up-post-method-body-data-type"></a>

Para o método `POST /`, criamos o modelo `Input` e o adicionamos à solicitação de método para definir a forma dos dados de entrada. 

**Como configurar o modelo de dados para a carga útil como entrada para o back-end**

1. Na seção **Solicitação de método** para o método `POST` no recurso de raiz (`/`), selecione **Editar**.

1. Selecione **Corpo da solicitação**.

1. Escolha **Add model** (Adicionar modelo).

1. Em **Tipo de conteúdo**, insira **application/json**.

1. Em **Modelo**, selecione **Entrada**.

1. Escolha **Salvar**.

Com esse modelo, os clientes da sua API podem chamar o SDK para especificar a entrada, instanciando um objeto `Input`. Sem esse modelo, seus clientes precisariam criar o objeto de dicionário para representar a entrada JSON para a função do Lambda. 

## Configurar o modelo de dados para a saída do resultado do backend
<a name="simple-calc-lambda-api-set-up-all-methods-result-data-type"></a>

Para todos os três métodos, criamos o modelo `Result` e o adicionamos ao `Method Response` do método para definir a forma da saída retornada pela função do Lambda.

**Como configurar o modelo de dados para a saída do resultado do back-end**

1. Selecione o recurso **/\$1a\$1/\$1b\$1/\$1op\$1** e o método **GET**.

1. Na guia **Resposta de método**, em **Resposta 200**, selecione **Editar**.

1. Em **Corpo da resposta**, selecione **Adicionar modelo**.

1. Em **Tipo de conteúdo**, insira **application/json**.

1. Em **Modelo**, selecione **Resultado**.

1. Escolha **Salvar**.

Com esse modelo, os clientes da sua API podem analisar uma saída bem-sucedida, lendo as propriedades de um objeto `Result`. Sem esse modelo, os clientes precisariam criar o objeto de dicionário para representar a saída JSON. 