目錄
Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试,yii2restful
环境配置:
开启服务器伪静态
YII2实际操作:
1、配置URL规则及modules
2、创建一个模型
3、创建一个控制器
RESTful的测试工具PostMAN:
首頁 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
登入後複製

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

找到一下代码

<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文件,内容如下:

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> }
登入後複製

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

 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24
Flask-RESTful和Swagger: Python web應用程式中建立RESTful API的最佳實務(第二部分) Flask-RESTful和Swagger: Python web應用程式中建立RESTful API的最佳實務(第二部分) Jun 17, 2023 am 10:39 AM

Flask-RESTful和Swagger:Pythonweb應用程式中建立RESTfulAPI的最佳實務(第二部分)在上一篇文章中,我們探討如何使用Flask-RESTful和Swagger來建立RESTfulAPI的最佳實務。我們介紹了Flask-RESTful框架的基礎知識,並展示如何使用Swagger來建立RESTfulAPI的文件。本

使用Django建立RESTful API 使用Django建立RESTful API Jun 17, 2023 pm 09:29 PM

Django是一個Web框架,可以輕鬆建立RESTfulAPI。 RESTfulAPI是一種基於Web的架構,可以透過HTTP協定存取。在這篇文章中,我們將介紹如何使用Django來建立RESTfulAPI,包括如何使用DjangoREST框架來簡化開發過程。安裝Django首先,我們需要在本機安裝Django。可以使用pip來安裝Django,具體

Python Flask RESTful怎麼使用 Python Flask RESTful怎麼使用 Apr 29, 2023 pm 07:49 PM

一、RESTful概述REST(RepresentationalStateTransfer)風格是一種以資源為導向的Web應用程式設計風格,它遵循一些設計原則,使得Web應用程式具有良好的可讀性、可擴充性和可維護性。下面我們來詳細解釋一下RESTful風格的各個方面:資源標識符:在RESTful風格中,每個資源都有一個唯一的標識符,通常是一個URL(UniformResourceLocator)。 URL用於標識資源的位置,使得用戶端可以使用HTTP協定進行存取。例如,一個簡單的URL可以是:http

使用Laravel進行RESTful API開發:建構現代化的Web服務 使用Laravel進行RESTful API開發:建構現代化的Web服務 Aug 13, 2023 pm 01:00 PM

使用Laravel進行RESTfulAPI開發:建立現代化的Web服務隨著網路的快速發展,Web服務的需求日益增加。而RESTfulAPI作為一種現代化的Web服務架構方式,具備輕量、靈活、易擴展的特點,因此在Web開發中得到了廣泛應用。在本文中,我們將介紹如何使用Laravel框架來建構一個現代化的RESTfulAPI。 Laravel是PHP語言中

如何使用Java開發一個基於RESTful的API 如何使用Java開發一個基於RESTful的API Sep 21, 2023 pm 03:53 PM

如何使用Java開發一個基於RESTful的APIRESTful是一種基於HTTP協定的架構風格,透過使用HTTP協定的GET、POST、PUT、DELETE等方法來實現對資源的操作。在Java開發中,可以使用一些框架來簡化RESTfulAPI的開發過程,如SpringMVC、Jersey等。本文將向您詳細介紹如何使用Java開發一個基於RESTful的

使用PHP建立RESTful API的步驟 使用PHP建立RESTful API的步驟 Jun 17, 2023 pm 01:01 PM

隨著互聯網的發展和普及,Web應用程式和行動應用程式越來越普遍。這些應用程式需要與後端伺服器進行通信,並取得或提交資料。在過去,常規的通訊方式是使用SOAP(簡單物件存取協定)或XML-RPC(XML遠端過程呼叫)。然而,隨著時間的推移,這些協議被認為過於笨重和複雜。現代應用程式需要更加輕巧和直接的API來進行通訊。 RESTfulAPI(表現層狀態轉換AP

Beego開發RESTful服務的最佳實踐 Beego開發RESTful服務的最佳實踐 Jun 23, 2023 am 11:04 AM

在當下資訊科技不斷創新的環境下,RESTful架構風靡於各種常用的WebAPI應用程式之中,成為了新興的服務開發趨勢。而Beego框架作為Golang中一款高效能、易擴充的Web框架,出於其高效、易用、靈活等優點,被廣泛應用於RESTful服務的開發中。下文將從Beego開發RESTful服務的最佳實踐的角度,為廣大的開發者提供一些參考。一、路由設計在REST

RESTful API設計及其實作方法 RESTful API設計及其實作方法 Jun 22, 2023 pm 04:07 PM

RESTfulAPI是目前Web架構中較常用的一種API設計風格,它的設計理念是基於HTTP協定的標準方法來完成Web資源的表示與互動。在實作過程中,RESTfulAPI遵循一系列規則和約束,包括可快取、伺服器-客戶端分離、無狀態性等,這些規則保證了API的可維護性、擴充性、安全性以及易用性。接下來,本文將詳細介紹RESTfulAPI的設計及其實作方

See all articles