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/
```