关于根据版本号改动 API 返回值的问题

2021-12-20 15:48:06 +08:00
 pangtianyu

有一个问题想请教一下各位大佬。我有一个 API 服务,部分元素会根据不同 version 返回不同的内容。例如:

// version 1.0.0
{
  "data": {
    "a": "a1", 
    "b": "b1", 
    "c": "c1", 
    "d": "d1"
  }
}

// version 1.0.1
{
  "data": {
    "a": "a1-1.0.1",  // a 在 1.0.1 版本更新了内容,其余元素不变
    "b": "b1", 
    "c": "c1", 
    "d": "d1"
  }
}

// verison 2.0.0
{
  "data": {
    "a": "a1-1.0.1",  // a 在 2.0.0 版本未更新内容,保持最新的 1.0.1 版本的内容
    "b": "b1", 
    "c": "c1-2.0.0",  // c 在 2.0.0 版本更新了内容
    "d": "d1"
  }
}

// verison 2.0.6
{
  "data": {
    "a": "a1-2.0.6",  // a 更新到了 2.0.6
    "b": "b1-2.0.6", 
    "c": "c1-2.0.0",  // c 保持 2.0.0 不变
    "d": "d1"
  }
}

这些元素都是从配置文件去获取的。我现在的做法是每次版本更新都要改动代码加 if else 。想请教一下有没有什么办法不改动代码,只改配置文件,根据传进来的版本号直接拿到期望的元素值?

1467 次点击
所在节点    问与答
5 条回复
yuxiu
2021-12-20 17:59:15 +08:00
加一个配置层,如 redis ,业务层订阅对应 channel 事件,根据对应版本号请求开放接口
chinvo
2021-12-20 18:52:17 +08:00
asp.net 官方有 api versioning 的 middleware

其他语言应该也有吧
liuzhaowei55
2021-12-20 20:18:28 +08:00
java 的 easyopen 框架可以,但不太推荐这个,感觉不好用
sqfphoenix
2021-12-21 09:00:51 +08:00
不同版本的服务都各自上线,网关根据前端传的版本把流量打到不同版本的服务就好了
pangtianyu
2021-12-29 16:38:31 +08:00
@yuxiu
能具体展开吗……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/823344

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX