Table des matières
Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试,yii2restful
环境配置:
开启服务器伪静态
YII2实际操作:
1、配置URL规则及modules
2、创建一个模型
3、创建一个控制器
RESTful的测试工具PostMAN:
Maison php教程 php手册 Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试,yii2restful

Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试,yii2restful

Jun 13, 2016 am 09:04 AM
restful

Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试,yii2restful

环境配置:

开启服务器伪静态

本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码

LoadModule rewrite_module modules/mod_rewrite.so
Copier après la connexion

将其前面的#去掉,如果没有找到则添加进去。

找到一下代码

<Directory "C:/phpStudy/Apache/cgi-bin"><span>
    AllowOverride All
    Options None
    </span><span>Require</span><span> all granted
</span></Directory>
Copier après la connexion

将原本的AllowOverride None改为AllowOverride All。

然后在站点根目录下创建一个.htaccess文件,内容如下:

Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.php .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> }
Copier après la connexion

第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>
Copier après la connexion

创建后请注意及时往数据库添加几条数据信息。

通过脚手架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.php

3、创建一个控制器

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架构,表述如有不对之处,请大家见谅。

 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Flask-RESTful et Swagger : meilleures pratiques pour créer des API RESTful dans les applications Web Python (partie 2) Flask-RESTful et Swagger : meilleures pratiques pour créer des API RESTful dans les applications Web Python (partie 2) Jun 17, 2023 am 10:39 AM

Flask-RESTful et Swagger : meilleures pratiques pour créer des API RESTful dans des applications Web Python (partie 2) Dans l'article précédent, nous avons exploré les meilleures pratiques pour créer des API RESTful à l'aide de Flask-RESTful et Swagger. Nous avons présenté les bases du framework Flask-RESTful et montré comment utiliser Swagger pour créer la documentation d'une API RESTful. Livre

Développement d'API RESTful avec Laravel : créer des services Web modernes Développement d'API RESTful avec Laravel : créer des services Web modernes Aug 13, 2023 pm 01:00 PM

Développement d'API RESTful avec Laravel : créer des services Web modernes Avec le développement rapide d'Internet, la demande de services Web augmente de jour en jour. En tant qu'architecture de service Web moderne, RESTfulAPI est légère, flexible et facile à développer, elle a donc été largement utilisée dans le développement Web. Dans cet article, nous présenterons comment utiliser le framework Laravel pour créer une API RESTful moderne. Laravel est un langage PHP

Construire une API RESTful à l'aide de Django Construire une API RESTful à l'aide de Django Jun 17, 2023 pm 09:29 PM

Django est un framework Web qui facilite la création d'API RESTful. RESTfulAPI est une architecture Web accessible via le protocole HTTP. Dans cet article, nous présenterons comment utiliser Django pour créer des API RESTful, notamment comment utiliser le framework DjangoREST pour simplifier le processus de développement. Installer Django Tout d'abord, nous devons installer Django localement. Vous pouvez utiliser pip pour installer Django, en particulier

Comment utiliser Python Flask RESTful Comment utiliser Python Flask RESTful Apr 29, 2023 pm 07:49 PM

1. Présentation de RESTful Le style REST (RepresentationalStateTransfer) est un style de conception d'applications Web orienté ressources qui suit certains principes de conception pour que les applications Web aient une bonne lisibilité, évolutivité et maintenabilité. Expliquons en détail chaque aspect du style RESTful : Identifiant de ressource : Dans le style RESTful, chaque ressource possède un identifiant unique, généralement une URL (UniformResourceLocator). Les URL sont utilisées pour identifier l'emplacement des ressources afin que les clients puissent y accéder à l'aide du protocole HTTP. Par exemple, une simple URL pourrait être : http

Étapes pour créer une API RESTful à l'aide de PHP Étapes pour créer une API RESTful à l'aide de PHP Jun 17, 2023 pm 01:01 PM

Avec le développement et la popularité d’Internet, les applications web et les applications mobiles deviennent de plus en plus courantes. Ces applications doivent communiquer avec le serveur backend et obtenir ou soumettre des données. Dans le passé, la manière conventionnelle de communiquer consistait à utiliser SOAP (Simple Object Access Protocol) ou XML-RPC (XML Remote Procedure Call). Cependant, au fil du temps, ces protocoles sont devenus trop lourds et complexes. Les applications modernes nécessitent des API plus légères et plus simples pour communiquer. RESTfulAPI (AP de conversion d'état de la couche de présentation

Bonnes pratiques pour développer des services RESTful avec Beego Bonnes pratiques pour développer des services RESTful avec Beego Jun 23, 2023 am 11:04 AM

Dans l'environnement actuel d'innovation continue dans les technologies de l'information, l'architecture RESTful est populaire dans diverses applications WebAPI couramment utilisées et est devenue une tendance émergente en matière de développement de services. En tant que framework Web hautes performances et facile à étendre dans Golang, le framework Beego est largement utilisé dans le développement de services RESTful en raison de ses avantages de haute efficacité, de facilité d'utilisation et de flexibilité. Ce qui suit fournira des références aux développeurs du point de vue des meilleures pratiques pour développer des services RESTful dans Beego. 1. Conception de routage dans REST

Méthode de conception et de mise en œuvre de l'API RESTful Méthode de conception et de mise en œuvre de l'API RESTful Jun 22, 2023 pm 04:07 PM

RESTfulAPI est un style de conception d'API couramment utilisé dans l'architecture Web actuelle. Son concept de conception est basé sur la méthode standard du protocole HTTP pour compléter la représentation et l'interaction des ressources Web. Au cours du processus de mise en œuvre, l'API RESTful suit une série de règles et de contraintes, notamment la mise en cache, la séparation serveur-client, l'apatridie, etc. Ces règles garantissent la maintenabilité, l'évolutivité, la sécurité et la facilité d'utilisation de l'API. Ensuite, cet article présentera en détail la conception de RESTfulAPI et sa mise en œuvre.

Comment développer une API basée sur RESTful à l'aide de Java Comment développer une API basée sur RESTful à l'aide de Java Sep 21, 2023 pm 03:53 PM

Comment utiliser Java pour développer une API basée sur RESTful RESTful est un style architectural basé sur le protocole HTTP. Il utilise les méthodes GET, POST, PUT, DELETE et autres du protocole HTTP pour exploiter les ressources. Dans le développement Java, certains frameworks peuvent être utilisés pour simplifier le processus de développement de l'API RESTful, comme SpringMVC, Jersey, etc. Cet article vous présentera en détail comment utiliser Java pour développer un système basé sur RESTful.

See all articles