Версионирование¶
Версионирование позволяет изменить ответ endpoint'а, не ломая приложения,
которые им уже пользуются: старые клиенты продолжают ходить в /v1, новые
получают /v2.
В EndoCore это не подсистема, а частный случай роутинга. Первый сегмент пути,
совпадающий с ^v\d+$, — это версия, и это просто папка.
Модель¶
- Версия применяется ко всему endpoint'у со всеми его методами.
v1иv2сосуществуют — старые клиенты продолжают работать.- После создания
v2версияv1ведёт себя идентично прежнему. Если бы изменение вv2могло задетьv1, версионирование было бы фикцией.
Api/
v1/User/Role/Post.py # POST /v1/user/role (старый контракт)
v2/User/Role/Post.py # POST /v2/user/role (новый контракт)
Создание версии¶
endo version create 2 # копировать последнюю версию -> v2
endo version create 2 --from 1 # ответвиться от конкретной версии
endo version create 2 --empty # каркас без тел обработчиков
endo version list # v1, v2
endo version create — это shutil.copytree с фильтром: копируются
endpoint'ы и локальные сервисы, а импорты с указанием версии
перенаправляются, чтобы v2 использовала свои сервисы — и никогда сервисы v1.
Локальные и глобальные сервисы¶
Api/v1/User/Services/create_role.py # ЛОКАЛЬНЫЙ — версионируется, копируется в v2
Services/auth_service.py # ГЛОБАЛЬНЫЙ — общий для всех версий
- Локальные сервисы (
Api/vN/.../Services/) версионируются и копируются, поэтому изменение в v2 не может задеть v1. - Глобальные сервисы (
/Services/в корне приложения) общие для всех версий и никогда не копируются.
Именно это разделение делает версионирование честным: правки v2 касаются только локального кода и endpoint'ов v2.
Создание endpoint'ов в версии¶
endo create user/role post # в последнюю версию
endo create v2/user/role post # в явно указанную версию
Без префикса vN команда endo create нацеливается на последнюю существующую
версию (или v1, если версий ещё нет).