Философия¶
Несколько решений объясняют в EndoCore всё остальное.
Дерево папок — это API¶
Роутинг, версионирование и CLI — один механизм, а не три. Все они работают с
каталогом Api/:
- папка — сегмент URL
- имя файла — HTTP-метод (
Get.py,Post.py, …) - папка
[id]— динамический сегмент - первая папка
vN— версия API
Источник истины один — дерево, поэтому код и маршруты не могут разойтись. Что лежит в папке, то сервер и отдаёт.
Тонкие endpoint'ы, логика в сервисах¶
Endpoint должен распарсить вход, вызвать сервис и вернуть ответ. Больше ничего.
Это не вопрос вкуса. Версионирование копирует файлы endpoint'ов, так что вся бизнес-логика внутри них будет дублироваться с каждой новой версией. Держите логику в сервисах — и новая версия останется тонкой обёрткой над тем же ядром.
Версии — это папки¶
Версия — это папка vN, а не поле в конфиге. v1 и v2 — отдельные деревья,
поэтому создание v2 физически не может изменить поведение v1. Старые
клиенты продолжают работать — это гарантирует структура, а не дисциплина.
Одна зависимость ядра¶
Ядру нужен ровно один внешний пакет: uvicorn, HTTP-транспорт. Резолвер,
загрузчик, Request/Response, middleware, ORM и CLI написаны на стандартной
библиотеке. PostgreSQL, шифрование файлов, Redis, Celery и pydantic —
опциональные extras.
Писать собственный HTTP-сервер не добавило бы идее ничего. uvicorn — разумная
граница «с нуля».
Безопасность по умолчанию¶
ORM передаёт каждое значение через драйвер, проверяет и квотирует каждый
идентификатор, принимает только известные lookup'ы, экранирует wildcard'ы в
LIKE и приводит LIMIT/OFFSET к числам. Логгер маскирует пароли и токены
до записи. Зашифрованные файлы бесполезны без ключа.
Ничего из этого не нужно включать.
Один сломанный файл не роняет приложение¶
Если файл endpoint'а не импортируется, ошибка попадает в сводку при старте, а
остальное приложение запускается как обычно. endo check покажет, что сломано.
Чтобы увидеть эти идеи в деле, начните с Быстрого старта или соберите небольшое приложение в Туториале.