Перейти к содержанию

Архитектура SDK

SDK построен вокруг одного публичного фасада AvitoClient. Он создаёт доменные объекты, а доменные объекты делегируют HTTP-операции section client-ам. Transport отвечает за httpx, retry, token injection и маппинг ошибок. Mappers преобразуют JSON в публичные dataclass-модели.

flowchart LR
    user[Пользовательский код] --> facade[AvitoClient]
    facade --> domain[Доменный объект]
    domain --> section[SectionClient]
    section --> transport[Transport]
    transport --> auth[AuthProvider]
    transport --> api[Avito API]
    section --> mapper[Mapper]
    mapper --> model[SDK model]

Такое разделение удерживает публичный API простым: пользовательский код работает с доменными объектами и typed-моделями, но не управляет заголовками, refresh token-flow, retry-циклами или JSON-маппингом вручную.

Границы слоёв

Слой Ответственность
AvitoClient Единая точка входа, context manager, фабрики доменных объектов
Domain object Публичные методы конкретного сценария, например account().get_self()
Section client HTTP path, method, payload и выбор mapper-а для одного API-раздела
Transport httpx.Client, retry, timeouts, auth header, error mapping
AuthProvider Получение, кэширование и инвалидирование токенов
Mapper Преобразование JSON-ответа в публичную SDK-модель

Публичные методы не возвращают raw dict и не принимают transport-layer request DTO. Если операция требует сложный payload, доменный метод раскрывает понятные keyword-only параметры или публичную модель, закреплённую в reference.