Путь запроса#
Что происходит после вызова метода?
Вызов метода роутера проходит один и тот же путь в синхронном и асинхронном клиентах. Дескриптор
связывает аргументы, а компилятор заранее проверяет контракт операции
(eazy_sdk.api,
eazy_sdk.compile.http_compiler).
flowchart TD
Call["Вызов метода"] --> Bind["Связать аргументы"]
Bind --> Plan["Получить скомпилированный контракт"]
Plan --> Values["Авторизация, зависимости, защиты"]
Values --> Attempt["Собрать текущую попытку"]
Attempt --> Pipeline["Конвейер представления"]
Pipeline --> Send["Отправить через handler"]
Send --> Normalize["Нормализовать ответ"]
Normalize --> Cases["Выбрать response case"]
Cases --> Result["Значение или типизированная ошибка"]
Порядок представления тела#
REQUEST_PIPELINE объявлен один раз и содержит шесть фиксированных стадий
(eazy_sdk.request.pipeline):
Проекция публичной модели в модель представления.
Конверт протокола.
Шифрование выбранных полей документа.
Кодирование документа в байты.
Шифрование готовых байтов.
Подпись окончательного запроса.
Подпись всегда последняя, поэтому она читает именно те байты, которые уйдут в транспорт. Набор
стадий закрыт; операция может пропустить неприменимую стадию, но не добавить новый вид стадии
(eazy_sdk.request.pipeline).
ExecutionCore выполняет объявленный порядок, а _AttemptRun хранит данные одной попытки.
Обработчик получает уже подготовленный запрос и возвращает нормализованный ответ
(eazy_sdk.clients.executor).
После транспорта Responses.inspect(...) сопоставляет ответ с декларациями операции. Ответ
со статусом перехода исполнитель ведёт сам, если операция не объявила на этот статус вариант. Обычный
вызов разворачивает результат, а .with_response(...) добавляет исходный нормализованный ответ
без второго сетевого пути
(eazy_sdk.response.cases).