人工智能,零基础入门!http://www.captainbed.net/inner
公司开发APP,经常会有版本升级的情况,因此会出现新版本如何兼容旧版本的问题。
iOS和android 不断有新的版本开发,很多服务端开发都是在以前接口的逻辑上进行修改,新的APP版本发布后,老的APP版本如何兼容接口?
有人说:每次发布完APP,就强制用户更新到最新版本 不就完了。现在确实有的公司这样做,当然不推荐,这样的用户体验太差。
就算强制更新,在苹果审核期间,新的APP接口和 老的接口 也必须能同时使用。
下面我们说下如何做,我们用的是最后一种,大家有不同意见可以 留言讨论。
一、客户端做兼容,接口不用做兼容
1、APP强制更新(不建议)
接口URL:api.xxx.com/v1.0/xxxx.java
接口的URL中加入版本号,如上:v1.0。
每个APP都强制更新,灰度服务器 部署正在审核中的 接口版本(如:v1.1)。等审核通过后,将老版本的APP设置强制更新,这样老的接口就不用了。
然后把线上服务器重新部署最新的服务端代码,再去掉灰度服务器。
这样APP接口全部访问正式的线上服务器。
2、热更新
紧急的重要小需求可以用热更新,大的需求建议还是用原生的代码,因为你用热更新修改完的JS或Lua代码,最后还要在原生代码里修改。
网游用热更新的比较多,因为网游的APP太大,不可能加个小关卡等需求就要求用户重新下载,并且游戏更新比企业级APP更频繁,用热更新可以不断新加关卡、场景。
3、React Native 和Weex
Weex比React Native好用,建议大家可以尝试下。个人建议不要 大范围用它们来做,毕竟它们只是第三方的东西,有的东西也不太完善。
二、服务端 做 版本兼容
全部接口版本是否统一:
【1】所有的接口统一 一个版本号:这样要发一个APP新版本就统一修改版本号,好修改,但是如果想修改其中一个接口的版本号就不行了。
【2】每个接口的版本号可以不一样:这样比较灵活,建议这样做。
1、每个接口逻辑里 加if 判断(不建议,这样会显得代码太臃肿,实际上也几乎没有人这样搞)
接口URL:api.xxx.com/api?version=v1&..
if (version == ‘1.5.0’) {
do_something
} else if (version ==‘1.4.0') {
do_something
}
优点:实现简单
缺点:在于容易造成代码混乱,不利于维护。
2、不同的文件夹
相当于每个接口版本都是一个独立的项目。放到服务器的独立文件夹里。
例如:
接口URL:api.xxx.com/v1.0/xxxx.php
文件夹位置:Controller/V1.0/
-----------------/xxxx.php
文件夹位置:Controller/V2.1/
-----------------/xxxx.php
优点:版本逻辑分开维护。看url就能知道哪个版本。删除多余版本 不用修改代码。
缺点:同个接口不同版本 文件重复。并且 如果有个接口前几版就有问题,一直遗留到现在,就需要改好几套一样的代码。
3、不同版本 用不同的方法 :
接口URL:api.xxx.com/v1.0/xxxx.php
class XXXX{
public functionv1_0_0() { }
public functionv2_0_0() { }
}
总结一下,2和3的方法是后端做兼容最简单实现的方式,就是相当于再加一个新的接口,PS:我们公司目前是这样搞的。