新功能要上线,老功能该如何下线呢,下面列举一些具体方案的对比说明:
一、从兼容性上考虑:
方案名称 | 说明 | 优点 | 缺点 |
新接口完全兼容老接口 | 1、最好的办法,客户端无需做处理 2、需要服务端在接口数据结构设计上,要考虑到扩展性的需求,对服务端接口设计要求比较高 |
1、可以下线老的接口 2、数据能够最大程度和新版保持一致 |
无 |
新接口适配老接口 | 1、也是比较好的方法,客户端无需做处理 2、服务端会增加一部分工作量 |
1、可以下线老的接口 2、能够保证数据正确,但不保证新功能被支持
扫描二维码关注公众号,回复:
658298 查看本文章
![]() |
1、需要对输出的数据结构进行转换 |
新接口无法适配老接口 | 如果老的接口不能下线,后期维护成本大 |
无 |
1、维护多套老接口,成本非常大,没有优点可言,可见接口设计是很重要的 |
二、从下线角度考虑:
方案名称 | 说明 | 优点 | 缺点 |
按比例切换老接口 | 如,根据userId取模,老接口以一定的百分比逐步下线 | ||
按比例随机返回错误提示 | 如,访问老功能,随机出现错误提示’该接口已下线‘等等。 | 1、不让某个用户一直失败,但又通过一定比例通知到用户该接口即将废弃。 | 1、用户也可能会认为是系统问题 |
在一定时间段,按比例随机返回错误提示 | 某一个时间段内,执行方案2 | 1、尽量降低方案2的负面影响 |
附加相关代码:
1、按比例切换
//默认会切换20%的用户 long userId = getBuyerId(); int mod = (int)userId%100+1; int rate = Integer.parseInt(getConfigRateValue(20));//默认20% if(mod<=rate){ return false; } return true;
2、在一定时间段,随机给出错误提示
int hour = calendar.get(Calendar.HOUR_OF_DAY); //2.check if 'hour' is in this period String period = getConfigHourPeriod()//12-18 String[] hourPeriod = period.split("-"); int start = Integer.parseInt(hourPeriod[0]); int end = Integer.parseInt(hourPeriod[1]); if(hour >=start && hour<=end){ //3.fail rates String failRate = getConfigFailRate()//20 int random = (int)(Math.random()*100)+1; //4.rate=20% if(random<=Integer.parseInt(failRate)){ return true; } } return false;