這篇說下yii2.0
開發 API
吧,使用 RESTful
API模式php
這是安裝Yii2.0的首選方法。若是你尚未安裝 Composer
,你能夠按照這裏的說明進行安裝。前端
安裝完 Composer
,運行下面的命令來安裝 Composer Asset
插件:mysql
php composer.phar global require "fxp/composer-asset-plugin:^1.2.0"
安裝高級的應用程序模板,運行下面的命令:git
php composer.phar create-project yiisoft/yii2-app-advanced advanced 2.0.13
cd advanced init
打開 common\config\main-local.php
,配置數據庫鏈接信息github
'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=yiiapi', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', ],
migrate
數據庫遷移yii migrate
打開api\config\main.php
修改id
,controllerNamespace
:web
return [ 'id' => 'app-api', 'basePath' => dirname(__DIR__), 'controllerNamespace' => 'api\controllers', ]
打開common\config\main.php
開啓url
路由美化規則sql
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ],
打開common\config\bootstrap.php
添加如下別名數據庫
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
單首創建API應用,目的是便於維護,能夠避免如下問題json
frontend
爲前臺目錄;backend
爲後臺目錄;api
爲api目錄接下來打開 api\controllers
新建一個User控制器,繼承 yii\rest\ActiveController
,命名爲 UserController
,代碼以下:bootstrap
<?php namespace api\controllers; use yii\rest\ActiveController; class UserController extend extends ActiveController { public $modelClass = 'common\models\User'; }
這裏建立 user
控制器繼承 yii\rest\ActiveController
並指定要操做的模型
配置 request
應用程序組件的 parsers
屬性使用 yii\web\JsonParser
用於 JSON
輸入
打開配置文件 api\config\main-local.php
修改成以下代碼:
<?php $config = [ 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => 'P0r2XoT9LCUnyVlSgxBbJOqQxdCJ3i29', 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ], ], ], ]; if (!YII_ENV_TEST) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', ]; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config;
爲剛纔的 user
控制器添加url美化規則
打開 api\config\main.php
修改 components
屬性,添加下列代碼:
... 'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user' ], ], ] ...
ok,到此就成了一個 符合 RESTful
風格的API
看起來在控制器了什麼也沒有寫,只是指定了一個模型,可是她的背後完成了不少的功能哦,列表以下:
GET /users
: 逐頁列出全部用戶HEAD /users
: 顯示用戶列表的概要信息POST /users
: 建立一個新用戶GET /users/123
: 返回用戶 123 的詳細信息HEAD /users/123
: 顯示用戶 123 的概述信息PATCH /users/123
: and PUT /users/123: 更新用戶123DELETE /users/123
: 刪除用戶123OPTIONS /users
: 顯示關於末端 /users 支持的動詞OPTIONS /users/123
: 顯示有關末端 /users/123 支持的動詞你可使用 curl
命令進行訪問,命令以下:
curl -i -H "Accept:application/json" "http://localhost/users"
命令行下仍是比較麻煩的,也不方便測試,推薦使用 API
測試工具
這類的工具備不少,我就不一一列舉了,這裏推薦 Postman
,很好很強大,Chorme
也有插件,能夠安裝,這裏我推薦直接下載軟件安裝調試,比較方便
你可能發現了 訪問任何路由地址都是加的s
,users
, 爲何呢? 資源
,你要理解 資源
二字,既然是資源確定是個集合,確定有一大堆,因此要加上覆數,我是這麼理解的。
你說我就是不想加上s
,我就想採用http://localhost/user
這種方式來進行訪問,好吧,能夠,知足你,只是不推薦
繼續打開配置文件api\config\main.php
修改剛纔添加的 urlManager
以下:
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user', 'pluralize' => false, //設置爲false 就能夠去掉複數形式了 ], ], ]
加入 'pluralize' => false,
就表示去掉複數形式了,再次強調不推薦
ok,在控制器中咱們沒有寫任何一句代碼,他就給咱們生成許多方法,可是有時候咱們可能須要修改一些代碼,來達到咱們想要的效果,好比連表查詢,而後再返回數據
接下來咱們就實現這樣的功能:
打開剛纔新建的user
控制器, 重寫 action
方法:
<?php namespace api\controllers; use yii\rest\ActiveController; class UserController extend extends ActiveController { public $modelClass = 'common\models\User'; public function actions() { $action= parent::actions(); // TODO: Change the autogenerated stub unset($action['index']); unset($action['create']); unset($action['update']); unset($action['delete']); } public function actionIndex() { //你的代碼 } }
這樣咱們就能夠重寫他的代碼了。哈哈
咱們再新建一個本身的 action
<?php namespace api\controllers; use yii\rest\ActiveController; class UserController extend extends ActiveController { public $modelClass = 'common\models\User'; public function actions() { $action= parent::actions(); // TODO: Change the autogenerated stub unset($action['index']); unset($action['create']); unset($action['update']); unset($action['delete']); } public function actionIndex() { //你的代碼 } public function actionSendEmail() //假如是get請求 { //業務邏輯 } }
而後試着訪問一下 http://localhost/users/send-email
,報錯?找不到?
報錯就對了,那是由於咱們沒有設置其餘路由訪問
修改 api\config\main.php
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user', //'pluralize' => false, //設置爲false 就能夠去掉複數形式了 'extraPatterns'=>[ 'GET send-email'=>'send-email' ], ], ], ]
接下來從新訪問就沒有問題了,ps:你本身編寫的任何 action
都要在 extraPatterns
進行配置
差點忘了 狀態碼
這個東西,咱們如今全部的東西返回來的都是一個 JSON
,加入沒有數據局返回的是空的數組,因此這確定不行啊,咱們得加上 一些特定的狀態碼 來標識這些數據啊,怎麼加?
繼續修改 api\config\main.php
在 components
添加以下代碼:
'response' => [ 'class' => 'yii\web\Response', 'on beforeSend' => function ($event) { $response = $event->sender; $response->data = [ 'success' => $response->isSuccessful, 'code' => $response->getStatusCode(), 'message' => $response->statusText, 'data' => $response->data, ]; $response->statusCode = 200; }, ],
這裏統一使用 200
來表示,固然並非全部的都是 200,你應該具體狀況具體對待,切記不要亂使用 任意加各類標識,有時候你可能須要和一些前端講道理了 因此請讓他們務必 遵循這些 規範 狀態碼
是否是以爲還少了點什麼?認證
對就是 認證
,就差 認證
就完美了,篇幅有限,內容多了反而影響閱讀興趣,下篇進行 認證
介紹
感謝如下,特別是 魏曦老師的視頻教程
不足之處,歡迎指正
Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu |
|
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu |
|
|
|
|
|