API REST desarrollada con Spring Boot para calcular rutas óptimas entre diferentes ubicaciones utilizando el algoritmo de Dijkstra. La aplicación está optimizada para manejar grandes volúmenes de datos (hasta 10,000 rutas) manteniendo un rendimiento eficiente.
- ⚡ Optimizado para procesamiento de hasta 10,000 rutas
- 🔄 Implementación eficiente del algoritmo de Dijkstra
- 🗺️ Carga de mapas mediante archivos CSV
- 📊 Estructuras de datos optimizadas (ConcurrentHashMap, PriorityQueue)
- ✅ Cobertura completa de pruebas unitarias
- 🐳 Contenedorización con Docker
- Java 21+
- Spring Boot
- Docker
- Maven
# Compilar el proyecto
mvn clean install
# Ejecutar la aplicación
java -jar target/distance-api.jar# Construir la imagen
docker build -t distance-api .
# Ejecutar el contenedor
docker run -p 9091:9091 distance-api- Grafo: Implementado con
ConcurrentHashMappara operaciones thread-safe - Cola de Prioridad: Utilizada en Dijkstra para optimizar la selección de nodos
- Complejidad Temporal:
- Carga de rutas: O(n)
- Búsqueda de ruta: O((V + E) log V) donde V=vértices, E=aristas
POST /api/v1/mapa/cargar
Content-Type: multipart/form-data- Soporta archivos CSV de hasta 10,000 filas
- Validación de formato y datos
- Respuesta rápida gracias a estructuras optimizadas
GET /api/v1/ruta/camino?origen={origen}&destino={destino}- Implementación eficiente del algoritmo de Dijkstra
- Manejo de errores robusto
- Respuestas JSON optimizadas
FROM openjdk:21-jdk-slim
WORKDIR /app
COPY target/distance-api.jar app.jar
EXPOSE 9091
ENTRYPOINT ["java","-jar","app.jar"]- Pruebas unitarias extensivas
- Cobertura de casos límite
- Pruebas de carga para verificar el rendimiento con 10,000 rutas
La interfaz Swagger UI está disponible automáticamente al levantar la aplicación:
🔗 http://localhost:9091/swagger-ui
Puedes probar todos los endpoints directamente desde la interfaz web.
Se incluyen archivos CSV de ejemplo en la carpeta:
📁 src/docs/
├──rutas_10000.csv # Mapa grande con 10.000 filas
├──rutas_vacia.csv # Mapa simple para tests
-
Estructuras de Datos Eficientes:
ConcurrentHashMappara el grafo principalPriorityQueuepara el algoritmo de DijkstraArrayListpara listas de adyacencia
-
Optimizaciones:
- Validación temprana de datos
- Manejo eficiente de memoria
- Uso de estructuras thread-safe
-
Escalabilidad:
- Diseño preparado para alta concurrencia
- Optimizado para grandes volúmenes de datos
- Contenedorización para fácil escalado
- Puerto de la aplicación: 9091
- Endpoints de salud y métricas
- Logs estructurados
MIT
Javier Ferreira – @javaferso
Ver CONTRIBUTING.md para detalles.
Este proyecto cumple con todos los requisitos especificados:
- ✅ Manejo eficiente de 10,000 filas
- ✅ Implementado en Java 21+ con Spring Boot
- ✅ Estructuras de datos optimizadas
- ✅ Pruebas unitarias completas
- ✅ Imagen Docker disponible
