Demostracion de un REST API con FastAPI para el procesamiento, almacenamiento y distribución de datos meteorológicos en tiempo real, pronosticados e históricos.
La data esta siendo obtenida del API Open-Meteo. Lo ideal es tener data propia obtenida mediante estaciones y modelos(pronósticos) para hostearlos en el servidor.
- FastAPI — Framework web async de alto rendimiento
- Python — Lenguaje principal
- SQLite / SQLAlchemy — Base de datos y ORM
- Open-Meteo API — Fuente de datos meteorológicos (sin API key)
- Pydantic — Validación de datos y schemas
api-pronosticos/
├── app/
│ ├── __init__.py
│ ├── main.py # Punto de entrada de FastAPI
│ ├── core/
│ │ ├── __init__.py
│ │ ├── config.py # Configuración de la app
│ │ └── database.py # Conexión a base de datos
│ ├── models/
│ │ ├── __init__.py
│ │ └── weather.py # Modelos SQLAlchemy
│ ├── schemas/
│ │ ├── __init__.py
│ │ └── weather.py # Schemas Pydantic
│ ├── routers/
│ │ ├── __init__.py
│ │ ├── weather.py # Endpoints de tiempo actual
│ │ ├── forecast.py # Endpoints de pronóstico
│ │ └── historical.py # Endpoints de datos históricos
│ └── services/
│ ├── __init__.py
│ ├── weather_service.py # Lógica de negocio
│ └── open_meteo.py # Cliente de Open-Meteo
├── tests/
│ ├── __init__.py
│ ├── test_weather.py
│ └── conftest.py
├── data/ # Base de datos SQLite
├── requirements.txt
├── .gitignore
└── README.md
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/v1/weather/current |
Tiempo actual por coordenadas |
| GET | /api/v1/weather/current/{city} |
Tiempo actual por ciudad |
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/v1/forecast/daily |
Pronóstico diario (hasta 16 días) |
| GET | /api/v1/forecast/hourly |
Pronóstico horario (hasta 48h) |
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/v1/historical/daily |
Datos históricos diarios |
| GET | /api/v1/historical/stats |
Estadísticas del período |
| Método | Ruta | Descripción |
|---|---|---|
| GET | / |
Info de la API |
| GET | /health |
Health check |
| GET | /docs |
Documentación Swagger |
pip install -r requirements.txtuvicorn app.main:app --reload --port 8000La documentación interactiva estará disponible en: http://localhost:8000/docs
# Clima actual en Ciudad de México
curl "http://localhost:8000/api/v1/weather/current?latitude=19.43&longitude=-99.13"
# Pronóstico 7 días en Madrid
curl "http://localhost:8000/api/v1/forecast/daily?latitude=40.42&longitude=-3.70&days=7"
# Datos históricos
curl "http://localhost:8000/api/v1/historical/daily?latitude=-34.60&longitude=-58.38&start_date=2024-01-01&end_date=2024-12-31"Red Nimbus - A.R
Proyecto de portafolio — Meteorología + Backend Development