Android面试计算之接口维护(版本控制)

阳光已经升到了上空中,抚摸着正懒洋洋的坐在润溪湖畔的宿舍楼。早上九时,楼栋中赤贫如洗。小江缓缓推开被子,在床上睡眼惺忪的坐了会,才从上铺爬下来,初始了一天的生活。

相似景色下,APP中会有大气的接口,再拉长版本的扭转,接口的升高,或者会衍生出不少个稍有差别的接口,这么些时候接口假若爱慕的不佳,前边会乱为一锅粥,客户端分歧版本拔取差距的接口名(xxxv1,xxxv2,xxxv3…..)。
局地公司每便发布完APP,就强制用户更新。不引进那样,用户体验太差。
即使是挟持更新,在苹果审核时期,新的APP接口和老的接口也亟须能同时采纳。

起来持久战

小江是惠州大学广告标准10级的学员,老家在青海,不过来到那所安徽第壹学府就读后,如同与其余同学没有啥样差异。

九点也不算太晚,起床是一场持久的战役。有的同学会从中午8点战斗到11点,最终没有战胜本身的胃部而被迫起床。

持久战的另3个突显是从早上6点多到正午11点多都有人不断起床,其中以上午7点多和9点多那两端上课前的过多,其余时间有时候会有诈尸般的起床,洗漱声在无边的楼栋中扬尘。

小江的起床时间并不稳定,那要取决于他怎么时候上课。尽管是周六,那么任何寝室一般都会早饭午饭一块吃了。

学校的上午常常看看那般的现象,每种人手里拿着早餐,奔向各栋教学楼,早饭的花香便随处弥漫了。

小江曾经不吃早餐的,套用他的口头语的句式:“不吃又不会怀孕!”但自从听他们说有个同学不吃早餐得了胃癌的工作后,他也开头吃早餐了,但却又感慨道除了馒头之类的没得选了。

拍卖方法

精神分裂症套餐

小江和她的意中人们喜欢互称为“性心理障碍少年”,未必真是这样,但却相比较符合实际——他们不时打互联网游戏。

据此您日常能观看小江卧在电脑前,双眼紧瞅着电脑显示屏,左手操作键盘,右手紧握鼠标。伴随着计算机扩散的阵阵响声,深黑的光在他的透镜上闪烁,眼睛从未离开荧屏。

有时你会意识他身旁放着石磨蓝的塑料袋,里面放着空的一次性饭盒,往往是网瘾套餐的遗骸。

所谓偏执性精神障碍套餐,但是是饭菜打包而已,既然如此,那为什么又叫做精神分裂症套餐呢?

情感障碍套餐,就是足以为打互联网游戏节约时间的打包饭菜。精神分裂症少年,名不虚传。

从小学五年级到大学二年级,小江的网游从未中断过。今后他除了教学、吃饭、睡觉,其他时间基本上都以打网游了,网络游戏的档次用他协调的话来说就是“比较高端了”。

① 、 客户端做同盟,接口不用做协作
  1. APP强制更新(不指出)
    接口URL:api.xxx.com/v1.0/xxxx.java
    接口的ULANDL中投入版本号,如上:v1.0。
    使用灰度服务器 安插正在审批中的
    接口版本(如:v1.1)。等查处通过后,将老版本的APP设置强制更新,然后把线上服务重视新陈设上流行的代码,再去掉灰度服务器。那样APP接口全体做客正式的线上服务器。

  2. 热更新
    火急的小须要可以用热更新,大的须求指出依旧用原生的代码,因为您用热更新修改完(用JS或Lua),最终还要在原生代码里修改。
    网游用热更新的可比多,因为网游的APP太大,不容许加个小关卡
    就须求用户重新下载,并且游戏更新比商店级APP更频仍,用热更新可以持续新加关卡、场景、活动推广。

  3. React Native 和Weex
    没接触过 可以自个儿了解

广告大师

爱好玩网游的小江并从未拖延学习,他协调也说成绩还不易,人送PS大师的名目。上学期要交色彩作业,全班30多私房每人交8幅作品,但老师近乎阴毒的严俊是全班仅透过8幅,其中就有小江的两幅。

但小江本人说上课并不认真,有时上课会思忖人生。

相似看来,沉迷于互连网游戏的学员广泛上学不佳,小江把这几个规律打破了。恐怕另二个说法更为准确,小江并没有沉迷于互联网游戏!

广告班课不多,但作业可不少。上学期她们就三天五头熬夜做作业,小江也一大早起来赶作业,那和周一沉睡的小江判若五人。

小江走路时总拾叁分“淡定”,他随身写着累累学员的阴影,但他自己,又有友好的万分规。

二 、 服务端做版本包容
  1. App 请求服务器接口的时候带走接口版本字段
    服务器依据接口版本调用相应的措施,逐个接口逻辑里 加if
    判断(不引进)
    接口URL:api.xxx.com/api?version=v1&..

if (version == ‘1.5.0’) {
  //do_something
} else if (version ==‘1.4.0') {
  //do_something
}

今非昔比版本的逻辑都在3个办法里,在于不难造成代码混乱,不便利珍贵。

  1. 二个版本一个文书
    一定于每种接口版本都以三个单身的类型。放到服务器的独门文件夹里。使用什么版本接口写到客户端配置内部或然经过一个接口获取就行。
    例:
    1.0版本:http://x.x.x.x:xx/xxapi/v1.0/xxx
    1.2版本:http://x.x.x.x:xx/xxapi/v1.2/xxx
    文本夹位置:Controller/V1.0/
    —————–/xxxx.php
    文本夹地点:Controller/V1.2/
    —————–/xxxx.php
    可取:版本逻辑分开维护。看url就能领略哪些版本。删除多余版本
    不用修改代码。
    症结:同个接口差异版本 文件是再次的。并且
    倘使有个接口前几版就有失常态,一向遗留到现行,就要求改好几套一样的代码。

  2. token代替版本号

