feat: implementación de API de productos similares con Spring WebFlux - Iván Vázquez Pérez - #59
Open
ibrahivan wants to merge 3 commits into
Hidden character warning
The head ref may contain hidden characters: "feature/Iv\u00e1n-V\u00e1zquez-P\u00e9rez---BackendDevTest"
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 Solución implementada
Aplicación reactiva desarrollada con Spring Boot 3.3 que expone el endpoint:
GET /product/{productId}/similarDisponible en el puerto
5000, conforme al contrato definido ensimilarProducts.yaml.⚙️ Tecnología elegida
Spring WebFlux + WebClient
Se ha optado por una arquitectura reactiva y no bloqueante, en lugar del stack MVC clásico, para responder eficientemente a un escenario de alta concurrencia.
Motivos principales
WebClienty Netty, las operaciones de red son no bloqueantes, permitiendo que pocos hilos gestionen un volumen elevado de conexiones.flatMapSequentialpara lanzar las consultas de detalle en paralelo y, a la vez, preservar el orden original de los IDs similares en la respuesta final.🛡️ Resiliencia
2 segundosde espera de respuesta por cada petición HTTP individual al servicio externo. Los productos que superen ese límite se descartan automáticamente para garantizar la fluidez del servicio.404y5xxde productos individuales se ignoran de forma controlada, omitiendo esos productos silenciosamente sin interrumpir ni penalizar la respuesta global.ProductNotFoundException) que se traduce automáticamente en una respuestaHTTP 404.GlobalExceptionHandler, asegurando que la API devuelva siempre unHTTP 500en formato JSON en lugar del HTML de error por defecto.🐳 Docker
docker-compose.yml.📚 Documentación
Se han añadido comentarios Javadoc en español a todas las clases y métodos públicos para facilitar la comprensión y el mantenimiento de la solución técnica.
📁 Estructura del proyecto