2-Laboratorio-Codificación de La API REST-NODE Express Mongo
2-Laboratorio-Codificación de La API REST-NODE Express Mongo
Page 1 of 71
1 TEMA
Construcción de una API REST con Node JS, Express y Java Script.
2 OBJETIVO GENERAL
Construir una API REST con Node JS, Express y Java Script.
3 OBJETIVOS ESPECÍFICOS
Node JS y NPM.
MongoDB, MongoDB Atlas (Cloud) y MongoDB Compass.
Visual studio code. Opcionalmente podrá usar otros editores de texto como: Atom, Sublime
Text y Brackets.
Postman
Github y git desktop
Antes de empezar debe validar que las herramientas base estén instaladas y configuradas
correctamente; así:
Page 1 of 71
Una vez creado el repositorio remoto obtenga la URL con la cual podrá clonar el repositorio en el
espacio de trabajo local; así:
Page 2 of 71
7 CREACIÓN DEL REPOSITORIO LOCAL
Desde la aplicación git desktop clone el repositorio remoto en un espacio de trabajo local
Si la operación de clonación es exitosa, haga un git fetch del repositorio remoto al local.
Page 3 of 71
Valide que los archivos base del repositorio remoto se hayan sincronizado al repositorio local.
Desde una terminal de comandos y estando posicionado en la carpeta raíz del proyecto, escriba el
siguiente comando:
Suministre la información para cada uno de los puntos solicitados por el asistente. Presione enter ().
Lo anterior dará origen al archivo de manifiesto llamado package.json.
Nota: Si no desea diligenciar los datos de entrada del manifiesto del archivo package.json, ingrese el
comando npm init --y.
Page 4 of 71
9 INSTALACIÓN Y CONFIGURACIÓN DE PAQUETES COMPLEMENTARIOS DESDE VISUAL
STUDIO CODE
Page 5 of 71
Valide en el navegador web que el sitio muestre la salida esperada:
En una terminal de visual studio code, verifique el estatus de los archivos del proyecto:
Inicie el seguimiento (Staging Area) de los archivos contenidos en el directorio de trabajo (Working
Directory) local; así:
Page 6 of 71
Confirme los cambios en el repositorio local
Verifique que los cambios se realizaron correctamente y que está listo para publicarlos en el repositorio
remoto.
Antes de incorporar los cambios en la rama principal del repositorio remoto, traiga los últimos cambios
del repositorio remoto al repositorio local
Page 7 of 71
Verifique que el archivo de prueba Hello-World.js se encuentre publicado en el repositorio remoto.
Page 8 of 71
Nota: para más información véase, https://www.npmjs.com/package/nodemon
Nodemon es una herramienta que ayuda a desarrollar aplicaciones basadas en node.js reiniciando
automáticamente la aplicación node cuando se detectan cambios de archivos en el directorio.
nodemon hello-world.js
Una vez instalado el paquete de nodemon, verifique que en el archivo package.json se haya
agregado el paquete a las dependencias.
Page 9 of 71
Luego actualice los cambios en el repositorio local
Haga todas las pruebas pertinentes en la rama nodemon. Luego pase a la rama main e incorpore los
cambios desde la rama nodemon; así
Page 10 of 71
Consolide la rama main; así:
git status
Page 11 of 71
Borre la rama auxiliar nodemon:
Page 12 of 71
En la terminal ejecute el archivo para verificar si funciona correctamente:
Prepare los cambios en la rama auxiliar llamada express del repositorio local; así:
git status
git add --alll
git commit -a -m ‘Express instalado y configurado correctamente’
git status
Page 13 of 71
Fusione el trabajo realizado en la rama express en la rama main del repositorio local.
Publique los cambios de la rama main del repositorio local en el repositorio remoto.
Page 14 of 71
Valide los cambios en el repositorio remoto.
Antes de empezar a instalar otros paquetes, se debe eliminar la rama auxiliar llamada express; así:
Page 15 of 71
Debe preparar y confirmar los cambios; así:
Page 16 of 71
Fusione las ramas del repositorio local y suba los cambios al repositorio remoto
Para la codificación y pruebas de la API REST para usuarios y Cursos, cree una rama auxiliar
llamada apirest.
Page 17 of 71
10.2 Estructuración del proyecto
Page 18 of 71
Pruebe el funcionamiento del servicio:
En el archivo principal de la aplicación index.js invoque los controladores y exponga los recursos a
través de los endpoints
Page 19 of 71
10.5 Endpoints de tipo GET para los recursos Cursos y Usuarios
Refactorice los controladores. Implemente los endpoint de tipo GET tanto para CURSOS, como para
USUARIOS. Así;
Page 20 of 71
En la terminal ejecute el archivo principal de la aplicación, llamado index.js
Proceda a probar los endpoint de tipo GET que acaba de crear para los recursos cursos y usuarios.
Para ello utilice POSTMAN.
a) GET Usuarios
Page 21 of 71
b) GET Cursos
Page 22 of 71
Actualice los cambios de la rama main local en la rama main remota:
Page 23 of 71
Retorne a la rama local auxiliar local llamada apirest para crear el modelo de usuarios
Page 24 of 71
10.8 Endpoint de tipo POST para el recurso usuarios
En el controlador usuarios implemente una función que le permita crear y retornar un usuario.
En el controlador usuarios construya el endpoint de tipo POST que le permita agregar un usuario en
la base de datos.
Page 25 of 71
Guarde los cambios y pruebe enviar un USUARIO a través de una petición de tipo POST; para ello
emplee POSTMAN.
Si todo va bien, debe recibir el objeto creado como respuesta, acompañado del status code 200 OK.
Page 26 of 71
Además; puede verificar que se haya creado la colección de usuarios y el objeto usuario en la base de
datos de MongoDB; así:
Codifique el endpoint de tipo PUT para que pueda actualizar los objetos de tipo usuario. Sólo podrá
actualizar el nombre y la contraseña. No podrá actualizar el correo, ya que funge como único
identificador (UID).
Page 27 of 71
A través de la herramienta POSTMAN pruebe el endpoint de tipo PUT; así:
Luego valide en la base de datos MongoDB que se haya actualizado el objeto correctamente; así:
Page 28 of 71
Prepare y confirme los cambios en el repositorio local.
Retorne a la rama principal local (main). Fusione las nuevas funcionalidades desde la rama auxiliar
apirest a la rama principal local llamada main.
Envié los cambios al repositorio remoto. Para ello, actualice los cambios de la rama main local en la
rama main remota:
Page 29 of 71
git remote show origin
Finalmente, verifique que los cambios se vean reflejados en el repositorio remoto; así.
Implemente el mecanismo para cambiar de estado a los usuarios. No se eliminarán para no perder la
trazabilidad. Sólo pasaran de true a false.
En el controlador usuarios debe implementar una función que le permita inactivar los usuarios; así:
Page 30 of 71
Luego debe construir el endpoint que reciba peticiones de tipo DELETE para el recurso usuarios.
Posteriormente debe realizar las pruebas al endpoint de tipo DELETE para el recurso USUARIOS
desde POSTMAN; así:
Page 31 of 71
Si la petición es exitosa, recibirá como respuesta un status code 200 OK y el atributo estado habrá
pasado a false.
Verifique que el usuario este inactivo en la base de datos. Es decir; que el atributo estado se encuentre
en falso. Así:
Page 32 of 71
Prepare y confirme los cambios en la rama auxiliar denominada apirest del repositorio local; así:
Fusione la rama apirest con la rama main del repositorio local; así:
Page 33 of 71
10.11 Endpoint de tipo GET para el recurso usuarios
Codifique la funcionalidad que le permita listar todos los usuarios activos de la base de datos. Para lo
cual debe editar el controlador USUARIOS e implementar una función llamada listarUsuariosActivos
que retorne aquellos usuarios cuyo estado sea igual a true.
A través del cliente de la API (Postman), ponga a prueba el endpoint de tipo GET para validar que liste
todos los usuarios activos; así:
Page 34 of 71
Prepare e incorpore los cambios en la rama auxiliar local denominada apirest; así:
Page 35 of 71
Publique los cambios en la rama principal del repositorio remoto.
Page 36 of 71
10.12 Modelo y esquema para el objeto curso
En el controlador cursos implemente una función que permita agregar cursos a la colección de la
base de datos.
Page 37 of 71
Agregue un endpoint de tipo POST que exponga la ruta para el recurso CURSOS.
Si la prueba ha sido exitosa, el cliente de la API mostrará un status code 200 OK.
Page 38 of 71
Agregue los cambios a la rama local auxiliar denominada apirest
Fusione la rama auxiliar (apirest) con la principal (main) del repositorio local; así:
Page 39 of 71
Sincronice los cambios de la rama principal (main) local en el repositorio remoto
Page 40 of 71
10.14 Endpoint de tipo PUT para el recurso cursos
En el controlador cursos debe crear una función asíncrona para actualizar los cursos creados con
antelación, así:
Posteriormente cree un endpoint que responda a las peticiones de tipo PUT para el recurso CURSOS;
así:
Una vez implementada la función y el endpoint haga las pruebas pertinentes desde la herramienta
cliente (Postman)
Antes de la actualización.
Page 41 of 71
Durante la actualización
Si la petición de tipo PUT se realiza correctamente, recibirá por respuesta un status code 200 OK.
Prepare y confirme los cambios en la rama auxiliar local denominada apirest; así:
Fusione el contenido de las ramas auxiliar (apirest) y principal (main) del repositorio local.
Page 42 of 71
Envié el contenido actualizado de la rama principal (main) local al repositorio remoto; así:
Page 43 of 71
10.15 Endpoint de tipo DELETE para el recurso cursos
En este punto debe implementar una funcionalidad que le permita cambiar el estado a los cursos. Es
decir, pasarlos de estado activo a inactivo. Para ello en el controlador cursos debe construir una
función asíncrona para tal propósito, así:
Ahora debe exponer el recurso cursos a través de un endpoint de tipo DELETE; así;
Una vez construida la función y el endpoint para inactivar curos haga las pruebas pertinentes desde la
herramienta cliente (Postman); así:
Page 44 of 71
Si la operación es exitosa, recibirá como respuesta un status code 200 OK. Contraste el resultado
obtenido con los registros de la base de datos.
Antes de la inactivación:
Page 45 of 71
Después de la inactivación:
Prepare y confirme los cambios en la rama auxiliar (apirest) del repositorio local:
Fusione los cambios de la rama auxiliar (apirest) en la rama principal (main) local.
Page 46 of 71
Valide los cambios en el repositorio remoto:
En el controlador cursos debe crear una función que retorne el listado de cursos activos (estado =
true).
Page 47 of 71
Pruebe en la herramienta cliente (Postman) el endpoint de tipo GET para el recurso cursos; así:
Page 48 of 71
Prepare y confirme los cambios a la rama auxiliar (apirest) del repositorio local:
Fusione la rama auxiliar (apirest) en la rama principal (main) del repositorio local
Page 49 of 71
11 SEPARACIÓN DE LAS VALIDACIONES Y LAS FUNCIONES ASÍNCRONAS DE LOS
CONTROLADORES
En la raíz del proyecto cree un directorio llamado logic. Dentro de él, cree los archivos curso_logic.js
y usuario_logic.js
Separe las validaciones y las funciones asíncronas de cada uno de los controladores en los
correspondientes archivos del directorio logic. Al finalizar el proceso, no olvide exportar las funciones
y las validaciones.
a) curso_logic.js
Page 50 of 71
Page 51 of 71
b) usuario_logic.js
Page 52 of 71
12 Refactorización de los controladores cursos y usuarios
Tras la separación de las funciones y las validaciones que hacen parte de la lógica de la aplicación,
refactorice las líneas de código resaltadas en color naranja en los controladores.
a) Controlador cursos.js
Page 53 of 71
a) Controlador usuarios.js
Page 54 of 71
Tras los cambios realizados debe probar en Postman todas las funcionalidades de la API REST.
En cada uno de los casos, asegúrese de recibir un status code 200 OK.
Preparare y confirme los cambios en la rama auxiliar llamada apirest del repositorio local.
Page 55 of 71
Publique los cambios en el repositorio remoto
Page 56 of 71
13 BASE DE DATOS MONGODB ATLAS (CLOUD)
Para poner en producción la API REST, se requiere implementar la base de datos en la plataforma
cloud de MongoDB Atlas. Para lo cual debe registrarse en https://www.mongodb.com/atlas
a) Inicie sesión.
b) Cree la organización:
Page 57 of 71
e) Extraiga el mecanismo de conexión
f) Monitoree el cluster
Page 58 of 71
g) Interactúe con la base de datos, las colecciones y los documentos.
h) Ajuste las reglas de acceso del firewall de la base de datos MongoDB Atlas
Page 59 of 71
14 DESPLIEGUE DE LA API REST EN HEROKU
Previo al despliegue de la API REST, refactorice el código fuente de la aplicación. En el archivo indesx.js,
en la sección de scripts, agregue los parámetros de inicio y despliegue de la aplicación.
14.1 Heroku
Para el despliegue de la API REST, regístrese en Heroku e inicie sesión.
Page 60 of 71
14.2 CLI (command Line Interface) Heroku
Desde el centro de desarrollo de Heroku, descargue el CLI para su sistema operativo correspondiente
al ecosistema NODE. Disponible en:
https://devcenter.heroku.com/articles/getting-started-with-nodejs#set-up
Una vez instalada la herramienta CLI y en una terminal de visual studio code del proyecto en
construcción ejecute la siguiente instrucción:
Page 61 of 71
Lo enviará a su navegador web. Allí debe suministrar las credenciales para la autenticación y
autorización del agente CLI.
Page 62 of 71
Como ya tiene creado el proyecto e iniciado el repositorio git, omita las dos primeras sentencias.
Vaya a la tercera sentencia. Para ello tome los datos suministrados por el asistente de heroku según
su parametrización. Ejemplo:
Page 63 of 71
Es posible que deba remplazar el nombre de la rama master pon la rama main
Si el proceso de despliegue fue exitoso habrá obtenido la URL a través de la cual podrá interactuar
con los endpoint de los recursos de la API REST. Ejemplo:
https://api-rest-node-without-jwt-lab1.herokuapp.com/api/usuarios
Page 64 of 71
15 PRUEBA DE LOS ENDPOINT EN PRODUCCIÓN
Una vez puesta en producción la API REST, pruebe cada una de los endpoint sobre el entorno de
heroku. Ejemplos:
a) https://api-rest-node-without-jwt-lab1.herokuapp.com/api/usuarios
b) https://api-rest-node-without-jwt-lab1.herokuapp.com/api/cursos
Empleando herramientas como swagger, postman, etcétera; construya la documentación para la API
REST. Ejemplo:
Page 65 of 71
Page 66 of 71
17 EXPORT COLLECTION
Exporte en formato JSON los recursos, endpoints y datos de prueba de la API REST.
Edite el archivo para visualizar su contenido. Analice su contenido y haga las pruebas pertinentes.
Page 67 of 71
Page 68 of 71
18 RETOS ACADÉMICOS
a) Reto backend
Ahora que ya tiene buena parte del backend, investigue y desarrolle las siguientes funcionalidades.
1. Desarrollar la función y el endpoint que permita buscar cursos y usuarios por ID.
2. Implementar Swagger.
3. Implementar JSON Web Tokens.
4. Autenticación y autorización basada en roles.
b) Reto frontend
Desarrolle un proyecto de software de tipo frontend empleando alguna o varias de las siguientes
librerías o frameworks:
a) Angular.
b) React.
c) Vue.
d) Blazor WA.
Nota: Concerté el cronograma de trabajo, metodología, los términos y los entregables con su
instructor.
FIN.
Page 69 of 71