PHP 基于 SW-X 框架,搭建高性能API架构

Posted PHP初学机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 基于 SW-X 框架,搭建高性能API架构相关的知识,希望对你有一定的参考价值。

前言

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

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

1、404接口配置

HTTP服务中,当查找不到对应的路由时,会加载​​/config/route.php​配置文件中的404配置。
以下为具体的参数配置项:

<?php
return [
// 找不到路由的时候,是否启用自定义的错误处理程序
404 => true,
// 自定义的错误处理程序,只需要提供一个类的命名空间位置即可
error_class => \\\\box\\\\http_error,
];

下面我们打开​​/box/http_error.php​​文件,并修改成以下代码:

<?php
namespace box;
use \\x\\controller\\Http;

class http_error extends Http

/**
* 入口
* @todo 无
* @author 小黄牛
* @version v1.0.1 + 2020.05.29
* @deprecated 暂不启用
* @global 无
* @return void
*/
public function __construct()
return \\x\\Restful::code(\\x\\Restful::ONROUTE())->callback();

由于上面使用​​\\x\\Restful​​组件,抛出了一个​​ONROUTE​​状态码,所以对应的Restful配置也要进行修改:

​/restful/default/code.php​​修改成如下代码:

<?php
return [
ERROR => 0, // 默认失败状态码
SUCCESS => 1, // 默认成功状态码
ACTION_ERROR => 40001, // 权限校验失败
ONROUTE => 40004, // 不存在的接口
];

​/restful/default/msg.php​​修改成如下代码:

<?php
return [
// 默认错误状态码对应的tips
ERROR => [
default => 请求失败, // 默认值
],
// 默认成功状态码对应的tips
SUCCESS => [
default => 请求成功, // 默认值
test => 测试msg,
],
// 权限校验失败
ACTION_ERROR => [
default => 权限校验失败, // 默认值
],
// 不存在的接口
ONROUTE => [
default => 该接口不存在, // 默认值
],
];

这时候我们随便访问一个不存在的接口,​​http://IP地址:端口/api/user/info​​,就可以看到框架抛出了下面的状态码:


"code": 40004,
"msg": "该接口不存在",
"data": []

2、请求类型限制

SW-X中需要限制某个HTTP控制器的请求类型有多种方式,
第1种是使用​​@Post​​、​​@Get​​、​​@Ajax​​注解进行限制。

第2种,则是使用​​\\x\\Validate​​验证器组件,对请求头进行判断过滤。

一般建议使用第1种方式,因为非常灵活,而第2种一般是用于对某些同组接口需要进行相同请求头过滤,例如签名判断等业务时使用。
下面,我们将​​/app/http/v1_0_1/controller/shop/delete.php​​控制器改代码如下:

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

class delete extends Http

/**
* 我只允许Post+Ajax的请求
* @Post
* @Ajax
*/
public function index()
// Restful组件抛出接口响应
return Restful::code(Restful::SUCCESS())->data(您的请求通过啦)->callback();

同时,由于该注解的错误信息是由​​/box/lifecycle/route_error.php​​生命周期文件进行回调处理,所以我们还需要将该文件改成以下代码:

<?php
namespace box\\lifecycle;

class route_error

/**
* 特殊转换3种注解的Msg值
*/
private $tips = [
Route Method Get => 只允许Get请求,
Route Method Post => 只允许Post请求,
Route Method Ajax => 只允许Ajax请求,
];
/**
* 接受回调处理
* @todo 无
* @author 小黄牛
* @version v1.1.5 + 2020.07.15
* @deprecated 暂不启用
* @global 无
* @param Swoole $server 服务实例
* @param string $fd 客户端标识
* @param string $status 错误事件状态码
* @return bool
*/
public function run($server, $fd, $status)
$tips = Annotate:SW-X Status:.$status. ERROR !;

$type = \\x\\Config::get(server.sw_service_type);
// 只处理HTTP服务请求的抛出
if ($type == http)
if (isset($this->tips[$status])) $tips = $this->tips[$status];
return \\x\\Restful::code(\\x\\Restful::LIFECYCLE())->setMsg($tips)->callback();

return true;

由于上面使用​​\\x\\Restful​​组件,抛出了一个​​LIFECYCLE​​状态码,所以对应的Restful配置也要进行修改:

​/restful/default/code.php​​修改成如下代码:

<?php
return [
ERROR => 0, // 默认失败状态码
SUCCESS => 1, // 默认成功状态码
ACTION_ERROR => 40001, // 权限校验失败
ONROUTE => 40004, // 不存在的接口
LIFECYCLE => 20001, // 路由生命周期错误回调状态码[使用自定义MSG]
];

注意,生命周期文件修改后,热重载无效,需要手动stop后,重新start服务。
完成重启后,我们再访问​​http://IP地址:端口/api/shop/delete​​接口,就可以看到框架抛出了下面的状态码:


"code": 20001,
"msg": "只允许Post请求",
"data": []

如果要测试请求成功,可以使用Postman或Jquery等工具,发送Post-Ajax请求即可。

3、Validate校验表单数据

SW-X种推荐使用​​\\x\\Validate​​验证器组件,对请求进行判断过滤。

具体的使用方法,可以参考官方文档:​​https://www.sw-x.cn/word/v2.5.x/vali_explain.html

下面我们来创建一个​​Shop​​校验器,用于针对商品分组的API请求。

创建验证器文件​​/box/validate/Shop.php​​,写入代码如下:

<?php
namespace box\\validate;
use x\\Validate;

class Shop extends Validate

// 定义字段对应的规则
protected $rule = [
id => require|int,
title => require|min:10|max:20,
info.des => min:10|max:20,
];
// 自定义错误值声明
protected $message = [
id.require => id忘记输入啦,
title.min => title不能小于0,
title.max => title不能大于0,
info.des.min => :preset不能小于0,
info.des.min => info.des不能大于0,
];
// 场景定义
protected $scene = [
// 修改时使用的场景(简写)
edit => [id,info.des], // 需要校验的字段
// 删除时使用的场景(简写)
PHP 基于 SW-X 框架,搭建高性能API架构

PHP 基于 SW-X 框架,搭建RPC微服务支持

PHP使用SW-X框架的Redis-UML组件,对用户信息进行缓存读写

基于PHP语言Laravel9+Vue+ElementUI搭建的Web项目框架

基于PHP语言框架Laravel+Layui搭建的Web项目

PHP语言Laravel9+Vue+ElementUI搭建的系统后台框架