Чистая архитектура для API Gateway на основе FastAPI.
Этот проект представляет собой API Gateway, построенный на основе принципов Clean Architecture. Архитектура обеспечивает разделение ответственности между слоями, что делает приложение тестируемым, масштабируемым и легко поддерживаемым.
Проект следует принципам Clean Architecture (также известной как Layered Architecture) с четким разделением на слои:
Примечание: Архитектура основана на принципах Clean Architecture, которая фокусируется на разделении слоев и независимости бизнес-логики от инфраструктуры. Это отличается от Domain-Driven Design (DDD), который дополнительно включает доменные сущности, value objects, агрегаты и bounded contexts.
API-Gateway/
├── src/
│ ├── application.py # Основной класс приложения
│ ├── bootstrap.py # Инициализация зависимостей
│ │
│ ├── clients/ # HTTP клиенты для внешних сервисов
│ │ └── base_client.py
│ │
│ ├── common/ # Общие компоненты
│ │ ├── config.py # Конфигурация приложения
│ │ ├── container.py # DI контейнер
│ │ └── database/ # Работа с БД
│ │ └── postgres.py
│ │
│ ├── interfaces/ # Интерфейсы и абстракции
│ │ ├── client.py
│ │ └── router.py
│ │
│ ├── models/ # Модели конфигурации
│ │ └── config.py
│ │
│ ├── repositories/ # Репозитории для работы с данными
│ │ └── example_repository.py
│ │
│ ├── routers/ # FastAPI роутеры
│ │ └── default.py
│ │
│ └── services/ # Бизнес-логика
│ └── example.py
│
├── main.py # Точка входа приложения
├── dockerfile # Docker образ
├── docker-compose.yml # Docker Compose конфигурация
└── pyproject.toml # Зависимости проекта
- Python 3.13+
- uv (рекомендуется) или pip
- PostgreSQL (для работы с БД)
git clone <repository-url>
cd API-Gateway
# Установите зависимости (с uv)
uv syncСоздайте файл .env в корне проекта:
DB_URL=postgres://postgres:postgres@localhost:5432/postgres# С помощью uv
uv run --env-file=.env main.pyПриложение будет доступно по адресу: http://localhost:8000
# Запуск с помощью Docker Compose
docker-compose up --build
# Или только приложение
docker build -t api-gateway .
docker run -p 8000:8000 --env-file=.env api-gatewayGET /default/ping- Проверка доступности сервисаGET /default/ready- Проверка готовности к работе
- FastAPI - современный веб-фреймворк для создания API
- Pydantic - валидация данных и конфигурации
- AsyncPG - асинхронный драйвер PostgreSQL
- HTTPX - асинхронный HTTP клиент для взаимодействия с внешними сервисами
- Loguru - удобное логирование
- Uvicorn - ASGI сервер для запуска приложения
Проект следует принципам Clean Architecture:
- Разделение ответственности - каждый слой имеет четко определенную роль
- Независимость от фреймворков - бизнес-логика не зависит от FastAPI
- Зависимость направлена внутрь - внешние слои зависят от внутренних
- Тестируемость - легко писать unit и интеграционные тесты
- Масштабируемость - структура поддерживает рост проекта
- Типизация - использование type hints для повышения надежности кода
Управление жизненным циклом приложения, middleware, роутинг.
Бизнес-логика приложения, оркестрация репозиториев и клиентов.
Абстракция для работы с данными, инкапсуляция логики доступа к БД.
Взаимодействие с внешними HTTP API и микросервисами.
Конфигурация, подключение к БД, общие утилиты.
Проект использует:
- Ruff - для линтинга и форматирования
- MyPy - для проверки типов
Проект настроен для использования pytest с поддержкой асинхронных тестов.