移动app开发如何做接口的版本控制

2023-11-01

移动app为什么要做版本控制

应用升级无法做到全部升级。比如某应用现行1.1版本,某次开发升级后,版本变为1.2。除app界面变化外,后台接口也发生了变化。然而不是所有的用户都在第一时间升级了app,或者由于版本推送不及时,用户忽略更新等原因,1.1和1.2的app将会在很长一段时间内同时运行。如果不做版本控制,导致1.1版本的用户无法正常使用app,从用户角度讲,是一个很不友好的体验。很常见的一个场景,比如推送更新的时候,我正在户外,没有wifi,我想等回家了再更新,然而我现在就需要使用这个app。

判断是否需要做版本控制

如何判断一个接口改造是否需要版本控制,分为以下几个场景:

  • 如果是改变接口的业务逻辑,而接口的入参和出参都保持不变,这样的迭代对于app是无感知的。这样的迭代可以不需要版本控制,直接迭代后端代码即可。
  • 如果迭代后的接口的入参或者出参,虽然比之前新增或者减少了参数,但是可以通过给默认值或者兼容空值等方式,兼容老逻辑,那么也可以不做版本控制。通过代码兼容版本,做到不通版本的接口都可以正常使用。
  • 如果迭代后的接口入参或者出参变化,不能通过给定默认值的方式兼容。或者说,参数的类型整个都发生了变化,无法复用以前的接口的时候,版本控制就是必要的了。

版本控制的几个方案

部署灰度环境,使用ngix做分发

这种方式,需要服务器机器支持灰度部署。比如,现在服务器有两套,一套灰度,一套新版本。这样在写后端代码的时候,完全不用考虑版本控制的事情,只要在请求里面带上当前app的版本号,然后在nigx里面配置路由规则。将旧版本的请求路由到灰度环境,新版本的请求路由到正式环境。这样的好处是,通过监控灰度流量就可以知道还有多少活动用户没有升级app。如果灰度的请求次数降到一定程度,或者说直接降到0了,就可以把灰度的机器也更新成最新的代码。这种是不论前端还是后端都无感知的代码版本迭代。缺点就是,需要硬件服务器上的支持,不是所有的公司都有灰度环境,就算有,如果版本迭代太快,也无法很好的满足版本控制的需求。
灰度环境实现接口版本控制

在URL中使用版本编号,通过拦截器分发

在请求url中加入版本信息。例如同样的注册请求(register),如果是1.0.0的版本,则可以将URL设置为 https://test.test.cn/mytest/v1/register。如果是2.0.0的版本,则可以设置为https://test.test.cn/mytest/v2/register。

在controller层中分别注册相应的路径来处理两个接口。

@RequestMapping("/v1")
public class RegisterController {

	@RequestMapping(value = "/register", method = RequestMethod.POST)
    @ResponseBody
    public ResponseVo<LoginInfoVo> register(RegisterParamVo paramVo, HttpServletRequest request) {
    // todo register
}
@RequestMapping("/v2")
public class RegisterController {

@RequestMapping(value = "/register", method = RequestMethod.POST)
    @ResponseBody
    public ResponseVo<LoginInfoVo> register(NewRegisterParamVo paramVo, HttpServletRequest request) {
    // todo register
}

在请求参数重使用版本号,通过controller层做分发

这个是属于最不明智的方案,这里只是说明可以这么实现,但是实际开发中不推荐。

在请求参数中新增版本号参数,然后 v1接口的参数和v2接口的出入参全部容于在同一个接口中。然后通过版本号参数,使用简单工厂模式,生产出实际处理的service代码做版本管理。

具体代码:略,此处只提供一个想法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移动app开发如何做接口的版本控制 的相关文章

随机推荐

  • Anaconda配置OpenCV环境

    1 移除旧的环境 如果原来有一个opencv的环境 那么要先进行这个环境的删除 conda env remove opencv 2 虚拟环境创建 首先进行虚拟环境的创建 使用Anaconda进行虚拟环境的创建 我这里的虚拟环境的名称是 op
  • Java如何让自定义类型具有可比较大小的能力

    自定义类型大小比较 一 背景 二 两种方法 方式一 自然排序 方式二 定制排序 一 背景 Java中基本数据类型之间可以使用比较运算符 gt lt gt lt 等进行比较 引用数据类型之间进行比较时 使用继承于Object类的equals方
  • atheros面试

    6道题目 1 是swap的宏的定义 2 用一个语句判断一个数是不是2的n次幂 3 判断sizeof作为参数传入的 char 的长度 4 用两个栈实现一个队列 5 将字符串bcde转换为edcb 6 循环计数1 n 如果计到m 则打印出来 第
  • Impala 三大组件:Impala Daemon, Impala Statestore, Impala Catelog

    Impala 三大组件 Impala Daemon 功能 负责读写数据文件 接受来自 Impala shell ODBC Hue 和 JDBC 的查询请求 然后与集群中的其他节点分布式并行工作 将本节点的查询结果返回给中心协调者节点 查询流
  • 创建项目Vue 3 + Vite,引入 Element Plus UI 组件库。

