Skip to content

Repository files navigation

API Gateway

Чистая архитектура для API Gateway на основе FastAPI.

Python 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

# Запуск с помощью Docker Compose
docker-compose up --build

# Или только приложение
docker build -t api-gateway .
docker run -p 8000:8000 --env-file=.env api-gateway

API Endpoints

Health Check

  • GET /default/ping - Проверка доступности сервиса
  • GET /default/ready - Проверка готовности к работе

Технологии

  • FastAPI - современный веб-фреймворк для создания API
  • Pydantic - валидация данных и конфигурации
  • AsyncPG - асинхронный драйвер PostgreSQL
  • HTTPX - асинхронный HTTP клиент для взаимодействия с внешними сервисами
  • Loguru - удобное логирование
  • Uvicorn - ASGI сервер для запуска приложения

Основные принципы

Проект следует принципам Clean Architecture:

  • Разделение ответственности - каждый слой имеет четко определенную роль
  • Независимость от фреймворков - бизнес-логика не зависит от FastAPI
  • Зависимость направлена внутрь - внешние слои зависят от внутренних
  • Тестируемость - легко писать unit и интеграционные тесты
  • Масштабируемость - структура поддерживает рост проекта
  • Типизация - использование type hints для повышения надежности кода

Структура слоев

Слой приложения (Application)

Управление жизненным циклом приложения, middleware, роутинг.

Слой сервисов (Services)

Бизнес-логика приложения, оркестрация репозиториев и клиентов.

Слой репозиториев (Repositories)

Абстракция для работы с данными, инкапсуляция логики доступа к БД.

Слой клиентов (Clients)

Взаимодействие с внешними HTTP API и микросервисами.

Инфраструктурный слой (Common)

Конфигурация, подключение к БД, общие утилиты.

Разработка

Форматирование кода

Проект использует:

  • Ruff - для линтинга и форматирования
  • MyPy - для проверки типов

Тестирование

Проект настроен для использования pytest с поддержкой асинхронных тестов.

About

API-Gateway clear structure

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages