关于开发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更频繁,用热更新可以不断新加关卡、场景、活动推广。
二、服务端做 版本兼容
全部接口版本是否统一:
所有的接口都用相同的版本号:这样要发一个APP新版本就统一修改版本号,好修改,但是如果想修改其中一个接口的版本号就不行了。
每个接口的版本号可以不一样:这样比较灵活,建议这样做。
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() { }
public funcTIonV2_0() { }
}
java或者C# 都有路由配置,可以用路由配置不同版本的URL跳转到不同的方法里。
4.用继承的方式
采用继承的方式,既可以利用之前的接口代码,又可以采用override的方式修改部分接口的实现。
这样是可以的。但是如果你上个版本(也就是父类)修改了代码,就会影响后面的所有版本。
在线上有bug或者需求变更的时候很可能会修改基类。
5.部署到不同的服务器
不同版本不同分支,部署在不同的服务器上。如果某个版本用不到了,直接干掉服务就好了。
例如:我现在的API要从1.x升到不兼容的2.0版本了,那就给当前的发布分支打个Tag。等哪天1.x版的API需要fix bug,就能很简单地从这个Tag切一个1.x的分支出来fix bug后进行测试发布,而且这个分支不会合并到任何分支,
所以不会影响其他版本。这个方案不好的地方在于,如果2.0也有同样bug的话,也要在2.0分支上改一遍。如果版本很多的话,这活就不好干了。
所以呢,一般不会同时发布两个以上的版本,在升级不兼容的第三个版本前,一定会把第一个版本干掉。
但是比如 淘宝、微信 ,有的时候忘记更新了,你会发现淘宝已经升级过4、5个版本了,然后老版本还能用。也就是有的APP确实需要兼容4、5个版本。
另外,如果要兼容过多的版本,服务器也需要够多才行。同时,因为老版本的人用的少,也就是有的服务器访问量很少,有的服务器访问量很多。不能真正的负载均衡,浪费了服务器资源。
6.混合使用
服务端的几种方法混用:
第3种和第4种方法一起用。先用继承,如果新版本和以前的版本无法复用,就用路由设置新的方法。
第1种方法和第3中方法一起用,简单的小改动用 第1种,加个if判断。改动较大的用 第3种,新开个方法。
关于开发APP接口版本不兼容的问题的更多相关文章
- APP接口版本不兼容怎么办? 教你一招
现在基本每个公司都做APP,所以大家都面临 APP接口版本兼容的问题. iOS和android 要不断开发新版本,很多服务端开发都是在以前接口的逻辑上进行修改.新的APP和接口开发后,接口如何兼容老的 ...
- APP接口版本兼容的问题
现在基本每个公司都做APP,所以大家都面临 APP接口版本兼容的问题. iOS和android 要不断开发新版本,很多服务端开发都是在以前接口的逻辑上进行修改.新的APP和接口开发后,接口如何兼容老的 ...
- 《PHP开发APP接口》笔记
PHP开发APP接口 [TOC] 课程地址 imooc PHP开发APP接口 学习要点 APP接口简介 封装通信接口方法 核心技术 APP接口实例 服务器端 -> 数据库|缓存 -> 调用 ...
- PHP开发APP接口(二)
这里将会调用前面博客的数据库连接单例.文件缓存类和开发APP接口(一) <?php // http://app.com/list.php?page-=1&pagesize=12 requ ...
- PHP开发APP接口实现--基本篇
最近一段时间一直在做APP接口,总结一下APP接口开发以来的心得,与大家分享: 1. 客户端/服务器接口请求流程: 安卓/IOS客户端 –> PHP接口 –> 服务器端 –> ...
- PHP开发APP接口
第1章 APP接口简介 - 课程简介 (:) - APP接口介绍 (:) - 客户端APP通信 (:) 最近学习 - 客户端APP通信格式区别 (:) - APP接口做的哪些事儿 (:) 第2章 封装 ...
- PHP开发APP接口学习笔记
习要点概述1.APP接口简介 2.封装通信接口方法 3.核心技术 4.APP接口实例 服务器和客户端进行接口数据通信:服务器 -->数据库|缓存 -->调用接口 -->客户端 服务器 ...
- PHP开发APP接口之返回数据
首先说明一下客户端APP通信的格式 1.xml:扩展标记语言(1.用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,xml格式统一,跨平台和语言,非常适合数据传输和通信,早已 ...
- php开发APP接口(总结一)
一.什么是app接口:服务端与客户端的数据交互. 大部分APP接口是通过http协议通信的. http通信的三要素: URL: 通信的地址 Method:通信的方式(get | post | pu ...
随机推荐
- opencv 单目标模板匹配(只适用于模板与目标尺度相同)
#include <iostream> #include "opencv/cv.h" #include "opencv/cxcore.h" #inc ...
- Laravel 查询数据按照时间分组
首先取消严格模式: // config/database.php // 'strict' => true, // 严谨模式注释掉 查询构造器代码: //查询构造器部分代码 })->with ...
- scala 面向对象之 继承
scala 面向对象之 继承 scala 1.extends Scala中,让子类继承父类,与Java一样,也是使用extends关键字 继承就代表,子类可以从父类继承父类的field和metho ...
- js获取图片信息
网络图片: fetch(item.path).then(function(res){ // 计算图片大小 return res.blob() }).then(function(data){ conso ...
- 操作MongoDB好用的图形化工具,Robomongo -> 下载 -> 安装
一 下载 点击下载 -> https://robomongo.org/download 二 安装 直接下一步就行了 -> 择安装位置之后 -> 确认安装
- sql 存储过程笔记
create procedure SP_Wim_GetWorkSubSectionById(@paramId as int)asbegindeclare @id as int;declare @lvI ...
- php迭代器Iterator接口
以前也看过迭代器Iterator接口,感觉不如yied好用,因此实际工作中并没有用到过. 今天看了一篇网上的博客(https://www.cnblogs.com/wwjchina/p/7723499. ...
- python将list元素转为数字
mask_x = ['11', '12', 13'] 方法1:for循环遍历 mask_x = [int(x) for x in mask_x] 方法2:map迭代 mask_x = list(map ...
- PLSQL功能一览(1/2)
用了Oracle几年了,除了PLSQL几乎就没用过别的工具.临时起义想看看PLSQL有哪些功能是我平时没注意的,别是一直有好办法,我却用着笨办法. 本文针对PLSQL12.0.7 1.登录以后使用My ...
- java继承-子类调用父类的方法中包含子类重写的方法
# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了... # 先看代码: public class Common { public static void main(String[] args ...