Cómo construir una API RESTful con autenticación en 5 minutos, todo desde su línea de comando (Parte 1)

Si el título de este artículo te emociona, amigo mío, estás a punto de alcanzar el nivel 100 de satisfacción al final. Revisaré rápidamente el curso de este artículo:

  1. Lo que estamos a punto de crear: API RESTful que maneja registros de alimentos en el menú de un restaurante. La base de datos utilizada en el back-end será MongoDB. (Literalmente puede usar cualquier base de datos en este planeta. Hay una lista exhaustiva de conectores de base de datos / conectores que no son de base de datos compatibles con LoopBack a continuación).
  2. Qué es LoopBack: En términos extremadamente simples, es un marco Node.js de código abierto altamente extensible que se utiliza para crear API REST dinámicas de extremo a extremo muy rápidamente. Las API generadas a través de LoopBack son Swagger API (el marco de API más popular del mundo, y verá por qué muy pronto). La interfaz se puede hacer en cualquier marco que le guste; Angular o React.
  3. Creación de aplicación a través de CLI: esta es la parte WOW que elimina toda la programación involucrada. LoopBack CLI es tan hermoso que todas las horas de trabajo de desarrollo se reducen a segundos. Aquí, estaríamos configurando nuestra base de datos usando CLI.
  4. Creación de modelos de datos a través de CLI: de nuevo, sin programación. Todo a través de la hermosa CLI.
  5. Configuración de la autenticación mediante CLI: si tiene experiencia en la creación de API, sabe lo difícil que es restringir partes de la API mediante la autenticación. Configurar la autenticación basada en tokens usando Express + Node.js en el lado del servidor es una molestia. ¡Todo ese dolor desaparecerá al probar el elixir de LoopBack! Es la bebida del cielo.

Guía paso por paso:

Requisitos previos: asegúrese de tener Node.js, Robomongo instalado y el servidor MongoDB en ejecución.

PASO 1: Instale la CLI de LoopBack a través de NPM

Abra la terminal y escriba el siguiente comando para instalar LoopBack CLI de modo que se pueda acceder al comando 'lb'. Solo a través del comando 'lb' podemos generar aplicaciones, modelos, fuentes de datos, etc. Para más información: //loopback.io/doc/en/lb2/Command-line-tools.html#using-yeoman

$ npm install -g loopback-cli

Asegúrese de instalarlo globalmente, o de lo contrario el comando 'lb' podría no funcionar para usted.

PASO 2: Creación de la aplicación

Cree un directorio donde desee almacenar su proyecto. Lo llamaré 'menú de restaurante'. Asegúrese de haber abierto este directorio en su terminal para que todos los archivos generados a través de LoopBack se almacenen en esa carpeta.

Luego ingrese el siguiente comando:

$ lb

Se harán muchas preguntas, como las que se muestran en la imagen a continuación.

(Para navegar entre las opciones, use las teclas de flecha en su teclado)

¡SE CREA LA API!

No estoy bromeando. ¿No me crees? Ejecute la aplicación usando el siguiente comando:

$ node .

Si apunta a localhost: 3000, verá algo como esto:

Sin embargo, si va a localhost: 3000 / explorer, verá la hermosa SwaggerAPI.

LoopBack ha configurado todas las rutas para ti:

GET usuarios, POST usuarios, PUT usuarios, BORRAR usuarios, Iniciar sesión, Cerrar sesión, Cambiar contraseña. ¡Literalmente todo! De lo contrario, llevaría horas de trabajo codificar esto.

Abra esta carpeta en cualquier editor de texto. Estaría usando Atom.

PASO 3: Conexión de MongoDB

Si abre datasources.jsonen la carpeta Servidor, debería ver algo como:

{ "db": { "name": "db", "connector": "memory" }}

Esto significa que actualmente, la fuente de datos que se utiliza es la memoria de nuestra computadora. Tenemos que cambiar esto a Mongo. Así que instalemos el conector mongo:

$ npm install --save loopback-connector-mongodb

Además, espero que mongod esté funcionando. Así es como sabría que se está ejecutando:

2018-01-27T15:01:13.278+0530 I NETWORK [thread1] waiting for connections on port 27017

¡Ahora, conectemos el conector!

$ lb datasource mongoDS --connector mongoDB

Esto hará muchas preguntas de la siguiente manera:

Ahora modifique datasources.jsonporque no queremos usar memoria. Deseamos utilizar Mongo.

{ "db": { "host": "localhost", "port": 27017, "url": "", "database": "food", "password": "", "name": "mongoDS", "user": "", "connector": "mongodb" }}

Entonces foodse crea nuestra base de datos llamada:.

PASO 4: Crear modelos de datos

Ejecute el siguiente comando para crear modelos de datos:

$ lb model

You may add however many properties to a particular model. To stop entering more properties, just hit Enter to get out of the CLI.

Check out dishes.json in the Common/Models folder.

{ "name": "dishes", "base": "PersistedModel", "idInjection": true, "options": { "validateUpsert": true }, "properties": { "name": { "type": "string", "required": true }, "price": { "type": "number", "required": true } }, "validations": [], "relations": {}, "acls": [], "methods": {}}

You may edit the properties from this json file as well. It is not necessary to use CLI.

Now let’s rerun the server using the following command and head over to localhost:3000/explorer

$ node .

Now you’ll see 2 models: dishes, and user

Now let’s POST some dish.

Now let’s GET the same dish.

You may play around with other HTTP requests too!

These APIs can be accessed outside the explorer as well:

//localhost:3000/api/dishes

STEP 5: AUTHENTICATION: Cherry on the cake!

To set up authentication, run the following command:

$ lb acl

Now, let’s try to GET the dishes. Before that, please rerun the server.

Let’s get authenticated! For that, we need to get registered first. So we POST in users.

Now, let’s log in.

Now, copy the ID in the response body and paste it in the Access Token field on top of the page.

Now we are authenticated. YAY.

Now, let’s GET the dishes again.

HOORAY!

Congratulations if you’ve successfully reached this step. So proud of you.

Next steps would be to create a front end around this API which would be done later.

The frontend tutorial of this article can be found here. In that tutorial, I have used ReactJS to weave a frontend around this API.

Bye folks!

Happy coding.