Challenge-ONE-Foro-Alura-API

¡Hola a todos! Soy Bryant Baptista, bienvenidos a este nuevo desafío sobre el Foro Alura, una API hecha para gestionar bases de datos, eso con las funciones básicas basadas en el acrónimo CRUD (traducido al español como Crear, Leer/Listar, Actualizar y Borrar/Eliminar), todo esto diseñado mediante el lenguaje de programación Java y su framework llamado Spring. La idea para realizar este challenge es gracias al programa ONE y a la gente de Oracle/Alura LATAM.

Tecnologías utilizadas 🖥️:

  • Java ☕
  • Eclipse 🌘/Intellij IDEA ⌨️
  • MySQL 🐬
  • Spring Framework 🍃
  • Spring Security 🛡️
  • Insomnia 👁️/Postman 🧑‍🚀
  • Token JWT 🔐

Explicación sobre el funcionamiento del programa: 1era Parte del Desafío

Mediante programas o herramientas para hacer pruebas de API tales como Insomnia o Postman se tienen como HTTP Requests las funciones CRUD anteriormente mencionadas, tanto para registrar tópicos como para listar, actualizar, borrar o inclusive obtener datos de un tópico en específico, esto haciendo una búsqueda mediante el ID del mismo.

HTTP Requests


Para el POST Mapping (así como para las demás requests) hay que colocar la URL de la base de datos para guardar el registro y los datos requeridos (en formato JSON) para añadir un tópico nuevo, entre esos datos tenemos:

  • Título
  • Mensaje
  • Autor
  • Curso

POST Mapping

En caso de que no hayamos agregado algún parámetro (Error 400: Bad Request) o hayan datos duplicados (para el título y mensaje) no guardará los datos y se tendrán que colocar nuevamente esta vez de manera correcta.


Después de haber agregado un tópico podremos hacer uso del GET Mapping, para esta ocasión con solo colocar la URL obtendremos la lista de los tópicos añadidos hasta el momento:

GET Mapping


Ahora, para hacer algún cambio a algún topico solo hace falta acceder a la URL haciendo uso del PUT Mapping y escribir en formato JSON el número del ID junto con los datos que quiero modificar, teniendo como ejemplo la imagen que se encuentra abajo:

PUT Mapping


Así mismo tenemos lo que sería el DELETE Mapping, como se hizo mención anteriormente esto funciona para borrar un registro en específico, para ello solo hace falta hacer el request y añadir el URL seguido del número de ID del tópico que se quiere eliminar, como ejemplo teniendo lo siguiente:

DELETE Mapping


Por último se encuentra el GET Mapping para buscar un tópico en específico, esto se hace nada más colocando al final de la URL el ID del tópico el cual queremos consultar y obtener información:

GET Mapping ID

En caso de haber colocado un ID que no exista se le notificará al usuario el no haber encontrado resultado alguno mediante un Error 404.

Explicación sobre el funcionamiento del programa: 2da Parte del Desafío

A partir de este momento, después de haber logrado la primera parte del desarrollo y para seguir mejorando la API se decidió en hacer una sección para que cada persona pueda crear una cuenta y hacer Login en la aplicación, para ello se recurrió en crear una nueva tabla para almacenar la información de todos los usuarios; así mismo y por razones de seguridad se le agregó una forma de autenticación llamada JSON Web Token (JWT por sus siglas en inglés) junto con la dependencia que nos proporciona o nos facilita el framework llamada Spring Security.

JWT Spring Security


Una vez creada la cuenta colocamos los datos en formato JSON en un POST Mapping creado de nombre "Login de Usuario" para luego generar un token:

POST Mapping Login JWTtoken


Con este token que hemos obtenido tenemos dos temas: lo primero es que efectivamente se ha validado la cuenta del usuario, y segundo, al colocar todos estos caracteres en la sección de autenticación poseemos el permiso para realizar las funciones de crear, listar, modificar y borrar tópicos que se requieran, como por ejemplo:

Ejemplo GET Mapping JWTtoken


De no haber puesto un token válido o inclusive no haber colocado un token nos aparecerá el siguiente error:

Error 403 Forbidden

Para finalizar y como resumen ya tenemos lo que sería la API del Foro Alura (de una manera básica), comenzando por crear los RequestMapping's para el CRUD, construyendo las bases de datos para la aplicación y realizando los métodos de autenticación para agregar una capa de seguridad a las cuentas de los usuarios.