api 版本控制:
5套环境:开发,测试,提审(预发布),正式,配置接口独立环境(capp.app.com) 【正式和提审分版本】
config接口->访问oss配置文件->nginx-》指定版本目录
配置接口独立环境 连接的是正式服 的数据库
数据库:
1.info 表 存储了 配置文件oss 路径 assetsIosEnvironmentUrl=https://test.app.com/env/ios/
2.新增一个版本控制表
作用:
1)是否强制更新,更新内容
2)切换提审环境
3)api_version 对应不同版本API
4)build_version 产品版本号
OSS:
1.存放配置文件,每个版本有一个正式 和提审 的配置文件
提审环境配置文件组成:ver-api版本号-产品版本号-pre.json
正式环境配置文件组成:ver-api版本号-产品版本号.json
带version的API域名根式:"https://app.com/api/ver_1(api版本号)/"
Nginx:
正式和提审环境 根据api-version 映射 不同版本接口 路径
环境配置代码逻辑:
1.测试和开发 直接域名 访问
2.正式和提审环境访问:
1)首先访问 http://capp.app.com/api/获取配置信息接口 (返回当前版本的接口地址,静态资源地址)根据api_version 和 build_version 访问对应配置文件
2)根据 build-version ,查询对应版本控制表的 is_bring 字段 判断是否切换提审环境,如是提审环境访问 ver-5-20200929-pre.json,正式 ver-5-20200929.json
3)找到对应json,返回API域名,静态资源数据
{
"success": true,
"statusCode": 200,
"result": {
"assets": "https://test.app.com/",
"api": "https://tapp.app.com/api_an/",
"assets_article_cover": "https://test.app.com/resources/article/cover/",
"assets_article_editor": "https://test.app.com/resources/article/editor/",
"assets_article_video": "https://test.app.com/resources/article/video/",
"assets_article_audio": "https://test.app.com/resources/article/audio/",
"assets_article_info": "https://test.app.com/resources/article/info/",
"assets_article_video_cover": "https://test.app.com/resources/article/video_cover/",
"assets_tag_scope": "https://test.app.com/resources/tag/scope/",
"assets_user_cover": "https://test.app.com/resources/user/cover/",
"assets_user_area_json": "https://test.app.com/resources/user/area.json",
"assets_user_education_json": "https://test.app.com/resources/user/education.json",
"assets_user_industry_json": "https://test.app.com/resources/user/industry.json",
"assets_user_job_json": "https://test.app.com/resources/user/job.json",
"assets_agreement": "https://test.app.com/resources/agreement/",
"assets_banner": "https://test.app.com/resources/banner/",
"assets_article_backups_word": "https://test.app.com/resources/article/backups/word/",
"assets_article_backups_pdf": "https://test.app.com/resources/article/backups/pdf/",
"is_updating": false,
"server_time": 1601371006
},
"message": "OK"
}
版本更新代码逻辑:
1)前端先调用 http://capp.app.com/api/获取配置信息接口,根据 返回字段 is_updating【true,有更新;false 无更新】判断
2)有更新,前端调用版本控制接口,验证版本是否强制更新【版本控制表参考sys_ios_version_config 和 sys_android_version_config 】
3)强制更新处理(服务端处理)
1) 中间件里面 验证签名时后,判断是否有强制更新版本,
1)只有 > 当前版本的app 需要强制更新 返回 code码【30000】前端根据 返回code码,弹强制更新 弹窗 进行强更
2)无需强更,正常流转
1.【sys-configure/version-control】版本控制接口
1.传参/返回结构
header传参:
device_id>: 设备id
platform>: ios,android
build-version>:构建版本号
2.返回结构
{
"success": true,
"statusCode": 200,
"result": {
"id": 5,
"version": "1.5.0",
"new_version": "",
"content": "",
"created_at": 1591604081,
"updated_at": 1591604081,
"is_forced_updating": 2,
"title": "更新提醒",
"updated_url": "https://apps.apple.com/cn/app/id1522237063",
"is_bring": 2,
"api_version": 5,
"build_version": "20200929"
},
"message": "OK"
}
2.程序实现过程
1根据platform和build-version 查看对应端的版本控制表
2.先查看大于此版本的,有没有需要更新的版本
1)没有更新
1.返回当前版本信息 is_forced_updating = 0无更新
2)有更新
1.有强制更新
返回最新版本信息 is_forced_updating = 2强制更新
2.普通更新
返回最新版本信息 is_forced_updating = 1 普通更新
接口兼容方案:
主要是针对【切掉app后台,重新打开app的页面接口兼容】
1.广场推荐列表 接口、置顶热门话题列表【未登录】
2.桌面 置顶收藏夹,我的收藏列表 【登录】
解决方案:
以上接口数据结构有调整,将上个版本的 列表数据静态化 存储到json文件中;
上个版本 的接口 从oss读取对应版本 接口的数据 返回给前端【json文件命名 产品版本号_接口名称.json 如:202002225_attentionList.json】