Перво-наперво, REST для потребляющих ресурсы и один мог бы утверждать, что вы используете его именно для того, чтобы отделить его от реализации backend (что означает, что он не заботится о том, какая база данных, структура, ... вы используете).
Во-вторых, если у вас есть полная реализация для первой версии, то его необходимо заморозить, что в отношении означает, что не касайтесь реализации backend для этой версии, скопируйте маршруты и соответствующим образом измените их.
ИМХО (что я бы делать):
- Написать тест для первой версии, так что вы не нарушаете что-то (обязательное)
- Префикс ваши URLs с REST версии (как и все остальные, ничего нового здесь), например: api/v1/... или что-то в этом роде
- Поскольку вы используете экспресс, вы всегда можете прикрепить свои маршруты некоторой переменной, скажем apiPath ('api/v1' для первого, 'api/v2'), так что у вас получилось что-то вроде приложения.delete (apiPath + '/ photos /: id')
Теперь это то место, где оно начинает становиться сложным, и это домен вашей проблемы. Если это всего лишь модельный домен (новые данные могут быть сохранены/извлечены), это легко. Модели Suplement с геттерами/сеттерами, которые используют атрибуты в зависимости от версии API . Допустим, вы используете moongose: `
userSchema.virtual('v1_properties').get(function() {
return ['email', 'name'];
});
userSchema.virtual('v2_properties').get(function() {
return ['email', 'name', 'surname'];
});
modelSchema.virtual('attributes').get(function() {
// atributes that are prefixed with api version
var self = this;
var json = {};
self[apiVersion + '_properties'].foreach(function(key) {
json[key] = self[key];
});
return json;
});
` Для инкубационных вы делаете то же самое. Конечно Плохая идея для пары Версия API с моделями, это только, к примеру, цели.
К сожалению, это не исправит проблему, если вы изменили конкретную бизнес-логику. Помните, что по какой-то причине есть постыдка. Если ваши изменения действительно сломали что-то в более старых API, то я предполагаю, что - это всего лишь 2 варианта, отказ от первого API или миграция данных, когда пользователи действительно обновляют свои приложения. Если они используют разные версии приложений для одной учетной записи, это все равно означает, что для них старый API практично устарел.
Я надеюсь, что это было полезно для вас в некотором роде. Дайте мне знать, если у вас есть дополнительные вопросы или если вы можете указать вашу проблему более подробно, и я попробую , чтобы обновить ответ. `
Это слишком широкий вопрос, на который можно ответить здесь, так как существует множество способов, с помощью которых можно было бы использовать конечные точки с версией API, а применимость этих подходов может измениться в зависимости от того, какой тип фреймворка (если таковой имеется) используются. Кроме того, в некоторых случаях вам может потребоваться настроить совершенно разные наборы инфраструктуры для обработки различных версий API в зависимости от потребностей приложения и характера изменений между версиями. –
@MikeBrant вы можете дать несколько советов, как уменьшить область действия. – rkmax
На самом деле нет хорошего способа уменьшить объем этого вопроса. Нужно быть знакомым с вашей логикой приложения, хранилищем данных, механизмом маршрутизации и т. Д., Чтобы подумать о том, как наилучшим образом обеспечить управление версиями API для вашего варианта использования. –