這篇說下yii2.0開發 API 吧,使用 RESTful API模式
安裝Yii2.0 通過 Composer 安裝這是安裝Yii2.0的首選方法。如果你還沒有安裝 Composer,你可以按照這里的說明進行安裝。
安裝完 Composer,運行下面的命令來安裝 Composer Asset 插件:
php composer.phar global require "fxp/composer-asset-plugin:^1.2.0"
安裝高級的應用程序模板,運行下面的命令:
php composer.phar create-project yiisoft/yii2-app-advanced advanced 2.0.13初始化高級模板
cd advanced init修改數據庫連接屬性
打開 commonconfigmain-local.php,配置數據庫連接信息
"db" => [ "class" => "yiidbConnection", "dsn" => "mysql:host=127.0.0.1;dbname=yiiapi", "username" => "root", "password" => "root", "charset" => "utf8", ],執行 migrate 數據庫遷移
yii migrate拷貝backend目錄,命名為api
打開apiconfigmain.php 修改id,controllerNamespace:
return [ "id" => "app-api", "basePath" => dirname(__DIR__), "controllerNamespace" => "apicontrollers", ]
打開commonconfigmain.php開啟url路由美化規則
"urlManager" => [ "enablePrettyUrl" => true, "showScriptName" => false, "rules" => [ ], ],
打開commonconfigootstrap.php添加以下別名
Yii::setAlias("@api", dirname(dirname(__DIR__)) . "/api");配置 Web 服務器
很多同學在看了我這個教程,說是運行不起來、一直是404,然后就問我為什么?我看了好多,他們都是本地使用 Apache ,并且 index.php 文件沒有隱藏,他們訪問地址也不叫 index.php。所以在此說明一下吧
Apache 配置
# 設置文檔根目錄為 "path/to/api/web" DocumentRoot "path/to/api/web"# 開啟 mod_rewrite 用于美化 URL 功能的支持(譯注:對應 pretty URL 選項) RewriteEngine on # 如果請求的是真實存在的文件或目錄,直接訪問 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 如果請求的不是真實文件或目錄,分發請求至 index.php RewriteRule . index.php # if $showScriptName is false in UrlManager, do not allow accessing URLs with script name RewriteRule ^index.php/ - [L,R=404] # ...其它設置...
或者 在web 目錄下新建一個 .htaccess 文件,填入以下內容(我這是從 Laravel 項目中拷貝過來的),同樣可以起到隱藏 index.php 的效果
Options -MultiViews -Indexes RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]
Nginx 的配置
location / { # Redirect everything that isn"t a real file to index.php try_files $uri $uri/ /index.php$is_args$args; }為什么要多帶帶創建API應用
多帶帶創建API應用,目的是便于維護,可以避免以下問題
配置的沖突
控制器的命名不便
url美化規則沖突
分工明確frontend為前臺目錄;backend為后臺目錄;api為api目錄
接下來打開 apicontrollers 新建一個User控制器,繼承 yii estActiveController,命名為 UserController,代碼如下:
這里創建 user控制器繼承 yii estActiveController 并指定要操作的模型
啟用JSON 輸入配置 request 應用程序組件的 parsers 屬性使用 yiiwebJsonParser 用于 JSON 輸入
打開配置文件 apiconfigmain-local.php 修改為如下代碼:
[ "request" => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation "cookieValidationKey" => "P0r2XoT9LCUnyVlSgxBbJOqQxdCJ3i29", "parsers" => [ "application/json" => "yiiwebJsonParser", ], ], ], ]; if (!YII_ENV_TEST) { // configuration adjustments for "dev" environment $config["bootstrap"][] = "debug"; $config["modules"]["debug"] = [ "class" => "yiidebugModule", ]; $config["bootstrap"][] = "gii"; $config["modules"]["gii"] = [ "class" => "yiigiiModule", ]; } return $config;配置URL規則為剛才的 user控制器添加url美化規則
打開 apiconfigmain.php 修改 components屬性,添加下列代碼:
... "urlManager" => [ "enablePrettyUrl" => true, "enableStrictParsing" => true, "showScriptName" => false, "rules" => [ ["class" => "yii estUrlRule", "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: 更新用戶123
DELETE /users/123: 刪除用戶123
OPTIONS /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 這種方式來進行訪問,好吧,可以,滿足你,只是不推薦
繼續打開配置文件apiconfigmain.php修改剛才添加的 urlManager 如下:
"urlManager" => [ "enablePrettyUrl" => true, "enableStrictParsing" => true, "showScriptName" => false, "rules" => [ ["class" => "yii estUrlRule", "controller" => "user", "pluralize" => false, //設置為false 就可以去掉復數形式了 ], ], ]加入 "pluralize" => false, 就表示去掉復數形式了,再次強調不推薦
ok,在控制器中我們沒有寫任何一句代碼,他就給我們生成許多方法,但是有時候我們可能需要修改一些代碼,來達到我們想要的效果,比如連表查詢,然后再返回數據
接下來我們就實現這樣的功能:
打開剛才新建的user控制器, 重寫 action方法:
這樣我們就可以重寫他的代碼了。哈哈
我們再新建一個自己的 action
然后試著訪問一下 http://localhost/users/send-email,報錯?找不到?
報錯就對了,那是因為我們沒有設置其他路由訪問
修改 apiconfigmain.php
"urlManager" => [ "enablePrettyUrl" => true, "enableStrictParsing" => true, "showScriptName" => false, "rules" => [ ["class" => "yii estUrlRule", "controller" => "user", //"pluralize" => false, //設置為false 就可以去掉復數形式了 "extraPatterns"=>[ "GET send-email"=>"send-email" ], ], ], ]接下來重新訪問就沒有問題了,ps:你自己編寫的任何 action 都要在 extraPatterns 進行配置
差點忘了 狀態碼 這個東西,我們現在所有的東西返回來的都是一個 JSON,加入沒有數據局返回的是空的數組,所以這肯定不行啊,我們得加上 一些特定的狀態碼 來標識這些數據啊,怎么加?
繼續修改 apiconfigmain.php 在 components 添加如下代碼:
"response" => [ "class" => "yiiwebResponse", "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,你應該具體情況具體對待,切記不要亂使用 任意加各種標識,請 遵循這些 規范 狀態碼
是不是覺得還少了點什么?認證 對就是 認證,就差 認證 就完美了,篇幅有限,內容多了反而影響閱讀興趣,下篇進行 認證介紹
感謝以下,特別是 魏曦老師的視頻教程
魏曦教你學
Yii Framework 2.0 權威指南
不足之處,歡迎指正
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30853.html
摘要:最近在做功能,找了好久的資料,才找到這類的教程,感謝該作者,以下內容根據我的項目實際情況做了一定的修改。 最近在做Yii2.0 RESTful API功能,找了好久的資料,才找到這類的教程,感謝該作者,以下內容根據我的項目實際情況做了一定的修改。 安裝yii2.0 安裝 Composer 后,您可以通過在 Web 可訪問的文件夾下運行以下命令來 安裝Yii應用程序模板: compose...
摘要:之速率限制什么是速率限制權威指南翻譯過來為限流,為防止濫用,你應該考慮對您的限流。如果在規定的時間內接收了一個用戶大量的請求,將返回響應狀態代碼這意味著過多的請求。 Yii2.0 RESTful API 之速率限制 什么是速率限制? 權威指南翻譯過來為限流,為防止濫用,你應該考慮對您的 API 限流。 例如,您可以限制每個用戶 10 分鐘內最多調用 API 100 次。 如果在規定的時...
摘要:之版本控制之前我寫過兩篇關于如何搭建,以及認證等處理,但是沒有涉及到版本管理,今天就來談談版本管理如何實現。如果你還沒有安裝,你可以按照這里的說明進行安裝。 Yii2.0 RESTful API 之版本控制 之前我寫過兩篇關于 Yii2.0 RESTful API 如何搭建,以及 認證 等處理,但是沒有涉及到版本管理,今天就來談談版本管理如何實現。 索性就從頭開始一步一步搭建吧,但是關...
摘要:請求參數當作請求參數發送,例如,由于大多數服務器都會保存請求參數到日志,這種方式應主要用于請求,因為它不能使用頭來發送使用者從認證服務器上獲取基于協議的,然后通過發送到服務器。 認證介紹 和Web應用不同,RESTful APIs 通常是無狀態的, 也就意味著不應使用 sessions 或 cookies, 因此每個請求應附帶某種授權憑證,因為用戶授權狀態可能沒通過 sessions ...
摘要:最近在做認證功能,記錄整個過程,方便以后查看。請求參數當作請求參數發送,例如,由于大多數服務器都會保存請求參數到日志,這種方式應主要用于請求,因為它不能使用頭來發送使用者從認證服務器上獲取基于協議的,然后通過發送到服務器。 最近在做RESTful API認證功能,記錄整個過程,方便以后查看。本文參照了 https://segmentfault.com/a/119000001636860...
閱讀 778·2023-04-25 20:47
閱讀 2542·2019-08-30 15:53
閱讀 951·2019-08-26 14:05
閱讀 899·2019-08-26 11:59
閱讀 1685·2019-08-26 11:43
閱讀 1684·2019-08-26 10:57
閱讀 1363·2019-08-23 18:23
閱讀 2668·2019-08-23 12:57