目录
0x00 app版本控制解决方案
0x01 API接口文档编写
0x02 APP 调试
0x03APP版本表结构的设计
0x04 APP 版本升级接口开发(一)
0x05 APP 版本升级接口开发(二)
可以在controller下创建v1 v2等文件夹 对应不同的版本
这样我们在更新v2版本的时候v1版本就不会受到影响
对应的路由配置可以这样写:
Route::resource('api/:ver/cat','api/:ver.Cat');
api接口文档:API的入参、出参格式
需要包含哪些内容:
对应的应该在后台实现 版本管理 模块,实现增删改查基本功能即可
一般当APP初始化的时候,就会向该接口发送一个get请求。
路由:
Route::get('api/:ver/init','api/:ver.Index/init');
该接口可以放在:
application\Api\controller\v1\IndexController.php 中
/**
* 客户端初始化接口
* 1.检测APP是否需要升级
*
*/
public function init(){
//app_type 去 ent_version表中查询
try{
$version = model('Version')->getLastNormalVersionByAppType($this->headers['app_type']);
}catch(\Exception $e){
return new ApiException('从数据表中获取版本内容失败!',500);
}
if(empty($version)){
return new ApiException("数据表中不存在该版本的相关信息",404);
}
//如果表中版本号大于header头中版本号则需要升级
if($version->version > $this->headers['version']){
$version->is_update = $version->is_force == 1?2:1;
}else{
$version->is_update = 0; //is_update 0 不需要更新 1需要更新 2强制更新
}
return show(config('api.success_code'),'获取版本信息成功!',$version,200);
}
getLastNormalVersionByAppType
/**
* @description: 通过apptype获取最后一条版本内容
* @param string $appType
* @return:
*/
public function getLastNormalVersionByAppType($appType =''){
$data = [
'status'=>1,
'app_type'=>$appType,
];
$order = [
'id'=>'desc',
];
return $this->where($data)
->order($order)
->find();
}
ent_app_active表 用于记录用户的基本信息(其实就是http报文中header头记录的信息),用于统计。
原来代码优化:
public function init(){
//app_type 去 ent_version表中查询
try{
$version = model('Version')->getLastNormalVersionByAppType($this->headers['app_type']);
}catch(\Exception $e){
return new ApiException('从数据表中获取版本内容失败!',500);
}
if(empty($version)){
return new ApiException("数据表中不存在该版本的相关信息",404);
}
//如果表中版本号大于header头中版本号则需要升级
if($version->version > $this->headers['version']){
$version->is_update = $version->is_force == 1?2:1;
}else{
$version->is_update = 0; //is_update 0 不需要更新 1需要更新 2强制更新
}
//记录用户的基本信息 用于统计
$actives = [
'version'=>$this->headers['version'],
'app_type'=>$this->headers['app_type'],
'did'=>$this->headers['did'],
];
try{
model('AppActive')->add($actives);
}catch(\Exception $e){
//todo 可以记录到日志中
//Log::write();
}
return show(config('api.success_code'),'获取版本信息成功!',$version,200);