Cómo construir una API con Lambdas y API Gateway

¿Quiere acceder a su base de datos, controlar su sistema o ejecutar algún código de otro sitio web? Una API puede hacer todo esto por usted y son sorprendentemente fáciles de configurar.

Una API es una URL que se puede realizar GET, PUT,POST , yDELETEsolicitudes para controlar otro servicio. Si crea una usted mismo, puede crear estas API para hacer lo que quiera entre bastidores. Los usos comunes son proporcionar control de base de datos, realizar acciones en API de terceros (API-ception) o controlar otro servicio.

¿Por qué utilizar una API?

Puede preguntar por qué necesitamos una API cuando podemos acceder a la base de datos directamente o ejecutar el código en el sitio web. Hay algunas ventajas masivas para las API sobre la ejecución del código en su sitio web.

Ocultar sus claves de acceso y tokens

Esta es posiblemente la razón más importante para utilizar una API. Si está accediendo a una base de datos, necesitará los detalles de la base de datos, así como el usuario y el token de acceso / datos clave.

Si accede a la base de datos desde el sitio web, tendrá todos estos detalles en el código fuente de su sitio. Esta es una práctica realmente mala, ya que cualquiera puede examinar el control de código fuente y robar sus datos. Esto no suena tan mal, pero ¿qué pasa si estas son sus credenciales de AWS o Google Cloud Compute? Las personas que acceden a su sitio pueden usarlos para ejecutar lo que quieran en su cuenta, dejándolo con una factura enorme.

Ejecutar estos procesos detrás de una API significa que nadie puede ver ninguno de los detalles privados; no pueden robarlos para usarlos en sus propios proyectos. Si almacena el código de su sitio web en GitHub u otro control de fuente público, también significa que tampoco están visibles allí.

Ejecute el código en otro lugar

¿Qué sucede si no utiliza ningún otro servicio y no utiliza ninguna clave secreta? Si está ejecutando un fragmento de código grande o complejo, o si no quiere que nadie más lea su código y descubra cómo funciona, aún puede usar una API.

Controlar quién tiene acceso

Proporcionar una API también le permite restringir quién puede acceder a la base de datos o ejecutar el código. Puede hacer esto solicitando una clave API. Esta clave se utiliza para identificar al usuario que realiza la solicitud y luego permite o rechaza la solicitud.

Esto se puede usar para permitir que solo unas pocas personas accedan al servicio, o incluso para crear un sistema de niveles. Así es como funcionan muchas API pagas. Todos tienen acceso gratuito pero limitado, y luego permite el pago por el acceso a partes superiores del servicio o simplemente a una tasa más alta de solicitudes.

Construyendo la API

Ahora que conocemos algunas razones por las que podríamos querer crear una API, hagámoslo. Usaremos API Gateway y AWS Lambdas, porque es más simple que ejecutar un servidor. Asegúrese de tener una cuenta de AWS y de haber iniciado sesión.

Configurar una puerta de enlace API

Comenzaremos abriendo el servicio API Gateway y haciendo clic en "Comenzar" . En la página siguiente, debemos seleccionar la "Nueva API"opción. Luego le daremos a nuestra API un nombre y una descripción, y haremos clic en "Crear API".

Hacer clic en "Crear API"nos llevará a la página de configuración de la API.

Lo primero que debemos hacer es agregar un recurso a la API. El uso de recursos nos permite agrupar llamadas API similares mediante barras inclinadas. Vamos a crear una API que podemos usar para hacer recomendaciones sobre qué mirar. Por lo tanto podemos tener/tv-showsy /moviescomo dos métodos básicos.

Haga clic en el menú desplegable "Acciones" y seleccione "Crear recurso" . Nombre sus recursos, asegurándose de que ambos estén en la ruta "/".

Queremos que los usuarios puedan ir a "/ películas / horror" o "/ programas de televisión / comedia", y podemos hacerlo agregando parámetros de ruta. Son variables a las que podemos acceder dentro de la API. Para crear uno de estos, debemos configurar el recurso {resourceName}como se muestra a continuación. Esto se puede hacer para "programas de televisión" y "películas".

Ahora que tenemos la longitud y el género, podemos crear métodos para obtener y agregar datos a una tabla. Seleccione uno de los {genre}recursos, haga clic en "Acciones" yluego " Crear método" . Esto creará un pequeño cuadro gris debajo del recurso en el que podemos hacer clic. Vamos a empezar con unGETsolicitud, así que selecciónelo y haga clic en el botón de verificación.

