架构师成长之路

API版本控制

2018-03-30  本文已影响31人  一一道长一一

服务API的版本控制历来没有一个完美的解决方案,本篇列出了业界常见的三类API版本控制方案,每一类中又有1到2种实现方式(可能还有更多),看官们可根据自己项目的规模和要求选择适合自己的方案。


1. 强制使用统一API版本

整个项目使用一个API版本,每次变更需要考虑向后兼容性,基本原则:只能在原来的结构基础上增加属性,而不能删除,同时需要客户端进行配合。

比如:有个返回值是string类型,如果要变成int类型,不能改变原来的字段值,只能增加一个新的属性,这样才能保证老版本的正常使用。

缺点:返回数据过于冗余,不好判断哪个属性是哪个版本在用,也就无法定期下线指定版本。

2. URI中显式添加版本号

第一种,把版本号嵌入到URL路径中,例如:http://example.com/v3/item/list

第二种,把版本号放在RequestParam中,例如:http://example.com/item/list?version=3

第一种方便在服务端用不同的方法进行版本区分,第二种只能在同一个方法中进行判断区分。

有点:够直观,方便调试。

缺点:不符合RestFull原则(原则又不能当饭吃,解决问题才是王道),版本过多会不好控制。

3. 添加头信息控制版本

第一种, 在Header中添加自定义参数,例如:  api-version: 2 

第二种,在ContentType中添加版本号,例如:Accept: application/vnd.haveibeenpwned.v2+json  或 Accept: application/vnd.haveibeenpwned+json; version=2.0

优点:符合RestFull原则,保持各版本的URL一致。

缺点:不够直观,只能使用带有设置header的工具进行调试。

纵观各大网站的API,使用URL中显示添加版本号的最多,添加头部信息控制版本的次之,几乎没有强制使用统一版本的,so,you know~

关于版本过多难于维护的问题,解决办法是控制API使用周期,最多不超过5个版本同时在使用,并定期下架老旧的API版本。

上一篇下一篇

猜你喜欢

热点阅读