| API REST | SpringBoot | Spring JPA | Spring Security | Hibernate | PostgreSQL | Swagger | JWT | Docker |
Como el api se encuentra dockerizada es necesario:
-
Clona el repositorio específico de la rama 'main-security-in-memory-dockerized' con el siguiente comando:
- $ git clone -b api-main-dockerized https://github.com/Julian1699/Knowledge-API-Rest.git
- Una vez que se haya clonado el repositorio, se debe abrir una terminal de Git Bash en el directorio que contiene el proyecto.
-
Ejecutar el comando de docker
- $ docker compose up
- Luego de ejecutar el comando anterior se deben levantar los dos contenedores, pudiendose comprobar de manera visual, en el Docker Desktop asi:
-
Se procede a abrir otra terminal en gitbash para que la anterior terminal siga corriendo el docker compose up.
-
En esta nueva terminal, se debe ingresar al contenedor que contiene la base de datos PostgreSQL con el siguiente comando:
- $ winpty docker exec -it db-postgres bash
-
A continuación, se debe ejecutar el siguiente comando para conectarse a la base de datos:
- $ psql -U postgres -d tryapi
- El archivo 'data.sql' en el directorio 'resources' contiene los datos que deben ser copiados e insertados en la base de datos 'tryapi' para su uso posterior.
- Los datos deben ser pegados y a su vez insertados en la base de datos llamada tryapi, para su posterior utilización:
- Ahora se debe realizar la autenticacion de el usuario "admin" o "customer", así en el swagger:
- Ahora se debe tomar el token BEARER que se genera por las credenciales empleadas, para ser utilizado de la siguiente manera en el paso 11:
- En el botón "Authorize".
- Debes introducir el token BEARER para que con cada petición HTTP se cargue y envíe junto con el JWT.
- Después de haber presionado el botón "Authorize", procede a cerrar la ventana.
- De esta manera, cada petición estará acompañada por el token BEARER y podrás consumir todos los endpoints que hayas autorizado para el usuario que generó el token.
- Consultar como consumir el API en la ruta generada por el Swagger: http://localhost:8080/swagger-ui/index.html#/
En este proyecto de Spring Security, se han creado dos usuarios en la base de datos postgres que requieren autenticación y tienen diferentes niveles de autorización.
- Primer Usuario (admin):
-Nombre de usuario: admin.
-Contraseña: admin.
-Rol: ADMIN.
Este usuario tiene permisos para realizar todas las operaciones HTTP (GET, POST, PUT, DELETE) de manera normal.
- Segundo Usuario (customer):
-Nombre de usuario: customer.
-Rol: CUSTOMER.
-Contraseña: customer.
El usuario "customer" tiene autorización solamente para realizar consultas a la base de datos utilizando el verbo HTTP GET.
Esta API RESTful proporciona una manera de gestionar datos de productos utilizando Spring Boot. Está diseñada para ser utilizada por desarrolladores que necesitan crear, leer, actualizar y eliminar productos.
- Obtener todos los productos: Recupera una lista de todos los productos disponibles en la base de datos.
- Agregar un nuevo producto: Agrega un nuevo producto a la base de datos.
- Actualizar un producto existente: Actualiza un producto existente en la base de datos.
- Eliminar un producto existente: Elimina un producto existente de la base de datos.
- Obtener un producto por ID: Recupera un producto por su identificador único.
- Buscar productos: Busca productos por nombre, referencia o categoría.
- Tecnologías utilizadas
- Java 17: La versión de Java.
- Spring Boot 3.0.10: Un potente marco de trabajo para construir aplicaciones web basadas en Java.
- Spring Data JPA: Simplifica el acceso y la gestión de bases de datos.
- Swagger: Proporciona documentación interactiva de la API.
- Hibernate Validator: Para la validación de los datos enviados en las solicitudes.
- Lombok: Reduce el código repetitivo.
- Cross-Origin Resource Sharing (CORS): Permite solicitudes entre dominios desde aplicaciones web.
La documentación de la API está disponible en Swagger: http://localhost:8080/swagger-ui/index.html#/
Los endpoints de la API son los siguientes:
- PUT /api/v1/product/put/{id}: Actualiza un producto existente.
- POST /api/v1/product/post: Agrega un nuevo producto.
- GET /api/v1/product/search/{search}: Busca productos por nombre, referencia o categoría.
- GET /api/v1/product/id/{id}: Obtiene un producto por ID.
- GET /api/v1/product/all: Obtiene todos los productos.
- DELETE /api/v1/product/delete/{id}: Elimina un producto existente.