乐趣区

关于php:PHP-基于-SWX-框架搭建高性能API架构三

前言

官网地址:SW- X 框架 - 专一高性能便捷开发而生的 PHP-SwooleX 框架

心愿各大佬举起小手,给小弟一个 star:https://github.com/swoolex/swoolex

1、什么是 Restful 组件

在 SW- X 中,Restful 组件是对 API 返回值构造的封装反对。
\x\Restful类反对定义返回值的构造、Code->Msg 关联、返回值强类型转换、抛出的数据类型转换、响应的申请头定义(跨域反对)。

2、Restful 的设置

API 返回值的应用,次要依赖 /restful/ 目录中的 config.php 配置我的项目,初始化默认配置如下:

<?php
return [
    // 返回值类型 反对 json|xml
    'type' => 'json',
    // 默认的返回值格局
    'default' => [
         'force'  => true, // 是否强制返回值 int|double|null 类型转换
         'status' => 'code', // 状态码字段名
         'tips'   => 'msg',  // 形容字段名
         'result' => 'data', // 后果集字段名
         'set'    => [], // 默认后果集
         'headers' => [], // 响应头,可用于跨域设置(v2.5.23 版本前反对)],
]

其中 default 为默认的数据结构,当咱们不应用 \x\Restful::make('新的下标') 指定新的返回值构造时,默认应用该构造,如果咱们须要设置新的返回值构造,只须要复制 default 的数组构造,将下标改为新值即可。

同时,/restful/目录下还存在一个 default 目录,该目录是对应 default 默认的返回值构造,用于寄存 code 状态码和 msg 状态阐明。

如果设置了新的数据结构,则须要复制 default 目录,并重命名为对应的下标名。

上面咱们来看下 default 目录下的两个文件:

Code 状态码,/restful/default/code.php

<?php
// 状态码治理
return [
    'ERROR' => 0, // 默认失败状态码
    'SUCCESS' => 1, // 默认胜利状态码
];

在理论利用时,咱们只须要通过 \x\Restful:: 状态码键名() 的形式来读取对应的状态码值,例如应用 SUCCESS 的状态码就用\x\Restful::SUCCESS()

Msg 阐明,/restful/default/msg.php

<?php
// 状态阐明治理
return [
    // 默认谬误状态码对应的 tips
    'ERROR' => ['default' => '申请失败', // 默认值],
    // 默认胜利状态码对应的 tips
    'SUCCESS' => [
        'default' => '申请胜利', // 默认值
        'test' => '测试 msg',
    ],
];

状态码阐明是一个二维数组,一维下标须要对应状态码的下标,同时必须存在一个名为 default 的二维下标。

这样设计的初衷是因为,在理论利用中,同一个状态码可能存在多个不同的阐明,这样就能够通过指定下标读取对应的阐明,当不指定时,读取 default 下标。

例如:

use x\Restful;

// 读取的就是 SUCCESS['default']阐明,默认应用 default
Restful::code(Restful::SUCCESS())->callback();

// 指定 msg 下标,读取的就是 SUCCESS['test']阐明
Restful::code(Restful::SUCCESS())->msg('test')->callback();

3、Restful 组件的更多示例

use x\Restful;

// 自定义 msg 内容
return Restful::code(Restful::SUCCESS())->setMsg('把我抛出了,没用到 msg.php 里的配置')->callback();

// 自定义抛出类型
return Restful::type('xml')->code(Restful::SUCCESS())->callback();

// 设置抛出的数据集
return Restful::code(Restful::SUCCESS())->data([
    'user_id' => 1,
    'username' => 'SW-X',
])->callback();

// 设置跨域反对
return Restful::code(Restful::SUCCESS())->header([
    // 接口跨域设置
    'origin' => '*',
    // 接口数据申请类型
    'type' => '',
    // 接口跨域容许申请的类型
    'methods' => 'POST,GET,OPTIONS,DELETE',
    // 接口是否容许发送 cookies
    'credentials' => 'true',
    // 接口容许自定义申请头的字段
    'headers' => 'Content-Type,Content-Length,Accept-Encoding,X-Requested-with, Origin, api_key',
])->callback();

4、在控制器中应用 Restful 的简略示例

接回上一篇文章,咱们批改 shop/select.php 路由对应的控制器代码:

<?php
namespace app\http\v1_0_1\controller\shop;
use x\controller\Http;
// 引入 Restful 组件
use x\Restful;

class select extends Http
{public function index() {
        // Restful 组件抛出接口响应
        return Restful::code(Restful::SUCCESS())->data([
            'user_id' => '1',
            'username' => 'SW-X',
        ])->callback();}
}

输入后果:

{
  "code": 1,
  "msg": "申请胜利",
  "data": {
    "user_id": 1,
    "username": "SW-X"
  }
}

5、枚举

如果你不习惯 Restful 组件格调治理 API 接口返回值的话,SW- X 还反对 Enum 枚举定义的形式。

枚举类必须继承至 \design\Enum 基类,官网倡议对立定义在 /box/enum/ 目录下,但不强制要求。

上面咱们就在该目录下,创立一个 ShopEnum 类,代码如下:

<?php
namespace box\enum;
// 必须继承枚举基类
use design\Enum;

class ShopEnum extends Enum {
    /*
     * 谬误异样
    */
    const ERROR = 500;
    /**
     * 失常申请
    */
    const SUCCESS = 200;
}

留神下面的正文格调,其正文内容,就是状态码对应的 MSG 内容。

6、枚举类的应用示例

use box\enum\ShopEnum;
// 取得对应的 Msg 内容
echo ShopEnum::get(ShopEnum::ERROR);

// 组装成 code-msg-data 的数组构造(该 3 个字段名都是零碎固定的)ShopEnum::get(ShopEnum::ERROR, [
    'data' => ['user_id' => 1]
]);
后果集:array(3) {["code"]=>
  int(500)
  ["msg"]=>
  string(12) "谬误异样"
  ["data"]=>
  array(1) {["user_id"]=>
    int(1)
  }
}

// 自定义数据结构:$ret = [
    'code' => ShopEnum::ERROR,
    'msg' => ShopEnum::get(ShopEnum::ERROR),
    'data => [],];

7、在控制器中应用枚举的简略示例

接回上一篇文章,咱们批改 shop/select.php 路由对应的控制器代码:

<?php
namespace app\http\v1_0_1\controller\shop;
use x\controller\Http;
// 引入自定义枚举类
use box\enum\ShopEnum;

class select extends Http
{public function index() {
        $array = ShopEnum::get(ShopEnum::ERROR, [
                'data' => ['user_id' => 1]
        ]);
        return $this->fetch(dd($array));
    }
}

输入后果:

array(3) {["code"] => int(500)
  ["msg"] => string(12) "谬误异样"
  ["data"] => array(1) {["user_id"] => int(1)
  }
}
退出移动版