ThinkPHP5:app版本控制,版本升级接口开发

目录

0x00 app版本控制解决方案

0x01 API接口文档编写

0x02 APP 调试

0x03APP版本表结构的设计

0x04 APP 版本升级接口开发(一)

0x05 APP 版本升级接口开发(二)


0x00 app版本控制解决方案

可以在controller下创建v1 v2等文件夹 对应不同的版本

ThinkPHP5:app版本控制,版本升级接口开发_第1张图片

这样我们在更新v2版本的时候v1版本就不会受到影响

对应的路由配置可以这样写:

Route::resource('api/:ver/cat','api/:ver.Cat');

0x01 API接口文档编写

api接口文档:API的入参、出参格式

需要包含哪些内容:

  1. API接口地址
  2. 请求方式:get put post delete
  3. 入参格式
  4. 出参格式
  5. http code

0x02 APP 调试

0x03APP版本表结构的设计

ThinkPHP5:app版本控制,版本升级接口开发_第2张图片

对应的应该在后台实现 版本管理 模块,实现增删改查基本功能即可

0x04 APP 版本升级接口开发(一)

一般当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();
    }

0x05 APP 版本升级接口开发(二)

ent_app_active表 用于记录用户的基本信息(其实就是http报文中header头记录的信息),用于统计。

ThinkPHP5:app版本控制,版本升级接口开发_第3张图片

原来代码优化:

   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);

 

你可能感兴趣的:(PHP)