在代码层面大家是怎么管理 API 接口版本的呢?

2015-05-12 11:10:02 +08:00
 coosir
当我们提供API接口的时候,版本可能是0.1, 0.2, 0.3等不断变化。
比如 GET https://www.v2ex.com/api/v0.1/members/show.json

考虑到移动端更新不及时,必须保证所有版本都能正常工作。

1. 曾经看过一个team的代码,直接在代码里面 if else 判断版本号不同版本分别处理。这在版本号很多的时候简直是个灾难。
2. 每个版本的功能代码放到一个子目录。文件会出现比较多的重复,使用一些框架比如Slim或Lumen的时候要去改写路由部分。

在代码层面,大家都是怎么做的呢?有没有比较好的实践?
3374 次点击
所在节点    问与答
14 条回复
abcfyk
2015-05-12 11:35:32 +08:00
为什么要暴露API的版本给客户端知道? 客户端只需要知道如何调用这个API能取到数据,就够啦。
zieglar
2015-05-12 11:38:06 +08:00
一个 API 版本一个入口文件
coosir
2015-05-12 11:44:14 +08:00
@abcfyk 每个版本的客户端是死的,处理返回的数据的方法也是死的。要让不同版本的客户端都正常工作,不区分版本是很难做到的。
coosir
2015-05-12 11:45:19 +08:00
@zieglar 嗯,然后呢?其他代码怎么按版本处理的?
jokester
2015-05-12 11:51:13 +08:00
unit test
luin
2015-05-12 12:16:37 +08:00
Accept: application/vnd.example.v2+json.(https://tools.ietf.org/html/rfc4288#section-3.2)
sodatea
2015-05-12 12:20:45 +08:00
senver
sodatea
2015-05-12 12:21:05 +08:00
semver 打错了……
lincanbin
2015-05-12 12:24:44 +08:00
如果换API,我会选择让旧App全部挂掉,爱升不升——个人项目。
luin
2015-05-12 12:29:17 +08:00
没仔细看不好意思,以为你问的是接口层面 T_T
lijingyu68
2015-05-12 12:33:47 +08:00
我最近也在纠结这个问题
coosir
2015-05-12 13:35:14 +08:00
@sodatea semver只是版本命名方式吧。我比较困惑的是代码怎么更好地去组织
flyingfz
2015-05-12 15:48:06 +08:00
我们之前的处理方式是,每个版本都部署一个虚拟目录,这里是IIS的说法。但ngnix之类的,可以使用urlRewrite方式模拟。
总之,就是每个版本的api,就是一个独立的站点,独立运作,互不影响。
konakona
2016-05-03 15:20:07 +08:00
@flyingfz 如此一来,需要维护的项目就*N 了..当然是避免不了,但是有没有办法在一个项目里维护呢?

如果是按照多项目来维系版本共存的话。依赖一个 GIT 倒是个不错的办法,比如说 GIT 有一个 branch 叫“ api ”的目录。里面一堆 v1~vn_release 的 branch 么..

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

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

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

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

© 2021 V2EX