

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

Nuestra API de calculadora sencilla expone tres métodos (GET, POST, GET) para invocar [Función de Lambda de calculadora sencilla](simple-calc-nodejs-lambda-function.md). A continuación, se muestra una representación gráfica de esta API:

![\[API de calculadora sencilla del SDK generado\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/simple-calc-api-console-hierarchy-new-console.png)


Estos tres métodos muestran diferentes formas de proporcionar la entrada para la función de Lambda del backend con el objetivo de realizar la misma operación: 
+ El método `GET /?a=...&b=...&op=...` utiliza los parámetros de consulta para especificar la entrada.
+ El método `POST /` utiliza una carga JSON `{"a":"Number", "b":"Number", "op":"string"}` para especificar la entrada.
+ El método `GET /{a}/{b}/{op}` utiliza los parámetros de ruta para especificar la entrada.

Si no se define, API Gateway genera el nombre del método del SDK correspondiente combinando las partes de la ruta de acceso y el método HTTP. La parte de la ruta raíz (`/`) se denomina `Api Root`. Por ejemplo, el nombre predeterminado del SDK de Java para el método `GET /?a=...&b=...&op=...` de la API es `getABOp`, el del método `POST /` es `postApiRoot` y el del método `GET /{a}/{b}/{op}` es `getABOp`. Cada SDK puede personalizar la convención. Consulte en la documentación del código fuente del SDK generado los nombres de los métodos específicos del SDK. 

Puede y debe anular los nombres de método del SDK predeterminados especificando la propiedad [operationName](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#operationName) en cada método de la API. Puede hacerlo al [crear el método de la API](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html) o al [actualizar el método de la API](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html) con la API de REST de API Gateway. En la definición de Swagger de la API, puede definir `operationId` para conseguir el mismo resultado.

Antes de mostrar cómo llamar a estos métodos con un SDK generado por API Gateway para esta API, vamos a recordar brevemente cómo se configuran. Para obtener instrucciones detalladas, consulte [Desarrollo de las API de REST en API Gateway](rest-api-develop.md). Si es nuevo en API Gateway, consulte [Elección de un tutorial de integración de AWS Lambda](getting-started-with-lambda-integration.md) primero.

## Crear modelos para la entrada y la salida
<a name="simple-calc-lambda-api-create-models-for-input-and-output"></a>

Para especificar una entrada con establecimiento inflexible de tipos en el SDK, creamos un modelo `Input` para la API. Para describir el tipo de datos del cuerpo de la respuesta, creamos un modelo `Output` y un modelo `Result`.

**Para crear modelos para la entrada, la salida y el resultado**

1. En el panel de navegación principal, elija **Modelos**.

1. Seleccione **Crear modelo**.

1. En **Nombre**, escriba **input**.

1. En **Tipo de contenido**, ingrese **application/json**. 

   Si no se encuentra ningún tipo de contenido coincidente, no se realiza la validación de la solicitud. Para utilizar el mismo modelo independientemente del tipo de contenido, introduzca  **\$1default**.

1. En **Esquema del modelo**, escriba el siguiente 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. Seleccione **Crear modelo**.

1. Repita los pasos siguientes para crear un modelo `Output` y un modelo `Result`.

   Para el modelo `Output`, escriba lo siguiente en **Esquema del modelo**:

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

   Para el modelo `Result`, escriba lo siguiente en **Esquema del modelo**. Sustituya el ID `abc123` de la API por su ID de 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 del método GET /
<a name="simple-calc-lambda-api-set-up-get-method-query-parameters"></a>

Para el método `GET /?a=..&b=..&op=..`, los parámetros de consulta se declaran en **Method Request (Solicitud de método)**:

**Para configurar los parámetros de la cadena de consulta GET/URL**

1. En la sección **Solicitud de método** del método `GET` del recurso raíz (`/`), seleccione **Editar**.

1. Elija **Parámetros de cadenas de consulta de URL** y haga lo siguiente:

   1. Elija **Añadir cadena de consulta**.

   1. En **Nombre**, escriba **a**.

   1. Mantenga desactivados **Obligatorio** y **Almacenamiento en caché**. 

   1. Mantenga **Almacenamiento en caché** desactivado.

   Repita los mismos pasos y cree una cadena de consulta llamada **b** y una cadena de consulta llamada **op**.

1. Seleccione **Save**.

## Configuración del modelo de datos de la carga como entrada del backend
<a name="simple-calc-lambda-api-set-up-post-method-body-data-type"></a>

Para el método `POST /`, creamos el modelo `Input` y lo añadimos a la solicitud de método para definir la forma de los datos de entrada. 

**Para configurar el modelo de datos de la carga como entrada del backend**

1. En la sección **Solicitud de método** del método `POST` del recurso raíz (`/`), seleccione **Editar**.

1. Elija **Cuerpo de la solicitud**.

1. Elija **Add model (Añadir modelo)**.

1. En **Tipo de contenido**, ingrese **application/json**.

1. En **Modelo**, seleccione **Entrada**.

1. Seleccione **Save**.

Con este modelo, los clientes de la API pueden llamar al SDK para especificar la entrada creando una instancia del objeto `Input`. Sin este modelo, los clientes tendrán que crear un objeto de diccionario que represente la entrada JSON de la función de Lambda. 

## Configuración del modelo de datos de la salida del resultado desde el backend
<a name="simple-calc-lambda-api-set-up-all-methods-result-data-type"></a>

Para los tres métodos, creamos el modelo `Result` y lo agregamos al elemento `Method Response` del método para definir la forma de la salida devuelta por la función de Lambda.

**Para configurar el modelo de datos de la salida del resultado desde el backend**

1. Seleccione el recurso **/\$1a\$1/\$1b\$1/\$1op\$1** y, a continuación, elija el método **GET**.

1. En la pestaña **Respuesta del método**, en **Respuesta 200**, elija **Editar**.

1. En **Cuerpo de la respuesta**, seleccione **Agregar modelo**.

1. En **Tipo de contenido**, ingrese **application/json**.

1. En **Modelo**, seleccione **Resultado**.

1. Seleccione **Save**.

Con este modelo, los clientes de la API pueden analizar la salida leyendo las propiedades de un objeto `Result`. Sin este modelo, los clientes tendrían que crear un objeto de diccionario que representara la salida JSON. 