当前位置: 首页 > 后端技术 > PHP

PHP基于SW-X框架构建高性能API架构(四)

时间:2023-03-30 02:01:15 PHP

前言官网地址:SW-X框架-专注于高性能便捷开发之星的PHP-SwooleX框架:https://github.com/swoolex/swoolex1,什么是中间件?中间件是AOP切面编程的衍生产品。SW-X中的中间件可以绑定路由地址,实现控制器无切入的关联绑定。在中间件中,可以进行请求拦截(pre-operation)或者请求缓存销毁(post-operation)等服务。2、通过路由绑定中间件回到上一章的案例,我们现在需要在所有前缀为/api/*的接口上统一绑定一个名为Auth的中间件。需要先在/config/middleware.php中间件配置文件中注册绑定规则:>[\box\middleware\Auth::class,],];并不是所有的中间件都必须继承\x\Middleware基类,但一般建议继承。\x\Middleware类提供了一个error()方法。当开发者想要中断应用程序继续向下执行时,可以调用该方法向客户端抛出一段自定义的提示内容。此方法兼容框架中的4种不同服务。中间件推荐(但不强制)存放在/box/middleware目录下,方便项目管理。接下来,我们在/box/middleware/目录下创建一个Auth.php类,编写代码:*+---------------------------------------------------------------------*开源许可证:http://www.apache.org/licenses/LICENSE-2.0*+---------------------------------------------------------------------------*/namespacebox\middleware;usex\Middleware;usex\Restful;classAuthextendsMiddleware{//需要跳过的路由private$_skip=['shop/delete',];//需要跳过的前置路由private$_group_skip=['login/',];/***预操作*@todoNone*@author小黄牛*@versionv2.5.0+2021.07.20*@deprecated尚未启用*@globalNone*@returnvoid*/publicfunctionhandle(){//获取当前路径通过地址$route=\x\Config::get('route');$url=str_replace($route['suffix'],'',ltrim(\x\Request::url(),$route['cutting']));$url=substr_replace($url,'',0,(strpos($url,$route['cutting'])+1));//跳过验证if(in_array($url,$this->_skip)){returntrue;}//跳过验证foreach($this->_group_skipas$v){if(stripos($url,$v)===0){returntrue;}}//通过上下文,获取请求实例$Request=\x\context\Request::get();$get=$Request->get;//获取表单$post=$Request->post;//发布表单$header=$Request->header;//postform//没有访问权限if(!isset($get['test'])){Restful::code(Restful::ACTION_ERROR())->callback();//返回false表示中断执行returnfalse;}//返回true表示继续向下执行returntrue;同时,由于我们上面使用了一个ACTION_ERROR状态码,所以我们需要在Restful状态码文件配置中加入response修改/restful/default/code.php为如下代码:0,//默认失败状态码'SUCCESS'=>1,//默认成功状态码'ACTION_ERROR'=>40001,//默认成功状态码];/restful/default/msg.php修改为如下代码://默认成功状态码对应的提示'SUCCESS'=>['default'=>'requestsuccess',//默认值'test'=>'testmsg',],//权限验证失败'ACTION_ERROR'=>['default'=>'权限验证失败',//默认值],];这时候我们访问http://IP地址:端口/api/shop/select接口,就会看到框架抛出如下状态码:{"code":40001,"msg":"授权验证失败","data":[]}如果访问http://IP地址:端口/api/shop/select?test=就通过了。同时我们也可以创建/app/http/v1_0_1/controller/shop/delete.php和/app/http/v1_0_1/controller/login/send.php接口来查看中间件是否可以正常跳过。/app/http/v1_0_1/controller/shop/delete.php代码如下:data(['title'=>'我是api/shop/delete,skip中间件验证',])->callback();}}/app/http/v1_0_1/controller/login/send.php代码如下:data(['title'=>'我是api/登录/发送,跳过中间件验证',])->callback();}}创建完成后,可以通过以下地址查看测试结果:http://IP地址:port/api/shop/deletehttp://IP地址:port/api/login/send