几个要点:  
a.
客户端发送请求时token是固定不变的,使用token间接的标记请求的接口版本。  
b.
server保存了token和对应接口的版本号,请求来了之后会先根据这个寻找对应的接口版本。  
c.
每个目录对应一个版本,根据请求的接口读取对应目录下的接口配置文件,找到最终要执行的具体接口。  
例如:[http://xxxx.xxxx.com/module/controller/list?token=6918b5e0567c7d47314c10ed413e3f95](https://link.jianshu.com?t=http://xxxx.xxxx.com/module/controller/list?token=6918b5e0567c7d47314c10ed413e3f95)
这个请求最终会打到listv2这个接口。  
d.
这样就可以在服务端灵活的配置接口了,客户端只要每次请求的时候带上默认的token参数,就可以得到自己想要的了,完全不需要关心版本的问题。
  1. 接二连三的艺术
    ControllerV1
    ControllerV2 extends ControllerV1
    行使继承的方法,既可以行使此前的接口代码,又可以拔取override的点子修改部分接口的兑现。
    缺点:假诺上个版本(约等于父类)修改了代码,就会潜移默化前面的拥有版本。

  2. 不等版本选择区其余域名/差距服务器
    今非昔比版本不相同分支,陈设在不一样的服务器上。借使某些版本用不到了,直接干掉服务就好了。
    比如说作者将来的API要从1.x升到不兼容的2.0版本了,那就给当下的宣布分支打个Tag。等曾几何时1.x版的API要求fix
    bug,就能很不难地从那个Tag切三个1.x的分段出来fix
    bug后展开测试公布,而且那些分支不会统一到任何分支,所以不会影响其余版本。
    优点:计划的进度不会潜移默化其余版本api的行使,并且可以减轻单台服务器的负担。
    症结:如果2.0也有一致bug的话,也要在2.0分支上改四遍。假设版本众多来说,工作量大。所以啊,一般不会同时揭橥七个以上的本子。其它,就算要同盟过多的版本,服务器也急需够多才行。同时,因为老版本的人用的少,相当于一对服务器访问量很少,有的服务器访问量很多。不能真的的载荷均衡,浪费了服务器财富。

终极做下版本采取监督。当观看到拥有用户都应用新本子的客户端的时候,并保证一段时间的时候。舍弃对老版本的护卫,继而下掉老版本的财富。


本子更新

开启APP->请求开首化接口->检测是还是不是需求立异? 否->首页Or
是->更新

在初叶化接口的时候,必要客户端发送多少个数据:

app_id            客户端id,比如: 1,安卓手机 2,iphone手机

version_id        大版本号id

version_mini      小版本号id

did               用户客户端信息(客户端工程师会获取这个数据)

encrypt_did       did加密后的字符串(did 加上 APP设备数据表中的key,然后md5)

数据库方面:必要两张表。一张是记录升级版本音信的表,记录着装备的id,版本号新闻,下载地址等。别的一张表是记录的设备的音讯,比如安卓手机的音讯,版本音讯表中有贰个外键app_美高梅娱乐4858.com,id,关联的就是设备音讯表的主键。

  //设备信息表,记录了各种客户端的信息
    CREATE TABLE IF NOT EXISTS `app_table` (
      `app_id` smallint(6) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `name` varchar(10) NOT NULL COMMENT '设备名称',
      `is_encryption` tinyint(1) NOT NULL COMMENT '是否加密',
      `key` varchar(10) NOT NULL COMMENT '加密key',
      `image_size` text NOT NULL COMMENT '按照json来存储',
      `create_time` int(11) NOT NULL COMMENT '添加时间',
      `update_time` int(11) NOT NULL COMMENT '修改时间',
      `status` tinyint(1) NOT NULL COMMENT '状态 1正常0删除',
      PRIMARY KEY (`app_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='app设备表' AUTO_INCREMENT=2 ;

    //版本升级信息表,存放了各种版本的信息
    CREATE TABLE IF NOT EXISTS `version_upgrade` (
      `id` smallint(4) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `app_id` smallint(4) NOT NULL COMMENT '客户端设备id',
      `version_id` smallint(4) NOT NULL COMMENT '大版本号id',
      `version_mini` mediumint(8) NOT NULL COMMENT '小版本号',
      `version_code` varchar(10) NOT NULL COMMENT '版本标识1.2',
      `type` tinyint(4) NOT NULL COMMENT '是否升级1是0否',
      `apk_url` varchar(255) NOT NULL COMMENT '下载链接地址',
      `upgrade_point` varchar(255) NOT NULL COMMENT '升级提示',
      `status` tinyint(4) NOT NULL,
      `create_time` int(11) NOT NULL COMMENT '添加时间',
      `update_time` int(11) NOT NULL COMMENT '修改时间',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='软件升级信息表' AUTO_INCREMENT=2 ;

经过app的版本新闻与服务器信息相比,看是或不是要开展版本升级

参考小说
http://www.cnblogs.com/dahe007/p/6255401.html

https://my.oschina.net/woshixiaomayi/blog/519783

发表评论

电子邮件地址不会被公开。 必填项已用*标注