API Rest en Java, desarrollando operaciones CRUD con MySQL, usando Flyway para migración de API, validaciones usando Bean Validation y fundamentos de Autenticación y Autorización
Crear un proyecto Spring Boot usando el sitio web Spring Initializr;
Importar el proyecto a IntelliJ y ejecutar una aplicación Spring Boot a través de la clase que contiene el método main;
Crear una clase Controller y mapear una URL en él usando las anotaciones @RestController y @RequestMapping;
Realizar una solicitud de prueba en el navegador accediendo a la URLmapeada en el Controller.
Request POST
Mapear solicitudes POST en una clase Controller;
Enviar solicitudes POST a la API usando Insomnia;
Enviar datos a la API en formato JSON;
Utilizar la anotación @RequestBody para recibir datos del cuerpo de la solicitud en un parámetro en el Controller;
Use el padrón DTO (Data Transfer Object), a través de Java Records, para representar los datos recibidos en una solicitud POST.
Spring Data JPA
Agregar nuevas dependencias en el proyecto;
Asignar una entidad JPA y crear una interfaz de Repositorio para ella;
Utilizar Flyway como herramienta de migración de proyectos;
Realice validaciones con Bean Validation usando algunas de sus anotaciones, como @NotBlank.
Request GET
Usar la anotación @GetMapping para mapear métodos en los Controllers que producen datos;
Usar la interfaz Pageable de Spring para realizar consultas con paginación;
Controlar la paginación y el ordenamiento de los datos devueltos por la API con los parámetros page, size y sort;
Configurar el proyecto para que los comandos SQL se visualicen en la consola.
Request PUT y DELETE
Mapear solicitudes PUT con la anotación @PutMapping;
Escribir un código para actualizar la información de un registro en la base de datos;
Mapear solicitudes DELETE con la anotación @DeleteMapping;
Mapear parámetros dinámicos en la URL con la anotación @PathVariable;
Implementar el concepto de exclusión lógica utilizando un atributo booleano.
Aplicando las mejores prácticas y proteger una API REST
Buenas Prácticas
Usar la clase ResponseEntity, de Spring, para personalizar los retornos de los métodos de una clase Controller;
Modificar el código HTTP devuelto en las respuestas de la API;
Agregar encabezados a las respuestas de la API;
Utilice los códigos HTTP más apropiados para cada operación realizada en la API.
Tratando Errores
Crear una clase para aislar el manejo de excepciones de API, utilizando la anotación @RestControllerAdvice;
Utilizar la anotación @ExceptionHandler, de Spring, para indicar qué excepción debe capturar un determinado método de la clase de manejo de errores;
Manejar errores 404 (Not Found) en la clase de manejo de errores;
Manejar errores 400 (Bad Request), para errores de validación de Bean Validation, en la clase de manejo de errores;
Simplificar el JSON devuelto por la API en casos de error de validación de Bean Validation.
Spring Security
Identificar cómo funciona el proceso de autenticación y autorización en una API Rest;
Agregar Spring Security al proyecto;
Cómo funciona el comportamiento padrón de Spring Security en una aplicación;
Implementar el proceso de autenticación en la API, de forma Stateless, utilizando clases y configuraciones de Spring Security.
JSON Web Token
Agregar la biblioteca Auth0 java-jwt como una dependencia del proyecto;
Utilizar esta biblioteca para generar un token en la API;
Inyectar una propiedad del archivo application.properties en una clase administrada por Spring, usando la anotación @Value;
Devolver un token generado en la API cuando un usuario se autentica.
Control de acceso
Los Filters funcionan en una solicitud;
Implementar un Filter creando una clase que herede de la clase OncePerRequestFilter de Spring;
Utilizar la biblioteca Auth0 java-jwt para validar los tokens recibidos en la API;
Realizar el proceso de autenticación de la solicitud, utilizando la clase SecurityContextHolder de Spring;
Liberar y restringir solicitudes, según la URL y el verbo del protocolo HTTP.
About
API Rest en Java, desarrollando operaciones CRUD con MySQL, usando Flyway para migración de API, validaciones usando Bean Validation y fundamentos de Autenticación y Autorización