Вопрос проверяет понимание архитектурных границ приложения и принципа разделения ответственности.
HTTP-слой отвечает за транспорт, а не за правила бизнеса. Если смешивать бизнес-логику с обработкой HTTP-запросов, код становится жёстко связанным и плохо тестируемым. Любое изменение протокола начинает влиять на бизнес-правила. Разделение делает систему гибче и надёжнее.
HTTP — это всего лишь способ доставки данных, а бизнес-логика должна быть независима от конкретного транспорта.
HTTP-слой занимается:
разбором входного запроса
валидацией DTO
выбором HTTP-статуса
формированием ответа
Он не должен знать, как именно работают бизнес-правила.
Когда бизнес-логика живёт внутри endpoint’ов, появляются системные недостатки.
Жёсткая связность
логика зависит от FastAPI / Flask
сложно переиспользовать код в CLI, воркерах, cron-задачах
Плохая тестируемость
тесты требуют HTTP-клиента
сложно писать unit-тесты без сервера
Рост сложности endpoint’ов
длинные функции
try/except вперемешку с бизнес-кодом
Ограничения масштабирования
невозможно легко вынести логику в фоновые задачи
сложнее интегрироваться с очередями
endpoint — тонкий
бизнес-логика — в сервисах
инфраструктура — изолирована
def create_order(data):
validate_business_rules(data)
save_order(data)
HTTP-слой лишь вызывает этот код.
Отделение бизнес-логики от HTTP-слоя делает код тестируемым, переиспользуемым и устойчивым к изменениям архитектуры.