APP接口版本不兼容怎么办? 教你一招
elecfans 2022-12-06

现在基本每个公司都做APP,所以大家都面临 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 Nave 和Weex

Weex比React Nave好用,建议大家可以尝试下。个人建议先不要 大范围用它们来做,毕竟它们只是第三方的东西,有的东西也不太完善。

二、服务端 做 版本兼容

全部接口版本是否统一:

所有的接口都用 相同的版本号:这样要发一个APP新版本就统一修改版本号,好修改,但是如果想修改其中一个接口的版本号就不行了。

每个接口的版本号可以不一样:这样比较灵活,建议这样做。

因为已经好多年没有做过服务端了。下面的见解如果有错误,希望指正。

1、每个接口逻辑里 加if 判断(不建议)

接口URL:api.xxx.com/api?veion=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 funconV1_0() { }

public funconV2_0() { }

}

java或者C# 都有路由配置,可以用路由配置不同版本的URL跳转到不同的方法里。

4、用继承的方式

“一瓶真情”在评论中回复:采用继承的方式,既可以利用之前的接口代码,又可以采用override的方式修改部分接口的实现。

这样是可以的。但是如果你上个版本(也就是父类)修改了代码,就会影响后面的所有版本。

在线上有bug或者需求变更的时候 很可能会修改基类。

大家可以讨论下。

5、部署到不同的服务器

“xuanbg”在评论中回复:

不同版本不同分支,部署在不同的服务器上。如果某个版本用不到了,直接干掉服务就好了。

例如我现在的A要从1.x升到不兼容的2.0版本了,那就给当前的发布分支打个Tag。等哪天1.x版的A需要fix bug,就能很简单地从这个Tag切一个1.x的分支出来fix bug后进行测试发布,而且这个分支不会合并到任何分支,所以不会影响其他版本。

这个方案 不好的地方在于,如果2.0也有同样bug的话,也要在2.0分支上改一遍。如果版本很多的话,这活就不好干了。所以呢,一般不会同时发布两个以上的版本,在升级不兼容的第三个版本前,一定会把第一个版本干掉。

但是比如 淘宝、微信 ,有的时候忘记更新了,你会发现淘宝已经升级过4、5个版本了,然后老版本还能用。也就是有的APP确实需要兼容4、5个版本。

另外,如果要兼容过多的版本,服务器也需要够多才行。同时,因为老版本的人用的少,也就是有的服务器访问量很少,有的服务器访问量很多。不能真正的负载均衡,浪费了服务器资源。

6、混合使用

“ Tokyo^hot”在回复中说到两种方式的混合使用。服务端的几种方法混用:

6.1、第3种和第4种方法一起用。先用继承,如果新版本和以前的版本无法复用,就用路由设置新的方法。

6.2、第1种方法和第3中方法一起用,简单的小改动用 第1种,加个if判断。改动较大的用 第3种,新开个方法。

三、结尾

自己 已经有好几年没做 服务端了。如果大家有什么好办法,可以留言,谢。

接口兼容其实主要是服务端的任务。APP的工作量相对简单。

大家都是怎么做的?

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 【7.24 深圳】2025国际AI+IoT生态发展大会/2025全球 MCU及嵌入式技术论坛


  • 相关技术文库
  • 工业
  • 安防
  • 航空
  • CAN
  • 单片机的I2C和SPI通信的含义

    I2C和SPI是两种不同的通信协议。 当我们听到这个协议时,它似乎是不可实现的。事实上,协议只是人们定义的一个标准。我们只需要按照这个标准去做。例如,如果公司说我们早上9点上班,我们9点上班,或者我们扣...

    昨天
  • 浅析基于MB86R01的汽车数字化虚拟仪表设计

    随着汽车、通信、信息电器、医疗、军事等行业的巨大的智能化需要,嵌入式软件及系统发展迅速。微处理器从8位到16位、32位甚至64位,从支持单一品种的CPU芯片到支持多品种的,从单一内核到除了内核外还提供其它功能...

    07-08
  • 基于蓝牙技术的汽车驾驶盘控制系统

    摘 要:介绍了一种基于蓝牙技术的方向盘控制系统设计方案。利用蓝牙传输技术实现汽车方向盘面板开关电子化优化设计,克服传统驾驶过程中需要低头找开关的弊端,使得大部分操作在方向盘上实现,汽车驾驶更便捷。控制...

    07-08
  • 逆变器有何注意事项?安装逆变器风扇有何要点?

    逆变器是一种转换器,在工业应用中,逆变器具有重要意义。对于逆变器,小编曾对逆变器的安装、离网逆变器等知识有所介绍。为增进大家对逆变器的认识,本文将对逆变器使用注意事项以及逆变器风扇安装注意事项予以解...

    07-07
  • 电气火灾监控系统

    电气火灾监控系统,特点在于漏电监控方面属于先期预报警系统。与传统火灾自动报警系统不同的是,电气火灾监控系统早期报警是为了避免损失,而传统火灾自动报警系统是为了减少损失。所以,这就是说为什么不管是新建...

    07-04
  • 基于C8051F500的数控恒流源设计

    本文给出了一种基于C8051F021和RA8835实现的低成本液晶显示方案。随着电子产品设计技术的不断发展,电子产品的设计,尤其是人机交互界面的设计日益趋向人性化。这其中的液晶显示屏以其具有能显示复杂文字及图形、显...

    07-02
  • 大佬带你谈谈步进电机,啥又是直流电机

    电机是诸多电子设备中都存在,由此可见电机的重要性。在往期文章中,小编对伺服电机、变频电机都有所介绍。为增进大家对电机的了解,本文将对步进电机和直流电机加以阐述。如果你对电机相关内容具有兴趣,不妨继续...

    06-27
  • 同步、异步电机有何区别?高、低速电机是什么?

    电机是工业设备中的重要存在之一,对于电机,大家应当有所了解。为增进大家对电机的了解,本文将对同步电机、异步电机、同步电机和异步电机的区别、高速电机和低速电机予以介绍。如果你对电机具有兴趣,不妨继续往...

    06-27
  • 步进电机知识详解,再不怕看不懂步进电机了!

    点击技成培训置顶,每日7:30准时为您推送

    06-26
下载排行榜
更多
评测报告
更多
广告