mysql 多版本控制_多版本控制

mservice支持对api进行版本控制。这样就可以为项目提供新旧版api。mservice通过配置文件来实现多版本,同时还能保证在各个微服务部署时,确保各版本文件的独立性。

## 一、开启

在项目根目录下创建version.php配置文件。

```

return [

"v1" => [

"package" => "App/v1"

],

"v2" => [

"package" => "App/v2"

],

]

```

配置完文件后,部署相应的目录。

```

Web/App

├── v1

│   └── Index.php

└── v2

└── Index.php

```

打开App/v1/Index.php文件,内容结构如下。

```

namespace Web\App\v1;

use Core\Common\HttpBase;

use Core\Util\Util;

class Index extends \Web\Home\Base

{

function index(HttpBase $httpBase)

{

}

}

```

命名空间必须要和version.php文件所描述的一样。现在就可以在url里加上版本号,访问相应的api版本了。

```

v1:

http://192.168.90.244:4001/v1/app/Index/Index

v2:

http://192.168.90.244:4001/v2/app/Index/Index

```

## 二、配置文件

版本控制都定义在version.php里,支持一级及多级目录配置。以下配置即为一级目录配置。

~~~

return [

"v1" => [

"package" => "App"

],

"v2" => [

"package" => "App2"

],

]

~~~

这种方式,可以保留旧代码,不需要修改其命名空间,也不需要做迁移。不好之处是package只能为一级。

## 三、多容器部署

version的配置信息全为key=>value形式,当应用多容器部署时。这时的key,必须要加上bindDir作为前缀。

```

namespace Services\Process;

use Core\Util\Util;

class AdminHttp

{

/**

* * 绑定的目录 **

*/

public static $bindDir = "Admin";

/**

* * 绑定的端口 **

*/

public static $port = 7074;

}

```

对应的版本配置信息如下。

```

return [

"Admin-v1"=>[

"package" => "Admin/v1"

]

];

```

对应目录结构如下。

```

Web/Admin

├── Library

│   └── Props

├── v1

│   └── Sprite.php

└── v2

└── Sprite.php

```

访问的时候,不需要加上bindDir。

```

v1:

http://192.168.90.244:7074/v1/admin/Sprite/index/

v2:

http://192.168.90.244:7074/v2/admin/Sprite/index/

```


版权声明:本文为weixin_36177083原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。