/Foro-Alura-SpringChallenge

Repositorio de la implementación propuesta para el Desafio Foro-AluraOne Challenge

Primary LanguageJava

Challenge ONE | Back End | Foro Alura

En este desafío, vamos a implementar a nivel de back end (CRUD) el proceso de un foro, y para eso crearemos una API REST usando Spring.

Nuestra API va a centrarse específicamente en los tópicos, y debe permitir a los usuarios:

  • Crear un nuevo tópico
  • Mostrar todos los tópicos creados
  • Mostrar un tópico específico
  • Actualizar un tópico
  • Eliminar un tópico
  • Documentación con Swagger
  • Generar un token usando JWT
  • Autenticación con JWT

Definición de foro

Un foro es una comunidad en línea que facilita la comunicación y el intercambio de conocimientos entre usuarios interesados en temas específicos.

⬇️ Repositorio Base Alura

https://github.com/alura-challenges/challenge-one-foro-alura

📃 Challenge ONE - API REST - Spring 1

🔹Diagrama de base de datos:

Link: https://github.com/DarioDev90/Foro-Alura-SpringChallenge/tree/main/src/main/resources/db/migration diagrama_foro_api

🔹Registro de un nuevo tópico

  La API debe tener un endpoint para el registro de nuevos tópicos y debe aceptar solicitudes POST para el URI /topicos.

[ POST ] http://localhost:8080/topicos
{
  "titulo": "IONIC 5",
  "mensaje": "Consulta de ionic 5 conexión con Myqsl",
  "status": "NO_RESPONDIDO",
  "usuario": {
    "id": "1"
  },
  "curso": {
    "id": "1"
  }
}

🔹Mostrar todos los tópicos

  La API debe tener un endpoint para la lista de todos los tópicos y debe aceptar solicitudes GET para el URI /topicos.

[ GET ] http://localhost:8080/topicos?size=10

🔹Detallando un tópico

  La API debe tener un endpoint para la lista de todos los tópicos y debe aceptar solicitudes GET para el URI /topicos/{id}.

[ GET ] http://localhost:8080/topicos/3

🔹Actualizar un tópico

  La API debe tener un endpoint para el registro de nuevos tópicos y debe aceptar solicitudes PUT para el URI /topicos/{id}.

[ PUT ] http://localhost:8080/topicos
{
  "id": 3,
  "titulo": "PHP 7",
  "mensaje": "Consulta de PHP 7 Conexión con mysql"
}

🔹Eliminar un tópico

  La API debe tener un endpoint para la eliminación de tópicos y debe aceptar requisiciones DELETE para el URI /topicos/{id}.

[ DELETE ] http://localhost:8080/topicos/3

📃 Challenge ONE - API REST - Spring 2

🔹Documentación con Swagger

  Swagger es una herramienta extremadamente ventajosa para tu API, ya que ofrece una interfaz fácil amigable y accesible, así como una forma de documentación automática, generada simultáneamente con el desarrollo de la API.

[ URL ] http://localhost:8080/login](http://localhost:8080/swagger-ui/index.html#/

🔹Generar un token usando JWT

  Para agregar mayor seguridad a tu aplicación, una opción muy ventajosa es requerir tokens para la autenticación.

[ POST ] http://localhost:8080/login
{
  "email": "user@email.com",
  "password": "123456"
}

🔹Autenticación con JWT

  Una vez que se genera el token con JWT, será necesario usarlo para autenticar el proceso de registros, eliminación, actualización.

{
  "jwTtoken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyQGVtYWlsLmNvbSIsImlzcyI6ImZvcm8gYXBpIiwiaWQiOjEsImV4cCI6MTY5NTUyNzMyMX0.-cKDRhNqzEKqg694sYGJ0l6e0CChS7dv3muGN2i1FhE"
}

  Endpoints


Endpoint Método Acceso Descripción
/login POST Público Genera par de tokens
/topicos GET Público Mostrar todos los tópicos creados
/topicos/{id} GET Público Mostrar un tópico específico
/topicos POST Privado/Protegido Crear un nuevo tópico
/topicos PUT Privado/Protegido Actualizar un tópico
/topicos/{id} DELETE Privado/Protegido Eliminar un tópico

📚 Tecnologías

📝 Dependencias utilizadas

Link: https://github.com/DarioDev90/Foro-Alura-SpringChallenge/blob/main/pom.xml


📝 Estructura del proyecto

Link: https://github.com/DarioDev90/Foro-Alura-SpringChallenge/tree/main/src/main/java/org/dariodev/foro/api

📝 Commits realizados:

Link: https://github.com/DarioDev90/Foro-Alura-SpringChallenge/commits/main


insignia DarioDev