產品需求對角色和終端的組合在不斷變化,眾多不斷快速變化的 API 接口代碼在產品的演進中日益成為一個問題;經過討論分析,最終采用 Yii2 的推薦做法,即通過 modules 實現 版本管理;
最近,PHP 單元測試有進展,我們在 ShortUrlService 短鏈接實現思路 中不僅對內部使用的 service 進行了單元測試,對 ControllerTest 也有嘗試;
本文結合 ShortUrlService 的 ShortUrlControllerTest 以及 v1.4 的 DemandControllerTest 來示范一下;
API 版本管理
- 采納 Yii2 的方案:通過 module 實現 API 版本;
結合原來按版本部署的經驗和 Los 根據需求提出的對應分拆 Yar RPC 服務的想法,我們最終采用了 Yii2 的推薦做法; - 我們產品需求版本 v1.4,對應 module v14,但在 url 中保持
v1.4/$controller/$action
;
需求版本由兩部分組成:
major.minor
(大版本.小版本);
1.0, 1.1, ..., 1.9, 2.0, ..., 2.9, ...;小版本只有 0-9;
- 可能會出現這樣一個情況:同一個站點,不同頁面的 ajax 請求,訪問的是不同版本的 API;
- 同時維護的版本不要超過三個;
自底向上測試
- 自底向上逐步構建;
- RPC 首先應當通過測試;
- API 基于 RPC 構建可靠服務;
-
API 接口測試應集中在自己范圍內的測試用例,應當由 RPC 解決的,要放到 RPC 解決;
自底向上逐步構建 - 版本 API 的 URL 形如:r=v1.4/demand/c34;
ShortUrlControllerTest
- 這個示例純粹是一個示例,旨在說明使用 PHPUnit 如何對 API 接口進行測試;
- shorturl/controllers/ShortUrlControllerTest.php 示例;
-
Guzzle 是一個不錯的 PHP HTTP Client,比 cURL 好用;
ControllerTest 示例
DemandControllerTest
-
@dataProvider 是一個很好的嘗試,準備多套數據,驅動測試;
@dataProvider 是一個好東西