Как стать автором
Обновить

Готовим версионирование API в PHP-фреймворках: разбор способов и работа с организацией кода

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров8.6K
Всего голосов 19: ↑19 и ↓0+19
Комментарии11

Комментарии 11

Вопрос к разделу об организации кода.

Т.е. даже если мы меняем один метод в одном контроллере мы должны прицепом скопировать все остальные контроллеры без изменений?

Всегда это казалось каким то оверхедом... может для этой цели использовать схемы API Gateway и описывать только изменённые пути, а остальные направлять на предыдущую версию, которая в свою очередь на другую вплоть до 1 версии

Спасибо за вопрос! Если я правильно понимаю, вы имеет в виду crud целиком. Конечно, возможен и такой вариант. Очень зависит от архитектуры в вашем проекте. Мне ближе всё-таки перетащить всё целиком и таким образом не связывать новую версию со старой, даже если изменения небольшие.

Особенность проекта в том, что бэкенд деплоился достаточно быстро, это занимало минуту‑полторы, а с фронтендом было сложнее, он деплоился долго — 10–15 минут.

А есть еще база данных, которая может мигрировать (даже если все без ошибок) часами...

К пункту Явное указание версии в пути. на случай если в пути не указана версия, считать это актуальной стабильной версией. А в файловой системе это определять симлинком. Конечно если это позволяет проект.

Можно, конечно. Но это может сломать интеграцию кому-то после выкатки очередной версии. Я придерживаюсь идеи, что явное лучше неявного.

Хорошая статья! Хотелось бы отметить, что на практике порой большей проблемой является попытка совместить бизнес-логику разных версий API.

Классический пример. Есть crud-набор API-методов работы с пользователями. У пользователей есть поле phone. Делаем фичу, чтобы пользователи могли указывать несколько телефонов. В новой версии API или в текущей же вводим поле-коллекцию phones. И возникает вопрос, что делать, когда через старую версию API редактируют пользователя, передавая новый телефон в phone, когда в базе у редактируемого пользователя уже лежит несколько телефонов, установленных ранее через новую версию API.

На первом скрине код интересный. Второе условие когда-нибудь выполнялось?

Спасибо за замечание. Думаю всё-таки стоит учитывать, что это, скорее, псевдокод)

Подскажите, пожалуйста, а когда в uri указывает версию апи то там полностью по semver надо указывать?

Думаю это зависит от того насколько подробно вы хотите версионировать. Нужно понимать, что если вы хотите по semver версионировать, то и совместимость нужно поддерживать соответственную.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий