Giter Club home page Giter Club logo

julian1699 / knowledge-api-rest Goto Github PK

View Code? Open in Web Editor NEW
3.0 1.0 0.0 52.3 MB

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.

Java 100.00%
docker hibernate jwt postgresql spring spring-jpa spring-security springboot3 swagger

knowledge-api-rest's Introduction

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.

knowledge-api-rest's People

Contributors

julian1699 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.