
generated with BackendIM... (backend.im)
Weather Data API
A powerful and efficient REST API for retrieving weather data from OpenWeatherMap. Built with FastAPI and SQLite.
Features
- Current Weather Data: Get real-time weather data for any location by city name or coordinates
- Weather Forecasts: Retrieve 5-day weather forecasts
- Historical Data: Access historical weather data stored in the database
- Built-in Caching: Reduces API calls to OpenWeatherMap with intelligent caching
- Error Handling: Comprehensive error handling with clear error messages
- Database Integration: Stores weather data in SQLite for persistence
- Swagger Documentation: Interactive API documentation available at
/docs
- Health Check Endpoint: Easily verify API operational status
API Endpoints
GET /api/v1/weather/current
: Get current weather dataGET /api/v1/weather/forecast
: Get weather forecast dataGET /api/v1/weather/cities
: Get list of cities in the databaseGET /api/v1/weather/history/{city_id}
: Get historical weather data for a cityGET /health
: Health check endpoint
Tech Stack
- FastAPI: High-performance web framework for building APIs
- SQLAlchemy: SQL toolkit and ORM for database interactions
- Pydantic: Data validation and settings management
- Alembic: Database migration tool
- httpx: Asynchronous HTTP client for external API calls
- SQLite: Lightweight relational database
- Tenacity: Retry library for robust API calls
Getting Started
Prerequisites
- Python 3.8+
- pip package manager
Installation
-
Clone the repository:
git clone <repository-url> cd weatherdataapi
-
Install dependencies:
pip install -r requirements.txt
-
Run database migrations:
alembic upgrade head
-
Start the server:
uvicorn main:app --reload
-
Visit the API documentation:
http://localhost:8000/docs
Environment Variables
The API can be configured using the following environment variables:
OPENWEATHERMAP_API_KEY
: Your OpenWeatherMap API key (default is provided)CACHE_EXPIRE_IN_SECONDS
: Duration for which to cache weather data (default: 1800 seconds)
Database Schema
The API uses two main data models:
- City: Stores information about cities (name, country, coordinates)
- WeatherRecord: Stores weather data points (temperature, humidity, etc.)
Example Requests
Get Current Weather by City Name
GET /api/v1/weather/current?city=London&country=GB
Get Weather Forecast by Coordinates
GET /api/v1/weather/forecast?lat=51.5074&lon=0.1278
Get Historical Weather Data
GET /api/v1/weather/history/1?start_date=2023-01-01T00:00:00Z&end_date=2023-01-02T00:00:00Z
Description
Languages
Python
98.7%
Mako
1.3%