Aquí es donde podemos decidir cómo manejar la solicitud. Vamos a utilizar AWS Lambdas, pero necesitamos crearlos antes de que podamos terminar de configurar los métodos.

Creando las Lambdas

Podemos responder a estas solicitudes de API utilizando Lambdas, lo cual es genial, ya que solo se ejecutan cuando las necesitamos. También son muy fáciles de crear, así que eso es lo que haremos ahora.

En la consola de Lambda, haga clic en "Crear función". Luego, podemos nombrar nuestra primera función API movieAPI, configurarla para que ejecute el Nodo 8.10 y "Crear un nuevo rol a partir de plantillas" . Nombraremos nuestro nuevo rol "tableAPI" y agregaremos "Permisos de microservicio simple" como la única plantilla.

Todo el código se puede encontrar en //github.com/SamWSoftware/Projects/tree/master/movieAPI

Hacer clic en "Crear función" nos enviará a la ventana de Lambda. Desplácese hacia abajo hasta la sección "Código de función" y cambiaremos el código. Lo primero que haremos es comprobar qué método de solicitud se utilizó.

exports.handler = async (event) => { console.log(event); if (event.httpMethod === 'PUT'){ let response = putMovie(event) return done(response); } else if (event.httpMethod === 'GET'){ let response = getMovie(event); return done(response); } };

Empezaremos escribiendo la getMoviefunción. Esta función comenzará obteniendo los genreparámetros de la ruta. Aquí es donde el uso de parámetros de ruta puede facilitar este proceso.

const getMovie = event => { let genre = event.pathParameters.genre; return; }

Con el género que solicitó el usuario, vamos a obtener una película recomendada para ellos. Los copié de las 25 mejores películas de cada género y los agregué a un objeto con el género como clave. Luego podemos obtener la película obteniendo el valor del género solicitado.

const movies = { action: 'Desperado (1995)', fantasy: 'Inception (2010)', ... horror: 'Black Swan (2010)' } const getMovie = event => { let genre = event.pathParameters.genre; return movies[genre]; }

Esto significa que el título de la película se pasa al donefunción. Esta función se utiliza, ya que API Gateway espera que los datos regresen en un formato muy específico. Esta función convierte una cadena en el formato requerido.

const done = response => { return { statusCode: '200', body: JSON.stringify(response), headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Methods': '*', 'Access-Control-Allow-Origin': '*' } } }

Podemos hacer algo muy similar para una tv-showsAPIfunción, reutilizando la mayor parte del código. Simplemente cambie los nombres de las funciones y las sugerencias de películas a programas de televisión.

Conexión de Lambdas a API Gateway

De vuelta en API Gateway, podemos agregar nuestras nuevas Lambdas a los métodos que creamos anteriormente. Debemos asegurarnos de que "Usar la integración de proxy de Lambda"is selected and that we are pointing at the correct Lambda. Clicking “Save” will ask you for permissions to access this Lambda, to which we can give the “OK”.

Do this for the GETmethods on both resources and we can start to test. Selecting the methods should now show a method execution diagram. This sounds complicated but the only bit we need is the “TEST”section.

Clicking “TEST” will open a new section where we can try out the API. There are lots of things you can set here, but the only one we care about is the Path {genre}. We need to set this to the genre we’re requesting. Entering “western” as the genre and hitting the “Test” button gets a response like this:

We got our API working! Now we need to make sure that other people can access it. There are two steps to this.

  1. We enable CORS — Select the “{genre}”resource and then click “Actions”and “Enable CORS”. Leave everything as defaults and, when asked, click “Yes, replace existing values”.
  2. Deploy our API — Click on “Actions”andDeploy API”. Set the deployment stage to “[New Stage]” and then give your stage a name like “production”orpublic”.

Once your API has deployed you should get a URL like this. This is the base of your API. You can add /movies/western to access your API.

//{uniqueCode}.execute-api.eu-west-1.amazonaws.com/production

Your API URL might end up something like:

//fds1fe31fes476s.execute-api.eu-west-1.amazonaws.com/production/movies/western

That’s all for this article. In the next one we’ll connect this API to Dynamo tables and let users vote on their favourite movies in each genre. You can read that article below.

Building an API with Lambdas and API Gateway — Part 2

In the first part we created an API which passed requests through to a Lambda which returned the top tv show or movie…

medium.com