API de datos de país
API de datos de país RESTful que obtiene información de países desde APIs externas, almacena los resultados en una base de datos MySQL y ofrece operaciones CRUD completas con soporte de caché. La API incluye obtención de datos de países desde REST Countries, tipos de cambio desde Open Exchange Rates, cálculo aproximado de PIB por país, generación de imágenes resumen con los principales países y manejo robusto de errores.
Características principales: obtención de datos desde REST Countries API; consulta de tipos de cambio desde Open Exchange Rates; cálculo estimado de PIB para cada país; almacenamiento y caché en MySQL; filtrado y ordenación por región, moneda y PIB; generación de imagen resumen con los países top; operaciones CRUD completas; manejo exhaustivo de errores y tiempos de espera configurables.
Instalación y despliegue: clonar el repositorio git clone https://github.com/ameh0429/country-api.git luego cd country-api instalar dependencias npm install axios canvas dotenv express mysql2 configurar variables de entorno creando un archivo .env en la raíz con las siguientes variables PORT=3000 DB_HOST=localhost DB_USER=root DB_PASSWORD=tu_contraseña DB_NAME=countries_db DB_PORT=3306 crear la base de datos en MySQL CREATE DATABASE countries_db ; iniciar el servidor npm start para desarrollo con recarga automática npm run dev El servidor crea automáticamente las tablas necesarias al arrancar.
Endpoints principales: 1. Refrescar datos de países Request: POST /api/countries/refresh Response: { message: Countries data refreshed successfully, total_countries: 250, last_refreshed_at: 2025-10-22T18:00:00.000Z }
2. Obtener todos los países Request: GET /api/countries Opciones: GET /api/countries?region=Africa GET /api/countries?currency=NGN GET /api/countries?sort=gdp_desc Parámetros de consulta: region filtro por región, currency filtro por código de moneda, sort opciones gdp_desc gdp_asc population_desc population_asc Response: [ { id: 1, name: Nigeria, capital: Abuja, region: Africa, population: 206139589, currency_code: NGN, exchange_rate: 1600.23, estimated_gdp: 25767448125.2, flag_url: https://flagcdn.com/ng.svg, last_refreshed_at: 2025-10-22T18:00:00Z } ]
3. Obtener país por nombre Request: GET /api/countries/Nigeria Response: { id: 1, name: Nigeria, capital: Abuja, region: Africa, population: 206139589, currency_code: NGN, exchange_rate: 1600.23, estimated_gdp: 25767448125.2, flag_url: https://flagcdn.com/ng.svg, last_refreshed_at: 2025-10-22T18:00:00Z }
4. Eliminar país Request: DELETE /api/countries/Nigeria Response: { message: Country deleted successfully }
5. Estado de la API Request: GET /api/status Response: { total_countries: 250, last_refreshed_at: 2025-10-22T18:00:00.000Z }
6. Obtener imagen resumen Request: GET /api/countries/image Response: PNG imagen con los principales países por PIB
Respuestas de error típicas: 404 Not Found { error: Country not found } 400 Bad Request { error: Validation failed, details: { currency_code: is required } } 503 Service Unavailable { error: External data source unavailable, details: Could not fetch data from REST Countries API } 500 Internal Server Error { error: Internal server error }
Esquema de datos de la tabla countries: id INT Auto Primary key, name VARCHAR(255) obligatorio, capital VARCHAR(255) opcional, region VARCHAR(100) opcional, population BIGINT obligatorio, currency_code VARCHAR(10) puede ser null, exchange_rate DECIMAL(20,6) opcional, estimated_gdp DECIMAL(30,2) opcional, flag_url TEXT opcional, last_refreshed_at TIMESTAMP auto
Lógica de monedas: si un país tiene varias monedas se almacena solo el primer código; si no hay monedas currency_code queda en null y estimated_gdp en 0; si la moneda no aparece en la API de tipos de cambio exchange_rate queda en null y estimated_gdp en null.
Cálculo del PIB estimado: estimated_gdp = population × multiplicador_aleatorio(1000-2000) ÷ exchange_rate Cada refresco genera un multiplicador aleatorio para cada país.
Estructura del proyecto: country-api/ src/ config database.js controllers countryController.js models countryModel.js routes countryRoutes.js services externalApiService.js imageService.js middleware validation.js errorHandler.js server.js cache summary.png .env .env.example package.json README.md
APIs externas utilizadas: REST Countries API endpoint https://restcountries.com/v2/all?fields=name,capital,region,population,flag,currencies para obtener información de países; Open Exchange Rates endpoint https://open.er-api.com/v6/latest/USD para tipos de cambio.
Variables de entorno y configuración: toda la configuración se hace vía .env variables como PORT DB_HOST DB_USER DB_PASSWORD DB_NAME DB_PORT. En producción usar credenciales seguras y servicios gestionados para MySQL con conexion pool y cifrado.
Manejo de errores y rendimiento: devoluciones 503 ante fallos de APIs externas, 500 para errores de base de datos, 400 para validaciones y 404 para recursos no encontrados. Mejora del rendimiento mediante índices en name region currency_code, pool de conexiones MySQL de 10 conexiones, caché en base de datos y timeouts de 10 segundos en llamadas externas.
Q2BSTUDIO es una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones empresariales, inteligencia artificial, ciberseguridad y servicios cloud. Ofrecemos desarrollo de aplicaciones a medida y software a medida para proyectos que van desde APIs y microservicios hasta plataformas completas e integraciones con agentes IA y soluciones de ia para empresas. Si necesita crear o adaptar una plataforma le recomendamos visitar nuestra página de desarrollo de aplicaciones y software a medida y para despliegues escalables y seguros conozca nuestros servicios cloud AWS y Azure.
Servicios destacados de Q2BSTUDIO: aplicaciones a medida, inteligencia artificial aplicada a negocio, agentes IA, servicios inteligencia de negocio y power bi, ciberseguridad y pentesting, automatización de procesos, migración y operaciones en la nube. Palabras clave integradas: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.
Contacto y siguiente pasos: si desea una versión personalizada de esta API, integración con Power BI para cuadros de mando o una consultoría en seguridad y despliegue cloud, nuestro equipo puede ayudar a dimensionar la solución, adaptar la arquitectura y desplegarla de forma segura y escalable.
Comentarios