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

Здравствуйте, хочу спросить у знающих людей, как лучше располагать версии API, в одном приложении или в разных, каждая версия это отдельное приложение? Сейчас я сделал несколько версий API в одном приложении, например https://site.com/v1/, https://site.com/v2/. Например, при падении приложения получается что падают все версии.
  • Вопрос задан
  • 1470 просмотров
Решения вопроса 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.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы