- Java 21
- Maven 3.9+
mvn clean install
mvn spring-boot:runProbar 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
BlueprintsFiltery cámbialas porIdentityFiltercon@Primaryo usando configuración de Spring.
Abrir en navegador:
- Swagger UI: http://localhost:8080/swagger-ui.html
- OpenAPI JSON: http://localhost:8080/v3/api-docs
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.
- Revisa el paquete
modelcon las clasesBlueprintyPoint. - Entiende la capa
persistenceconInMemoryBlueprintPersistence. - Analiza la capa
services(BlueprintsServices) y el controladorBlueprintsAPIController.
- Configura una base de datos PostgreSQL (puedes usar Docker).
- Implementa un nuevo repositorio
PostgresBlueprintPersistenceque reemplace la versión en memoria. - Mantén el contrato de la interfaz
BlueprintPersistence.
- 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:
Ejemplo JSON:
public record ApiResponse<T>(int code, String message, T data) {}
{ "code": 200, "message": "execute ok", "data": { "author": "john", "name": "house", "points": [...] } }
- Configura
springdoc-openapien el proyecto. - Expón documentación automática en
/swagger-ui.html. - Anota endpoints con
@Operationy@ApiResponse.
- Implementa filtros:
- RedundancyFilter: elimina puntos duplicados consecutivos.
- UndersamplingFilter: conserva 1 de cada 2 puntos.
- Activa los filtros mediante perfiles de Spring (
redundancy,undersampling).
-
Repositorio en GitHub con:
- Código fuente actualizado.
- Configuración PostgreSQL (
application.ymlo script SQL). - Swagger/OpenAPI habilitado.
- Clase
ApiResponse<T>implementada.
-
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.
| 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.