think PHP实现API版本控制

开发准备

对于接口开发,建议采用单独的项目部署,与后台项目分离开来,原因如下:

1. 接口多用于查询数据,对于数据提交的较少

2. 接口的权限多采用token模式,后台多采用RBAC控制访问

3. 对于需要高度安全的接口,需要进行加密处理。

首先建立新的项目,配置二级域名 api.xjwblog.com 。对于 APP 客户端开发,往往需要多版本的兼容,因此在服务端需要对接口进行兼容处理。

利用 ThinkPHP5 的多级控制器实现版本的控制

ThinkPHP5 多级控制器说明

以下我们以首页 banner 图为例:

在 route.php 中加入以下代码:

1
Route::get('/:version/banner''api/:version.Home/banner');

建立 api 模块,创建 controller 控制器层和 interfaces 接口约束层(对要实现的基本接口进行约束)以及 Home 文件, 结构如下:

think PHP实现API版本控制

interfaces/Home.php 中代码如下:

1
2
3
4
5
6
7
8
9
10
<?php
 
namespace appapiinterfaces;
 
interface Home
{
 
    public function banner ();
 
}

controller/Base.php 中代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
namespace appapicontroller;
use thinkController;
 
 
 
class Base extends Controller
{
 
    public function _initialize ()
    {
        parent::_initialize ();
         
        //如有权限验证 加入权限验证
    }
 
}

controller/Home.php 中代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
namespace appapicontroller;
 
class Home extends Base implements appapiinterfacesHome
{
    public function banner()
    {
         
    }
 
}

controller/v1/Home.php 中代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
namespace appapicontrollerv1;
 
use appapicontrollerHome as BaseHome;
 
class Home extends BaseHome
{
    public function banner()
    {
        return json(['msg' => 'v1-banner']);
    }
 
}

controller/v2/Home.php 中代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
namespace appapicontrollerv2;
 
use appapicontrollerHome as BaseHome;
 
class Home extends BaseHome
{
    public function banner()
    {
        return json(['msg' => 'v2-banner']);
    }
 
}

说明:

controller/Base.php 中存放一些公用的方法以及必要的验证

controller/Home.php 中存放一些公用的方法以及无需进行版本验证的接口

controller/v1/Home.php 中存放 v1 版本单独所需的接口以及覆盖父类 Home.php 中的接口进行个性化配置

controller/v2/Home.php 中存放 v2 版本单独所需的接口以及覆盖父类 Home.php 中的接口进行个性化配置

接下来利用 postman 进行测试:

think PHP实现API版本控制

think PHP实现API版本控制

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » think PHP实现API版本控制

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