Lumen 如何处理手机 App 版本控制!

自项目开始以来版本控制就一直困扰着我,因为每次app升级一次版本就有很多东西要变更,曾经有人的做法是:每升级一次版本就在服务器上新建一个文件夹如v235,v236,v237... 存放最新的代码,然后域名配置的时候配置到v235/public/,v236/public ,v237/public ...这么做不是不行缺点是每次都要改服务器的配置文件风险太大。反正我觉得不行,如果我做的话我的思路如下:
客户端请求的时候在header中把版本号传递过来,根据不同的版本号读取不同的配置文件,配置文件中主要放了需要版本控制的接口以及用到的控制器的路径 调用的function等等这些可以自定义,根据获取到的当前的路由的名字查一下看是否在配置文件中,如果在的话直接使用配置文件中的控制器并调用配置文件中的function,传递的参数则是$request
具体步骤如下:

  1. 在config/下新建versionRoute235.php内容如下:
  2. return [
    'purchase_orderlist' => [//这里是路由中指定的别名
    'title' => 'description',//这里是描述
    'controller' => 'App\Http\Controllers\testController'//这里是控制器的命名空间,
    'function' => 'test',//这里是具体的function
    ],
    ];
  3. 新建中间件 VersionControlMiddle.php 内容handle如下:
    public function handle($request, Closure $next)
    {
    if($request->header('app-version')){
    //处理版本号
    $appversion = $request->header('app-version');
    $filterversion = implode('',explode('.',$appversion));

        //处理路由 我用的是lumen 如果是laravel的话可以通过 Route::currentRouteName("");
        $routeArr         = $request->route();
        $currentRouteName = $routeArr[1]['as'];//获取当前路由名称
    
        //获取对应的配置文件
        $versionRoutes = config('versionRoutes'.$filterversion);
        if($versionRoutes[$currentRouteName]){
            $controller = $versionRoutes[$currentRouteName]['controller'];
            $obj = new $controller();
            $func = $versionRoutes[$currentRouteName]['function'];
            return $obj->$func($request);
        }else{
            return response()->json ([
                'code'    => 420,
                'message' => 'Please add a new config file!',
                'data'    => new \stdClass()
            ]);
        }
    }
    return $next($request);

    }
    这样每次请求过来,都会获取请求 的路由名字然后判断是否在版本控制的路由列表中,如果在的话,直接实例化配置文件中的controller 调用的是配置文件中的function 参数就是$request。这样做的缺点就是每次升级app都要增加对应的版本的配置文件。每天进步一点点,希望水滴能帮到大家!

本作品采用《CC 协议》,转载必须注明作者和本文链接
YLR
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2
YLR

@Seaony 有不好用的可以私信我,有时间,我会回复的。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!