雁行,大雁依序以 V 型飛行的本能。
Anser 是筆者從研究所時期開始開發的 PHP Side Project。筆者最初分析了在基於 RESTful 設計方案下,各個 API 在 HTTP 協定中請求(Request)與回應(Response)的可能行為,藉此設計出一套能夠以 PHP 程式語言進行 HTTP 請求與處理回應的基礎程式庫──Anser-Action:PHP 簡單 API 連線程式庫。
Anser Action 是一款基於 Guzzle7 的程式庫,它能夠讓你以類似於 jQuery Ajax 的 callback 設計模式處理 HTTP 回應與 HTTP 例外。並且,Anser-Action 也能夠迅速達成並行連線的效果,讓你快速處理多個 HTTP 的連線與回應。
你可以參考以下範例程式碼:
use \SDPMlab\Anser\Service\Action;
use \Psr\Http\Message\ResponseInterface;
$action = (new Action(
"https://datacenter.taichung.gov.tw",
"GET",
"/Swagger/OpenData/b73b3ab5-7c51-46a8-ae6a-9dbbde436083"
))->doneHandler(function(
ResponseInterface $response,
Action $runtimeAction
){
$body = $response->getBody()->getContents();
$data = json_decode($body, true);
$runtimeAction->setMeaningData($data);
});
$data = $action->do()->getMeaningData();
var_dump($data[0]);
透過使用 Anser-Action 提供的 Action
物件定義你的 API 連線內容,再以 doneHandler
處理連線成功時的抽象邏輯,緊接著使用 $action->do()
發出請求,最後以getMeaningData()
方法取得你所指定的回傳資料。Anser-Action 的設計希望一切都是簡單且容易理解的。
再這之後,筆者延續此 Side Project 延伸出:Anser PHP 服務協作程式庫專案。Anser 其名命取自於「雁」的學名 Anser,透過雁行理論中的列隊、組織與扶持等理念,代指在分散式系統中透過服務協作設計模式建構大型資訊服務的過程。筆者希望在保有彈性的開發過程中,開發人員能輕鬆地處理各種在HTTP溝通中可能發生的應用程式例外以及請求失敗時的重試策略,幫助開發人員以 PHP 建構出健壯的微服務系統。
使用 Anser 讓你像是拼積木一般精心排列你的微服務。
Anser 試圖以單純的 PHP 實作出服務協作設計模式,你可以透過這個程式庫管理連線與指揮你的微服務,你可以輕鬆地達成以下目標:
Anser 與其他 PHP 微服務解決方案不同的是,它不仰賴任何外部伺服器或其他程式語言,完全使用 PHP 進行製作,能夠直接融入你目前的 PHP 專案中。舉個例子:你可以漸進式地將一個大型 PHP 專案慢慢地解耦,並透過此程式庫在同一專案中提供相似的介面,將一次性遷移系統架構所造成的大量開發與測試工作分次處裡,一步一步地將你的專案轉換至微服務架構。
本系列文章之設計圖各圖示、圖標之涵義如上圖所示。
在接下來的文章中,我們將會圍繞著 Anser 程式庫作為我們的基礎,藉此傳達服務協作設計模式、Saga 實作等重要的觀念。
本篇文章介紹了一款由筆者主導開發的專案 Anser。
目前,Anser 還是一款持續開發中的程式庫,但筆者認為目前的主要功能已足夠完整,程式庫的使用方法大抵定型,是個非常適合傳遞相關開發理念的專案。雖然目前在 GitHub 儲存庫中除了 README 的範例外,並沒有提供更詳盡的 API 與使用範例,但在接下來的文章中,我們將會細緻地示範程式庫的使用方法,並傳達足夠的設計理念。
希望能夠勾起你的興趣,也希望能夠與你一起進步。
[1] MENG-HSIEN W, 2021. "Anser: A PHP and RESTful API-based Microservices Architecture Implementation using Orchestration Pattern" master's thesis, National Kaohsiung Normal University.
[2]Lee, W. T., Wu, M. H., Liu, Z. W., & Lee, S. J. (2022). A Microservices Orchestration Library based on PHP and RESTful API. Journal of Information Science and Engineering, 38(6), 1133-1147. https://doi.org/10.6688/JISE.202211_38(6).0003
[3] Ping-Yi S, Meng-Hsien W, Wen-Tin L, (2022, June 24). "Anser-Saga: A Data Consistent Microservices Architecture Imple-mentation using Saga and Service Orchestration Design Patterns ". 18th Taiwan Conference of Software Engineering.
[4] Ming-Kai Tsai, Ping-Yi Song, Meng-Hsien Wu, Wen-Tin L, (2023, Aug 10-11). "A High Availability Microservices Architecture Implementation using Saga and Backup Mechanism". the 10th International Conference on Dependable Systems and Their Applications.