    首先要下载vite 在终端输入npm init vitejs app my vue app template vue 快速生成一个使用 Vite 构建的 Vue 3 项目模版 这时候如果是第一次创建 电脑就会提示 只用输入y 电脑即可自动下
  • 高通9008刷机

    1 进入9008模式 第一种方法 adb reboot edl 第二种方法 手机按钮进入 第三种方法 小米安全通线 第四种方法 短路接点 2 需要安装安卓驱动 高通驱动 QFIL软件 3 需要下载ROM包 4 解压ROM包 5 打开QFIL
  • 毕业季

    进入六月 毕业的氛围越来越浓 虽然忙 但更多的是不舍 四年 转眼之间 大一在高密校区的岁月仍历历在目 6 10 从公司请假 早上八点半去图书馆布置创新比赛的展板 6 11 休整一天 PPT准备6 12号早上的答辩 6 12 早八点半 在中德
  • 欧科云链让科技赋能乡村教育,获公益时报等主流媒体报道...

    中国经济网 公益时报前线报道 近日 欧科云链CSR团队到访饶河县饶河农场中心小学 为该校的人工智能创客实验室注入了新的活力 这一举措旨在助力学校推进人工智能教育 为农村学生提供更广阔的发展机会 饶河农场中心小学一直以来致力于创新教育 自20
  • nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 的解决办法

    问题概述 在基于微服务架构风格的项目开发过程中 为了提高快速开发的目的 提高开发效率 集成了 MyBatisPlus 对于 MyBatisPlus 封装的 CRUD API 接口已经非常强大了 但是有时还是需要使用其动态 SQL 的拼接 在
  • 性能测试之性能优化篇

    目录 为什么进行性能测试 性能测试的目的 服务性能优化的思考 衡量系统性能常用的指标 系统性能计数器 性能测试分类 如何合理的规划我们的架构性能 最后拿数据说话 性能优化原则 性能优化的方法 性能优化的分层思想 所有的优化都会对系统性能产生
  • flask 文件 服务器,flask服务器文件上传云

    flask服务器文件上传云 内容精选 换一换 弹性云服务器支持通过内网访问OBS OBS可供用户存储任意类型的数据 将图片 视频等数据存储至OBS后 在ECS上可以访问OBS 下载桶中的图片或视频等数据 通过内网访问OBS 可以避免因网络不
  • ASP.NET中JSON的序列化和反序列化

    在项目开发过程中 发现需要用到JSON序列化 反序列化的问题 所有 在网上找到了一下这篇文章 摘录了下来 摘自 http www cnblogs com zhaozhan archive 2011 01 09 1931340 html JS
  • 使用ijkplayer播放4k视频卡顿的解决方法

    使用ijkplayer播放4k视频卡顿的解决方法 使用硬解码 ijkMediaPlayer setOption IjkMediaPlayer OPT CATEGORY PLAYER mediacodec 1
  • PAT甲级1135

    红黑树的特点 1 根节点是黑色 2 如果一个节点是红色那么他的两个子节点都是红色 3 任意从根节点到叶子结点的路径上 所有的路径经过的黑色节点数相同 4 红黑树是二叉搜索树 算法 1 根节点是否为黑色 2 红色节点的两个子节点是不是都是黑色
  • JS 数组或对象的遍历(for、for...in、for...of、foreach)

    转载自 JavaScript 比较for for in for of forEach的区别 非早起选手的博客 CSDN博客 目录 一 for 二 for in 三 for of 四 forEach 五 小结 一 for 最原始的方法 用来遍
  • 【在线教育】- 前端环境搭建&讲师CURD前端实现

    在线教育 一 在线教育前端环境搭建 1 1 vue element admin 概述 1 2 vue element admin master安装 1 3 vue element template介绍 了解 1 4 vue element
  • 牛客面试高频算法题js(输出二叉树的右视图、岛屿数量、矩阵的最小路径和、字符串出现次数的TopK问题、二叉树根节点到叶子节点的所有路径和)

    NC136 输出二叉树的右视图 描述 请根据二叉树的前序遍历 中序遍历恢复二叉树 并打印出二叉树的右视图 数据范围 0 le n le 100000 n 10000 要求 空间复杂度 O n O n 时间复杂度 O n O n 如输入 1
  • html跳转页面到自己写的另一个页面,非js

    最简单的跳转页面 记录给渣渣的自己 很low的两个html界面1和2 在1页面上设置一个button 按下按钮 跳转至自己写的2界面 代码如下 div class wrapper div class container h1 Welcome
  • Sqli-labs 15-19

    15关 在输入框内测试Username asd Password 123并点击提交后发现并没有什么卵用 在Username处尝试万能钥匙1 or 1 1 发现成功登录了 接下来看源码分析问题 由于红下划线处的username uname 所
  • 移动app开发如何做接口的版本控制

    移动app为什么要做版本控制 应用升级无法做到全部升级 比如某应用现行1 1版本 某次开发升级后 版本变为1 2 除app界面变化外 后台接口也发生了变化 然而不是所有的用户都在第一时间升级了app 或者由于版本推送不及时 用户忽略更新等原