Api Gateway HTTP API
Tags: aws, api
Published: 2022-02-28 16:18:24

Generalmente cuando vamos a crear un nuevo api solemos utilizar API REST (con funciones lambda en AWS).Sin embargo otro tipo de API que nos permite crear AWS es HTTP API que tiene algunas diferencias con las API REST (ver referencias).

Los  API HTTP los podemos usar para unificar diferentes servicios que hayamos creado o de terceros con el objetivo de unificar el punto de acceso. Podemos utilizar endpoints de LoadBalancer, servicios expuestos por diferentes contenedores, hacer referencia a apis propios o de terceros.

En este ejemplo vamos a crear un HTTP API para que utilice dos api (free) creadas por terceros. La primera retorna los datos horarios de un país, la otra api nos da sugerencia de actividades a realizar.

1.Buscamos en servicio API Gateway y en la pagina de inicio seleccionamos build de la caja HTTP API.

![Asign name api]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/api%20gateway%20http%20api.png)

2.En la siguiente vamos a asignar un nombre a nuestra api y asignar las integraciones. Las integraciones son los api con los cuales queremos que nuestra api interactúe, en este caso son los servicios de terceros que queremos unificar bajo nuestra api.

[worldtimeapi](https://worldtimeapi.org/api/timezone)
[boredapi](https://www.boredapi.com/api/activity)



3.Asignamos el nombre a nuestra API.

![Api Name]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/ApiName.png)

4.Agregamos nuestras integraciones que para este caso son HTTP. 

![Api Name]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/Add%20Integration%20Api.png)

Seleccionamos el tipo de Integración HTTP

![Tipo de integracion]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/Select%20Type%20Integration.png)

Seleccionamos el tipo de metodo y agregamos el END POINT

![Integracion 1]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/Add%20Integration%201.png)

Realizamos los mismos pasos para el segundo end point

![Integracion 1]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/Add%20integration%202.png)

5.Al dar siguiente veremos una pantalla como la siguiente, donde podemos definir las rutas de nuestros servicios asociados a las integraciones que acabamos de crear.

![Routes]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/api%20routes.png)

6.En el siguiente paso vamos a definir el nombre para nuestro stage y vamos a definir si queremos que al realizar un nuevo cambio en las integraciones o rutas se despliegue automáticamente y  los cambios se vean reflejados de maneara "inmediata".

![stage]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/api%20stage.png)

7.Al dar siguiente podemos revisar que todas las configuraciones realizadas sean correctas y damos click en crear.

![review]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/api%20review.png)

8.Al crear nuestro stage vamos a ver en la siguiente pantalla la ruta principal donde vamos a poder consultar nuestros servicios.

![stage route]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/stage%20route.png)

ahora para acceder a nuestros servicios lo que debemos hacer es concatenar a la ruta principal la ruta de cada uno de los servicios creados.

_rutastage/api/activity_
_rutastage/api/timezone_

Que para mi caso queda de la siguiente forma:

_https://javg0gqvpb.execute-api.us-east-2.amazonaws.com/api/activity_

_https://javg0gqvpb.execute-api.us-east-2.amazonaws.com/api/timezone_

Con esto hemos creado un punto de acceso en común para el consumo de nuestros servicios, facilitando así su consumo e implementado una buena practica de desarrollo para el uso de Microservicios.

![diagram]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/httpapigateway.png)

Me pueden encontrar en

[Camilo Cabrales](https://www.linkedin.com/in/camilo-cabrales-31a0bb53/)

# Referencias
[Diferencias entre REST Y HTTP API](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vs-rest.html)