Skip to content

HTTP и Базы данных

Для взаимодействия с внешним миром (API бэкенда) и сохранения данных (БД) codex-bot предоставляет набор базовых абстракций, которые минимизируют рутинный код настройки подключений.


🌐 HTTP Клиент (BaseApiClient)

BaseApiClient — это обертка над библиотекой httpx, оптимизированная для работы в асинхронном режиме.

Ключевые особенности:

  1. Connection Pooling: Клиент создается один раз в контейнере и переиспользует TCP-соединения. Это значительно ускоряет работу при частых запросах к API.
  2. Типизация ответов: Автоматически парсит JSON-ответы и предоставляет механизмы для обработки ошибок (ApiClientError).
  3. Metadata Ready: Спроектирован с учетом будущего внедрения паттерна Smart Resolver (обработка навигационных заголовков).

Пример использования:

class MyBackendClient(BaseApiClient):
    async def get_user(self, user_id: int):
        return await self._request("GET", f"/users/{user_id}")

🗄 База данных (SQLAlchemy)

Фреймворк поддерживает работу с любыми SQL базами через SQLAlchemy 2.0. В CLI-шаблонах по умолчанию настроена интеграция с aiosqlite (для разработки) и asyncpg (для продакшна).

Компоненты:

  • Engine Factory: Быстрое создание асинхронного движка БД с поддержкой пула соединений.
  • Middleware: Автоматическое создание сессии БД на каждый запрос (DatabaseTransactionMiddleware).
  • Alembic: Готовая конфигурация для миграций в корне проекта.

Как это работает:

Вы получаете сессию базы данных прямо в оркестратор через director.container.session (если подключена мидлварь) или используете репозитории, инициализированные в контейнере.


🧭 Связанные разделы

  • API: HTTP Client — описание методов _request.
  • Container — место инициализации клиентов.