API服务多版本控制

面对市场变化,产品必须不停迭代,一款有大量用户留存的产品,必然需要对产品多版本做兼容。

不能因为,用户不升级,而导致用户不能使用旧的版本,特别是做内容服务的,比如音视频软件平台,腾讯视频,网易云音乐,今日头条。

用户需要的不是软件本身,或者说软件好玩的地方。用户在意的是电影好不好看,有没有新音乐,今天的新闻资讯有哪些,至于app产品更新,我相信绝大部分用户都不会关心。

即便,客户端提示升级,也会取消升级。那么我们要做的是什么呢?

从产品角度,当然是做市场调查,倾听用户的心声,改变产品的使用方式,如:这个位置可以有个收藏按钮,等等,然后产品更新的时候,告诉用户有哪些好玩的,用户感兴趣的功能更新了。

去引导用户去更新,而不是强制用户去更新,要容纳旧版本的存在。

当然,我们主要说的开发部分,前面不过是,理一下为什么需要做多版本控制的,方案背景。

我们拿网易云音乐的请求music详情做case(当然这个接口是虚构)

1.0
API : /music/:id  //获取音乐详情

METHOD:GET 

RESPONSE:{
	name:"远走高飞",
	imageUrl:"https://xxx",//封面图
}

2.0  需求变更,需要多张图片,

imageUrl:["https://xxx","https://bbb"],//封面图
复制代码

旧版客户端是不支持数组的,所以需要做兼容处理,那么在这种情况下通常最简单的方式是,之间做版本判断,根据客户端请求,在header、所携带的版本,做判断了,输出版本差异数据。

但是随着产品迭代次数过多,项目冗余代码日益增多,代码结果变得难以维护,每次因为需求变更的时候需要考虑对旧版本兼容方案,而且一个不小心就会影响旧版本用户的使用。

就像上面的字符串,改成数组,如果客户端兼容不够优秀,这将是一个噩梦,必现的程序崩溃,闪退。

在解决API服务多版本控制的实践中,我碰到过三种方案

方案一:代码兼容,多注意些版本方面的中间件处理。

适用场景:产品初期

方案二:路由做版本控制,代码冗余

1.0: /1.0/music/:id

2.0 /2.0/music/:id

不同的版本指向不同的目录,版本迭代快的话项目冗余过多,且不好维护。

适用场景:在版本迭代频次低,业务范围,业务深度不强的可以使用

方案三:多版本部署,同时存在多个版本服务(推荐)

1.0 HOST:1_0.wangyi.com/xxx

2.0 HOST:2_0.wangyi.com/xxx

不同版本的客户端请求不同版本的服务端,接口代码相对独立,同时git等代码多版本控制工具配合使用,管理,运维多个不同版本API服务。

这样,新的版本开发(除了数据)不太需要考虑,对旧版本的影响,代码耦合,也变得非常低,当某个版本的用户数低到忽略不计的时候,就可以直接移除服务的方式,过版本过度。

使用场景:有一定的用户基数,应用有一定的规模。

总结:一个app 1.0到4.0的变化一般都会很大,有很多业务需要做版本控制,兼容旧的版本也是非常重要的一件事,不能因为我们做了版本迭代次数过多,而导致用户无法使用,必须更新。

而业务代码兼容过多版本,又会造成代码难以维护的局面,通过运维做多版本控制来处理API服务多版本控制,是一种非常值得推荐的方案。

转载于:https://juejin.im/post/5b10f7ed6fb9a01e5b10e9fc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值