前言

官网地址: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配置我的项目,初始化默认配置如下:

<?phpreturn [    // 返回值类型 反对 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']阐明,默认应用defaultRestful::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路由对应的控制器代码:

<?phpnamespace 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类,代码如下:

<?phpnamespace 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路由对应的控制器代码:

<?phpnamespace 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)  }}