Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试,yii2restful
Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试,yii2restful
环境配置:
开启服务器伪静态
本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码
LoadModule rewrite_module modules/mod_rewrite.so
将其前面的#去掉,如果没有找到则添加进去。
找到一下代码
<Directory "C:/phpStudy/Apache/cgi-bin"><span> AllowOverride All Options None </span><span>Require</span><span> all granted </span></Directory>
将原本的AllowOverride None改为AllowOverride All。
然后在站点根目录下创建一个.htaccess文件,内容如下:
此处不再赘述yii2的配置,如果需要可以看YII2实战手册。
YII2实际操作:
1、配置URL规则及modules
(1)新建modules文件夹,实行api接口版本控制。例如V1版本、V2版本……
在v1文件夹下新建controllers文件夹(控制器)、models文件夹(模型)、Module.php配置文件。
Module.php文件如下:
<span> 1</span> <?<span>php </span><span> 2</span> <span>namespace api\modules\v1; </span><span> 3</span> <span> 4</span> <span>class</span> Module <span>extends</span><span> \yii\base\Module </span><span> 5</span> <span>{ </span><span> 6</span> <span> 7</span> <span>public</span> <span>$controllerNamespace</span> = 'api\modules\v1\controllers'<span>; </span><span> 8</span> <span> 9</span> <span>public</span> <span>function</span><span> init() </span><span>10</span> <span> { </span><span>11</span> parent::<span>init(); </span><span>12</span> <span> } </span><span>13</span> }
第2行和第7行随版本扩展而变化(v1->v2...)。
(2)配置config文件夹下的main.php文件
1 php 2 $params = array_merge(require (__DIR__ . '/../../common/config/params.php'), require (__DIR__ . '/../../common/config/params-local.php'), require (__DIR__ . '/params.php'), require (__DIR__ . '/params-local.php')); 3 4 return [ 5 'id' => 'app-api', 6 'basePath' => dirname(__DIR__), 7 'bootstrap' => [ 8 'log' 9 ], 10 'modules' => [ 11 'v1' => [ 12 'class' => 'api\modules\v1\Module' 13 ], 14 'v2' => [ 15 'class' => 'api\modules\v2\Module' 16 ] 17 ], 18 'controllerNamespace' => 'api\controllers', 19 'components' => [ 20 'user' => [ 21 'identityClass' => 'common\models\User', 22 'enableAutoLogin' => false, 23 'enableSession' => false, 24 'loginUrl' => null 25 ], 26 'urlManager' => [ 27 'enablePrettyUrl' => true, // 启用美化URL 28 'enableStrictParsing' => true, // 是否执行严格的url解析 29 'showScriptName' => false, // 在URL路径中是否显示脚本入口文件 30 'rules' => [ 31 [ 32 'class' => 'yii\rest\UrlRule', 33 'controller' => [ 34 'v1/site' 35 ] 36 ], 37 [ 38 'class' => 'yii\rest\UrlRule', 39 'controller' => [ 40 'v2/site' 41 ] 42 ] 43 ] 44 ], 45 'log' => [ 46 'traceLevel' => YII_DEBUG ? 3 : 0, 47 'targets' => [ 48 [ 49 'class' => 'yii\log\FileTarget', 50 'levels' => [ 51 'error', 52 'warning' 53 ] 54 ] 55 ] 56 ], 57 'errorHandler' => [ 58 'errorAction' => 'site/error' 59 ] 60 ], 61 'params' => $params 62 ]; main.php注意10~17行、20~44行的组件配置,相信大家仔细阅读就能明白,此处不再赘述原理,请大家尤其注意33~35行的代码,此处表示的是v1/site控制器,随着接口控制器的增多,可以直接在数组中增加即可。本文力求快速配置出RESTful架构的实现。
(3)v2、v3表示以后的版本变化,配置都类似于v1文件夹。
2、创建一个模型
数据库准备一个名为mxq_guide的数据表
<span>CREATE TABLE `mxq_guide` ( `id` int(</span>11) NOT <span>NULL</span> AUTO_INCREMENT,<span> `imgurl` varchar(</span>255) <span>DEFAULT</span> <span>NULL </span>COMMENT '图片路径'<span>,</span><span> <br /> `status` int(</span><span>11) </span><span>DEFAULT</span><span>NULL</span><span> COMMENT '1启用 0禁用',<br /></span><span> `flag` int(</span><span>11) </span><span>DEFAULT</span><span>NULL</span><span> COMMENT '1安卓 2苹果',</span><span> <br /> PRIMARY </span><span>KEY</span><span> (`id`) <br /> ) ENGINE</span><span>=MyISAM AUTO_INCREMENT=24 </span><span>DEFAULT</span><span> CHARSET=utf8 COMMENT='APP导航图';</span>
创建后请注意及时往数据库添加几条数据信息。
通过脚手架gii来创建guide.php模型(使用方法请看yii2权威指南)。生成后的文件注意改写,修改为如下形式以满足RESTful的需求。之后从models文件夹中转移到v1/models文件夹中,并注意命名空间的修改。
1 php 2 namespace api\modules\v1\models; 3 4 use Yii; 5 use yii\db\ActiveRecord; 6 use yii\web\IdentityInterface; 7 8 /** 9 * This is the model class for table "{{%guide}}". 10 * 11 * @property integer $id 12 * @property string $imgurl 13 * @property integer $status 14 * @property integer $flag 15 */ 16 class Guide extends ActiveRecord implements IdentityInterface 17 { 18 19 public static function findIdentityByAccessToken($token, $type = null) 20 { 21 return static::findOne([ 22 'access_token' => $token 23 ]); 24 } 25 26 public function getId() 27 { 28 return $this->id; 29 } 30 31 public function getAuthKey() 32 { 33 return $this->authKey; 34 } 35 36 public function validateAuthKey($authKey) 37 { 38 return $this->authKey === $authKey; 39 } 40 41 public static function findIdentity($id) 42 { 43 return static::findOne($id); 44 } 45 46 public static function tableName() 47 { 48 return '{{%guide}}'; 49 } 50 51 public function rules() 52 { 53 return [ 54 [ 55 [ 56 'imgurl', 57 'status', 58 'flag' 59 ], 60 'required' 61 ], 62 [ 63 [ 64 'status', 65 'flag' 66 ], 67 'integer' 68 ], 69 [ 70 [ 71 'imgurl' 72 ], 73 'string', 74 'max' => 255 75 ] 76 ]; 77 } 78 79 public function attributeLabels() 80 { 81 return [ 82 'id' => Yii::t('app', 'ID'), 83 'imgurl' => Yii::t('app', 'imgurl'), 84 'status' => Yii::t('app', 'status'), 85 'flag' => Yii::t('app', 'flag') 86 ]; 87 } 88 } guide.php3、创建一个控制器
1 php 2 namespace api\modules\v1\controllers; 3 4 use Yii; 5 use yii\rest\ActiveController; 6 use yii\filters\auth\CompositeAuth; 7 use yii\filters\auth\QueryParamAuth; 8 use yii\data\ActiveDataProvider; 9 10 class SiteController extends ActiveController 11 { 12 13 public $modelClass = 'api\modules\v1\models\guide'; 14 15 public $serializer = [ 16 'class' => 'yii\rest\Serializer', 17 'collectionEnvelope' => 'items' 18 ]; 19 20 // public function behaviors() 21 // { 22 // $behaviors = parent::behaviors(); 23 // $behaviors['authenticator'] = [ 24 // 'class' => CompositeAuth::className(), 25 // 'authMethods' => [ 26 // QueryParamAuth::className() 27 // ] 28 // ]; 29 // return $behaviors; 30 // } 31 public function actions() 32 { 33 $actions = parent::actions(); 34 // 注销系统自带的实现方法 35 unset($actions['index'], $actions['update'], $actions['create'], $actions['delete'], $actions['view']); 36 return $actions; 37 } 38 39 public function actionIndex() 40 { 41 $modelClass = $this->modelClass; 42 $query = $modelClass::find(); 43 return new ActiveDataProvider([ 44 'query' => $query 45 ]); 46 } 47 48 public function actionCreate() 49 { 50 $model = new $this->modelClass(); 51 // $model->load(Yii::$app->getRequest() 52 // ->getBodyParams(), ''); 53 $model->attributes = Yii::$app->request->post(); 54 if (! $model->save()) { 55 return array_values($model->getFirstErrors())[0]; 56 } 57 return $model; 58 } 59 60 public function actionUpdate($id) 61 { 62 $model = $this->findModel($id); 63 $model->attributes = Yii::$app->request->post(); 64 if (! $model->save()) { 65 return array_values($model->getFirstErrors())[0]; 66 } 67 return $model; 68 } 69 70 public function actionDelete($id) 71 { 72 return $this->findModel($id)->delete(); 73 } 74 75 public function actionView($id) 76 { 77 return $this->findModel($id); 78 } 79 80 protected function findModel($id) 81 { 82 $modelClass = $this->modelClass; 83 if (($model = $modelClass::findOne($id)) !== null) { 84 return $model; 85 } else { 86 throw new NotFoundHttpException('The requested page does not exist.'); 87 } 88 } 89 90 public function checkAccess($action, $model = null, $params = []) 91 { 92 // 检查用户能否访问 $action 和 $model 93 // 访问被拒绝应抛出ForbiddenHttpException 94 // var_dump($params);exit; 95 } 96 } SiteController.php控制器请创建在modules/controllers文件夹下,并注意命名空间的修改。
要注意的是,此处的控制器与普通的控制器继承Controller不同,此处需继承ActiveController类。
20~30行注释的代码是基于RESTful架构的access_token认证,目前还未测试通过,后续补充。
至此,基于YII2的所有配置已基本完成,接下来介绍api接口测试工具及方法。
RESTful的测试工具PostMAN:
首先介绍一下postman这款插件,是基于谷歌浏览器的一款模拟请求的实用插件。具体使用,在下面测试过程中涉及截图,介绍不足之处请见谅,自己也是第一次使用。
推荐使用上面的APP版本,便于后续封装自己写好的api接口,下面的是网页版本。
YII2支持的RESTful有四种请求方式:GET查看信息,POST创建信息,PUT更新信息,DELETE删除信息。
下面开始演示四种请求数据的方式。(只是截图演示效果,具体使用还需要大家自己去摸索。)
此处演示的是GET方法请求数据库的数据。对应的是modules/controllers/SiteController/actionIndex方法。
请大家注意最上面方框内的URL地址,rest默认将控制器进行复数请求http://api.mxq.com/v1/sites,此处就是rest的默认规则。
打*星号位置显示的是正常的效果,如若出现错误,大家可以去YII权威指南——错误检查错误原因。
YII2的ActiveController默认实现了数据的分页效果。
此处演示的是POST方法新建数据库的数据。对应的是modules/controllers/SiteController/actionCreate方法。
如果在数据库的数据层写好数据校验规则,此处提交数据不满足要求的时候就会显示相应的错误。这也是REST的优势之一。比如如下情况,flag我定义的是int型:
接下来演示的是PUT方法更新数据库的数据。对应的是modules/controllers/SiteController/actionUpdate方法。
此处请大家再次注意最上面的URL:http://api.mxq.com/v1/sites/15 此处15代表的是数据库id为15的数据,表示更新数据库ID为15的数据信息。请大家一定注意。RESTful在使用更新和删除数据操作的时候,id不能一表单的形式提交,必须紧跟在URL之后。
接下来演示的是DELETE方法删除数据库的数据。对应的是modules/controllers/SiteController/actionDelete方法。
当返回值为1的时候表示的就是删除操作执行成功。具体原理请大家仔细观察sitecontroller控制器内的函数。
以上就是基于yii2的RESTful的一些简单介绍、实现方法以及测试结果。有什么不正确或遗漏的地方,欢迎大家来补充。后续也会在此基础上进行更新。本人第一次接触yii2框架和RESTful架构,表述如有不对之处,请大家见谅。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Flask-RESTful和Swagger:Pythonweb应用程序中构建RESTfulAPI的最佳实践(第二部分)在上一篇文章中,我们探讨了如何使用Flask-RESTful和Swagger来构建RESTfulAPI的最佳实践。我们介绍了Flask-RESTful框架的基础知识,并展示了如何使用Swagger来构建RESTfulAPI的文档。本

使用Laravel进行RESTfulAPI开发:构建现代化的Web服务随着互联网的快速发展,Web服务的需求日益增加。而RESTfulAPI作为一种现代化的Web服务架构方式,具备轻量、灵活、易扩展的特点,因此在Web开发中得到了广泛应用。在本文中,我们将介绍如何使用Laravel框架来构建一个现代化的RESTfulAPI。Laravel是PHP语言中

一、RESTful概述REST(RepresentationalStateTransfer)风格是一种面向资源的Web应用程序设计风格,它遵循一些设计原则,使得Web应用程序具有良好的可读性、可扩展性和可维护性。下面我们来详细解释一下RESTful风格的各个方面:资源标识符:在RESTful风格中,每个资源都有一个唯一的标识符,通常是一个URL(UniformResourceLocator)。URL用于标识资源的位置,使得客户端可以使用HTTP协议进行访问。例如,一个简单的URL可以是:http

Django是一个Web框架,可以轻松地构建RESTfulAPI。RESTfulAPI是一种基于Web的架构,可以通过HTTP协议访问。在这篇文章中,我们将介绍如何使用Django来构建RESTfulAPI,包括如何使用DjangoREST框架来简化开发过程。安装Django首先,我们需要在本地安装Django。可以使用pip来安装Django,具体

随着互联网的发展和普及,Web应用程序和移动应用程序越来越普遍。这些应用程序需要与后端服务器进行通信,并获取或提交数据。在过去,常规的通信方式是使用SOAP(简单对象访问协议)或XML-RPC(XML远程过程调用)。然而,随着时间的推移,这些协议被认为过于笨重和复杂。现代应用程序需要更加轻巧和直接的API来进行通信。RESTfulAPI(表现层状态转化AP

在当下信息技术不断创新的环境下,RESTful架构风靡于各种常用的WebAPI应用之中,成为了新兴的服务开发趋势。而Beego框架作为Golang中一款高性能、易扩展的Web框架,出于其高效、易用、灵活等优点,被广泛应用于RESTful服务的开发中。下文将从Beego开发RESTful服务的最佳实践的角度,为广大的开发者提供一些参考。一、路由设计在REST

RESTfulAPI是目前Web架构中较为常用的一种API设计风格,它的设计理念是基于HTTP协议的标准方法来完成Web资源的表示与交互。在实现过程中,RESTfulAPI遵循一系列规则和约束,包括可缓存、服务器-客户端分离、无状态性等,这些规则保证了API的可维护性、扩展性、安全性以及易用性。接下来,本文将详细介绍RESTfulAPI的设计及其实现方

如何使用Java开发一个基于RESTful的APIRESTful是一种基于HTTP协议的架构风格,通过使用HTTP协议的GET、POST、PUT、DELETE等方法来实现对资源的操作。在Java开发中,可以使用一些框架来简化RESTfulAPI的开发过程,如SpringMVC、Jersey等。本文将向您详细介绍如何使用Java开发一个基于RESTful的
