gpt4 book ai didi

javascript - 维护 API Rest 的多个版本

转载 作者:可可西里 更新时间:2023-11-01 06:05:54 25 4
gpt4 key购买 nike

我有一个用 Express 制作的 API Rest,它由 iOS 客户端使用。有时我必须对某些端点进行更改(重大更改),我将发布一个新构建的 iOS 应用程序,但如果客户端正在运行应用程序并且我部署了新的后端版本,则可能不会所有用户都更新客户端事件。

  1. 如何维护多个版本的后端?
  2. 在代码中没有复杂规则的情况下执行此操作的好方法是什么
  3. 如果我执行不同的多个基础实例并使用正确的版本响应每个客户端,现在要处理数据库吗?

@MikeBrant 如何建议我缩小范围

我正在使用

  • Node
  • express
  • Postgres

我没有使用像 sailjs 或 loopback 这样的框架

最佳答案

首先,REST 是用来消耗资源的,你可以争辩说您使用它恰恰是为了将其与后端实现分离(这意味着它不关心您使用哪个数据库、框架……)。

其次,如果你真的有第一个版本的完整实现,那么它应该被卡住,这意味着不要触及后端实现对于该版本,复制路线并相应地更改它们。

恕我直言(我会做什么):

  1. 为第一个版本编写测试,这样你就不会破坏某些东西(强制性)
  2. 用 REST 版本作为你的 url 的前缀(和其他人一样,这里没有什么新东西),例如:api/v1/... 或类似的东西
  3. 由于您使用的是 express,因此您始终可以在路由前添加一些变量,假设是 apiPath(首先是“api/v1”,“api/v2”),因此您最终会得到类似 app.delete(apiPath + '/照片/:id')

现在这就是它开始变得棘手的地方,这就是您的问题所在。如果它只是模型域(可以保存/检索的新数据)那么这很容易。使用根据属性使用属性的 getters/setters 补充模型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 实际上已被弃用。

我希望这在某种程度上对您有用。让我知道你是否有更多问题或者您是否可以更详细地说明您的问题,我会尝试更新答案。`

关于javascript - 维护 API Rest 的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30871837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com