Как разделять версии API REST?

Здравствуйте, хочу спросить у знающих людей, как лучше располагать версии API, в одном приложении или в разных, каждая версия это отдельное приложение? Сейчас я сделал несколько версий API в одном приложении, например https://site.com/v1/, https://site.com/v2/. Например, при падении приложения получается что падают все версии.
  • Вопрос задан
  • 1461 просмотр
Решения вопроса 4
DevMan
@DevMan
версионирование апи и падение приложения - вещи ваще никак не связанные.
ну окей, разнесете версии по отдельным приложениям и получится что при падении vX вроде как хорошо что будет работать vY. однако клиенты, использующие vX в это время будут сосать и им будет глубоко насрать на рабочий vY.

поэтому думать надо не над тем каким образом версионировать (оба подхода хороши, все зависит от задачи/потребности), а над тем как сделать, чтоб приложение не падало или быстро и автоматически само поднималось.
Ответ написан
zoonman
@zoonman
⋆⋆⋆⋆⋆
Зевая...
Сейчас вас тут научат микросервисам. Ага.


Ваша проблема в том, что приложение изначально ненадежно. Первое, что в таком случае нужно сделать, это запускать несколько копий приложения, если такое позволяет архитектура.
Поскольку у вас будет несколько запущенных копий приложения, вам потребуется балансировщик, чтобы управлять трафиком. Самый простой и дешевый - это nginx.
Например тупо запустить 2 копии приложения на одной машине, но на разных портах, например 8001 и 8002. А при настройке nginx указать два апстрима, первый с портом 8001, а второй 8002. И настроить отвал по таймауту (fail_timeout). Таймаут зависит от того, насколько быстро работает ваше приложение. У меня он 1 секунда, у вас может быть другое значение.

Для того, чтобы внезапно сдохшее приложение воскрешать, нужно поставить какой-нибудь супервизор, например тот же forever.

Обычно нода падает из-за катяхов в коде, жора памяти или отвала какой-нибудь фигни. Для того, чтобы за всем этим следить, следует поставить хоть какой-нибудь мониторинг ошибок. Например бесплатный sentry.

ЗЫ для любителей микросервисов: микросервисы не делают вашу архитектуру более устойчивой. Они делают ее более гибкой за счет замены одной реализации микросервиса другой. Например, у вас есть датацентр А, в котором вы храните файлы, которые сохраняются через микросервис. Внезапно там кишильбе-мишельбе-молния ударила, сервира уронила, файлы потеряло. Мат-перемат. Запиливается на коленке микросервис для датацентра Б, приложение перенастраивается. Полетели. Потом раскапывается из хлама бэкап, пишется скрипт, заливается в новый датацентр. Микросервисы хороши пока они микро. Микро понятие своеобразное, для меня оно означает - могу запилить за день в одиночку. Примеры: хранилка файлов, постановка задач в очередь, укорачивалка ссылок, счетчик переходов и т.п.

Опиум для народа
Ответ написан
Комментировать
teknik2008
@teknik2008
Расскажите про GOLANG. Мне интересно
Сделайте 2 приложения, 3...n. Вообще смотрите с сторону микросервисов. Если нужно сделать отказоустойчивое приложение.
Ответ написан
Комментировать
Dark_Scorpion
@Dark_Scorpion
Собственно ваша проблема в падениях, а не в разделение версий. Надо их устранить.
Но если нужно срочно, то подойдут микросервисы, но разделение по api/v1/, api/v2/ всё равно надо оставить, это необходима для тех кто пользуется вашим API.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы