05/12/2019 | Tecnologías

Desarrollar una API REST en 5 minutos con Loopback 4

Sí, no has leído mal; esto es posible con Loopback, un framework altamente escalable de Node.js, desarrollado sobre Express.js que facilita la creación de APIs REST para clientes (aplicaciones móviles, de escritorio, web, etc) así como microservicios.

Ofrece muchas ventajas que lo convierten en una herramienta muy potente:

  • Es un framework maduro que facilita la adopción de las mejores prácticas en el diseño de APIs
  • Genera código automáticamente, facilitando el diseño y el testing
  • Las APIs se generan utilizando el estándar OpenAPI, por lo que se dispone de toda la potencia de las herramientas Swagger, muy populares y útiles.
  • Como consecuencia, permite a los desarrolladores enfocarse en la parte cliente, en la experiencia de usuario y en la lógica de negocio
  • Ofrece una gran capa de abstracción a la hora de trabajar con base de datos
  • Simplifica enormemente la conexión con base de datos con conectores para las más populares y utilizadas (Oracle, MySql, MongoDB, PostgreSQL, SQLite, etc)
  • También ofrece conectores para conectar fácilmente con otras APIs REST, servicios SOAP, servicios de correo, etc…
  • Con el paquete ‘authentication’ también es muy sencillo añadir autenticación a nuestra API con diferentes estrategias, como por ejemplo, JWT

Para esta pequeña guía, en la que vamos a crear una API para gestionar nuestra biblioteca de películas favoritas, necesitaremos instalar primero (seguir las instrucciones según nuestro sistema operativo):

Ahora, podemos proceder a instalar el CLI de Loopback 4 con npm (instalado si tenemos Node.js). Abrimos una terminal, ya sea del sistema o en nuestro editor de código favorito y ejecutamos:

npm i -g @loopback/cli

Si todo ha ido correctamente, ya deberíamos tener disponible el CLI de Loopback 4, y podremos crear nuestro proyecto. Para ello, nos situamos en el path donde queremos crearlo, y ejecutamos:

lb4 app

Loobpack comenzará a hacernos algunas preguntas (solo necesitamos contestar a la primera, referente al nombre del proyecto, el resto las podemos saltar pulsando intro para que tomen los valores por defecto):

? Project name: my-favorite-movies
? Project description: My first loopback project
? Project root directory: my-favorite-movies
? Application class name: StarterApplication
? Select features to enable in the project:
◉ Enable eslint: add a linter with pre-configured lint rules
◉ Enable prettier:install prettier to format code conforming to rules
◉ Enable mocha:install mocha to run tests
◉ Enable loopbackBuild: use @loopback/build helpers (e.g. lb-eslint)
◉ Enable vscode: add VSCode config files
◉ Enable docker: include Dockerfile and .dockerignore
◉ Enable repositories: include repository imports and RepositoryMixin
◉ Enable services: include service-proxy imports and ServiceMixin

Una vez termine, ya está el proyecto creado. Podemos dirigirnos a la raíz del mismo, e iniciarlo:

cd my-favorite-movies
npm start

Comprobemos que así es, abriendo nuestro navegador y dirigiéndonos a:

http://localhost:3000/explorer/

Ahora vamos a crear el único modelo necesario para esta introducción, de nuevo, mediante línea de comandos:

lb4 model

Al igual que al crear el proyecto, nos hará varias preguntas.
Esta vez no escaparemos ninguna, únicamente se nos solicita el nombre del modelo, el tipo de modelo (seleccionaremos Entity) y las propiedades que tendrá.

Para cada propiedad, se nos harán algunas preguntas (que variarán según lo que vayamos contestando) como:

  • Nombre de la propiedad (no escribir nada y pulsar intro cuando no queramos añadir ninguna más)
  • Tipo
  • ¿Es la propiedad ID del modelo? (si contestamos que sí no nos lo preguntará para las siguientes propiedades como es lógico)
  • ¿Es una propiedad requerida
  • Valor por defecto (si queremos darle alguno)

Si ahora nos dirigimos en nuestro proyecto, a src/models/movie.model.ts podremos ver el código autogenerado por loopback, y hacer alguna modificación si nos hemos equivocado, o se nos ha olvidado añadir alguna propiedad.

Pero esto no es suficiente para añadir este modelo a nuestra API y poder empezar a realizar operaciones CRUD sobre el mismo, necesitamos añadir 3 componentes más, estrictamente en este orden:

  • Datasource: configuración para conectar con nuestra base datos (o cualquier otra si disponemos de sus datos de conexión), en este caso, MongoDB
  • Repositorio: provee operaciones de acceso a datos (por ejemplo, CRUD)
  • Controlador: implementa las operaciones definidas por la API

Para ello, de nuevo, continuamos utilizando el CLI de Loopback y ejecutamos:

lb4 datasource

Pasamos a crear el repositorio que nos proveerá de las operaciones CRUD:

lb4 repository

Y por último, el controlador:

lb4 controller

¡Hecho!

Ya podemos volver a arrancar el proyecto, y comprobar los cambios desde el navegador:

Desde aquí podemos empezar a jugar con la API y los nuevos endpoints que tenemos disponibles. Crear películas (con los campos que hemos definido en el modelo), comprobando que valida correctamente los tipos, los que hemos puesto como requeridos, borrarlas a partir de su id único, probar /movies/count, etc.

Si sois escépticos, y queréis comprobar que realmente los datos se están guardando en BBDD y no en memoria, podéis descargar alguna interfaz gráfica para mongo como RoboMongo y comprobar que la conexión con la base de datos es correcta, y que los modelos se han creado en base a lo que hemos contestado en las preguntas.

*Si nos da algún error relacionado con la conexión con Mongo, probablemente el servicio no esté arrancado en nuestro sistema, para ello, ejecuta el comando:

sudo service mongod start
Compartir en:

Relacionados