我有一个用Express制作的API Rest,这是由iOS客户端使用的。有时我必须对某些端点进行更改(Breaking Changes),我将发布一个新的iOS应用程序,但如果客户端运行应用程序并部署新的后端,可能并非所有用户都更新客户端事件版本
@MikeBrant如何建议我缩小范围
我正在使用
我没有使用像sailjs或loopback这样的框架
答案 0 :(得分:1)
首先,REST用于消耗资源,而且可以 认为你准确地使用它来将它与后端实现分离 (这意味着它并不关心你使用哪个数据库,框架......)。
其次,如果你真的完全实现了第一个版本,那么 它应该被冻结,这意味着不要触及后端实现 对于那个经文,复制路线并相应地更改它们。
恕我直言(我会做什么):
现在这就是它开始变得棘手的问题所在。 如果它只是模型域(可以保存/检索的新数据)比这容易。具有依赖于属性的getter / setter的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实际上已被弃用。
我希望这在某种程度上对你有用。如果您有更多,请告诉我 问题或者您是否可以更详细地指出您的问题,我会尝试 更新答案。 `
答案 1 :(得分:0)
Mike是正确的,很难说出针对您的特定API的最佳解决方案。但是,为了向您提供可能的解决方案,这是维护不同API版本的一种非常简单的方法。当然,这是基于许多假设,可能不是您的API的最佳或最干净的解决方案。
对于简单的API,您可以通过在应用中定义常量来维护不同的版本。此常量将是API端点根目录的路径。通常,这将与您的应用程序的版本具有相同的名称,例如" myApp / v1-8-5 /"假设您的应用版本是1.8.5。在服务器端,您将为应用程序的每个版本维护一个包含完整API的目录。应用程序的每个新版本都会更新常量并将新目录添加到端点。
这不是最优雅的解决方案,如前所述,它可能不是满足您需求的最佳解决方案,但它是一种解决方案....