Skip to content

En este proyecto, se desarrolla una API REST completa y accesible utilizando Spring Boot, Spring, Spring JPA, Spring Security, JWT, PostgreSQL, se documenta exhaustivamente con Swagger y se implementa a través de Docker. Su propósito principal es ofrecer una guía para el diseño de APIs REST simples.

Notifications You must be signed in to change notification settings

Julian1699/Knowledge-API-Rest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Api-Rest-For-Learning

| API REST | SpringBoot | Spring JPA | Spring Security | Hibernate | PostgreSQL | Swagger | JWT | Docker |

Spring+Postgres+Docker+Security+JWT+Docker

DOCKER

Como el api se encuentra dockerizada es necesario:

  1. Clona el repositorio específico de la rama 'main-security-in-memory-dockerized' con el siguiente comando:

image

  1. Una vez que se haya clonado el repositorio, se debe abrir una terminal de Git Bash en el directorio que contiene el proyecto.

image

  1. Ejecutar el comando de docker

    • $ docker compose up

image

  1. Luego de ejecutar el comando anterior se deben levantar los dos contenedores, pudiendose comprobar de manera visual, en el Docker Desktop asi:

image

  1. Se procede a abrir otra terminal en gitbash para que la anterior terminal siga corriendo el docker compose up.

  2. 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

image

  1. A continuación, se debe ejecutar el siguiente comando para conectarse a la base de datos:

    • $ psql -U postgres -d tryapi

image

  1. 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.

image

  1. Los datos deben ser pegados y a su vez insertados en la base de datos llamada tryapi, para su posterior utilización:

image

  1. Ahora se debe realizar la autenticacion de el usuario "admin" o "customer", así en el swagger:

image

  1. 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:

image

  1. En el botón "Authorize".

image

  1. Debes introducir el token BEARER para que con cada petición HTTP se cargue y envíe junto con el JWT.

image

  1. Después de haber presionado el botón "Authorize", procede a cerrar la ventana.

image

  1. 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.

image

  1. Consultar como consumir el API en la ruta generada por el Swagger: http://localhost:8080/swagger-ui/index.html#/

Configuración de Seguridad:

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.

API de Productos

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.

La API proporciona las siguientes características:

  • 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

La API está construida utilizando las siguientes tecnologías:

  • 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.

Documentación

La documentación de la API está disponible en Swagger: http://localhost:8080/swagger-ui/index.html#/

image

Endpoints

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.

About

En este proyecto, se desarrolla una API REST completa y accesible utilizando Spring Boot, Spring, Spring JPA, Spring Security, JWT, PostgreSQL, se documenta exhaustivamente con Swagger y se implementa a través de Docker. Su propósito principal es ofrecer una guía para el diseño de APIs REST simples.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages