Skip to content

Lab Guides students to design and build a REST API for managing blueprints and points using Java 21 and Spring Boot. The lab covers persistence with PostgreSQL, REST best practices (versioning, HTTP codes, uniform responses), filters, and API documentation with OpenAPI 3.0.

License

Notifications You must be signed in to change notification settings

DECSIS-ECI/Lab_P1_BluePrints_Java21_API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laboratorio #4 – REST API Blueprints (Java 21 / Spring Boot 3.3.x)

Escuela Colombiana de Ingeniería – Arquitecturas de Software


📋 Requisitos

  • Java 21
  • Maven 3.9+

▶️ Ejecución del proyecto

mvn clean install
mvn spring-boot:run

Probar con curl:

curl -s http://localhost:8080/blueprints | jq
curl -s http://localhost:8080/blueprints/john | jq
curl -s http://localhost:8080/blueprints/john/house | jq
curl -i -X POST http://localhost:8080/blueprints -H 'Content-Type: application/json' -d '{ "author":"john","name":"kitchen","points":[{"x":1,"y":1},{"x":2,"y":2}] }'
curl -i -X PUT  http://localhost:8080/blueprints/john/kitchen/points -H 'Content-Type: application/json' -d '{ "x":3,"y":3 }'

Si deseas activar filtros de puntos (reducción de redundancia, undersampling, etc.), implementa nuevas clases que implementen BlueprintsFilter y cámbialas por IdentityFilter con @Primary o usando configuración de Spring.


Abrir en navegador:


🗂️ Estructura de carpetas (arquitectura)

src/main/java/edu/eci/arsw/blueprints
  ├── model/         # Entidades de dominio: Blueprint, Point
  ├── persistence/   # Interfaz + repositorios (InMemory, Postgres)
  │    └── impl/     # Implementaciones concretas
  ├── services/      # Lógica de negocio y orquestación
  ├── filters/       # Filtros de procesamiento (Identity, Redundancy, Undersampling)
  ├── controllers/   # REST Controllers (BlueprintsAPIController)
  └── config/        # Configuración (Swagger/OpenAPI, etc.)

Esta separación sigue el patrón capas lógicas (modelo, persistencia, servicios, controladores), facilitando la extensión hacia nuevas tecnologías o fuentes de datos.


📖 Actividades del laboratorio

1. Familiarización con el código base

  • Revisa el paquete model con las clases Blueprint y Point.
  • Entiende la capa persistence con InMemoryBlueprintPersistence.
  • Analiza la capa services (BlueprintsServices) y el controlador BlueprintsAPIController.

2. Migración a persistencia en PostgreSQL

  • Configura una base de datos PostgreSQL (puedes usar Docker).
  • Implementa un nuevo repositorio PostgresBlueprintPersistence que reemplace la versión en memoria.
  • Mantén el contrato de la interfaz BlueprintPersistence.

3. Buenas prácticas de API REST

  • Cambia el path base de los controladores a /api/v1/blueprints.
  • Usa códigos HTTP correctos:
    • 200 OK (consultas exitosas).
    • 201 Created (creación).
    • 202 Accepted (actualizaciones).
    • 400 Bad Request (datos inválidos).
    • 404 Not Found (recurso inexistente).
  • Implementa una clase genérica de respuesta uniforme:
    public record ApiResponse<T>(int code, String message, T data) {}
    Ejemplo JSON:
    {
      "code": 200,
      "message": "execute ok",
      "data": { "author": "john", "name": "house", "points": [...] }
    }

4. OpenAPI / Swagger

  • Configura springdoc-openapi en el proyecto.
  • Expón documentación automática en /swagger-ui.html.
  • Anota endpoints con @Operation y @ApiResponse.

5. Filtros de Blueprints

  • Implementa filtros:
    • RedundancyFilter: elimina puntos duplicados consecutivos.
    • UndersamplingFilter: conserva 1 de cada 2 puntos.
  • Activa los filtros mediante perfiles de Spring (redundancy, undersampling).

✅ Entregables

  1. Repositorio en GitHub con:

    • Código fuente actualizado.
    • Configuración PostgreSQL (application.yml o script SQL).
    • Swagger/OpenAPI habilitado.
    • Clase ApiResponse<T> implementada.
  2. Documentación:

    • Informe de laboratorio con instrucciones claras.
    • Evidencia de consultas en Swagger UI y evidencia de mensajes en la base de datos.
    • Breve explicación de buenas prácticas aplicadas.

📊 Criterios de evaluación

Criterio Peso
Diseño de API (versionamiento, DTOs, ApiResponse) 25%
Migración a PostgreSQL (repositorio y persistencia correcta) 25%
Uso correcto de códigos HTTP y control de errores 20%
Documentación con OpenAPI/Swagger + README 15%
Pruebas básicas (unitarias o de integración) 15%

Bonus:

  • Imagen de contenedor (spring-boot:build-image).
  • Métricas con Actuator.

About

Lab Guides students to design and build a REST API for managing blueprints and points using Java 21 and Spring Boot. The lab covers persistence with PostgreSQL, REST best practices (versioning, HTTP codes, uniform responses), filters, and API documentation with OpenAPI 3.0.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published