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
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.
https://github.com/alura-challenges/challenge-one-foro-alura
Link: https://github.com/DarioDev90/Foro-Alura-SpringChallenge/tree/main/src/main/resources/db/migration
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"
}
}
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
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
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"
}
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
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#/
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"
}
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"
}
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 |
- OpenJDK JDK 17
- IntelliJ IDEA Community Edition
- Spring Boot 3.0.6
- Spring Initializr
- MySQL 8.0.30
- MySQL Workbench
- Insomnia
- Lombok
- Flyway
- Swagger
- JWT
Link: https://github.com/DarioDev90/Foro-Alura-SpringChallenge/blob/main/pom.xml
Link: https://github.com/DarioDev90/Foro-Alura-SpringChallenge/tree/main/src/main/java/org/dariodev/foro/api
Link: https://github.com/DarioDev90/Foro-Alura-SpringChallenge/commits/main