本文中心:
同一个流程升级功能
一种是在原来接口上修改.影响所有接口.
如果发现对老功能存在不兼容的问题,那么记住要转换思维,要写到新的接口上.
例子:
结束计费按钮.
服务端需要做.
1. 获取订单信息
2. 结束账单. 同时返回账单信息.(幂等接口,账单已结束就直接返回,即时第二次调用时位置信息是新的,也直接返回, 对信息不校验)
3. 然后向收银台收单
4. 结束订单,修改订单状态.
问题:
1. 接口太重了.影响成功率.
2. 开发周期短,一期先上同步.二期怎么改回异步.
担心:
1. 乘客端调用 finishOrder
2. 进入支付页面.
第一个想法:
1. 将接口异步化,然后前端使用异步化. [ 对乘客无感知,还是转菊花]
2. 菊花背后是 状态轮训+tcp 通知. 局部接口的状态查询可以快速点. 比如支付成功之后回调的查询.
3. 服务端接收到请求,除了位置判断外直接返回. 其他复杂操作异步化执行.
问题: 一旦这个功能改造后,老版本就会出现问题.
1. 如果异步化没有执行成功或者前端先进入下一个流程尝试支付. 都会被收银台拒绝, 无此 outTradeId.
所以想着想着必须一期就上一个轮训接口,否则升级二期成异步之后,老版本就会有问题.
正确解决方案:
1. 既然老版本会影响.那么就应该新开一个接口. 老接口的行为方式不变,还是同步. 新接口采用新的方案,采用异步的方式.这样就不会不兼容了. 原接口上功能升级不能不兼容,那么就不要想着在原接口上兼容升级. 不要太轴,总能想到解决方案. 不要太关注细节.