HTTP и Базы данных
Для взаимодействия с внешним миром (API бэкенда) и сохранения данных (БД) codex-bot предоставляет набор базовых абстракций, которые минимизируют рутинный код настройки подключений.
🌐 HTTP Клиент (BaseApiClient)
BaseApiClient — это обертка над библиотекой httpx, оптимизированная для работы в асинхронном режиме.
Ключевые особенности:
- Connection Pooling: Клиент создается один раз в контейнере и переиспользует TCP-соединения. Это значительно ускоряет работу при частых запросах к API.
- Типизация ответов: Автоматически парсит JSON-ответы и предоставляет механизмы для обработки ошибок (ApiClientError).
- 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 — место инициализации клиентов.