前言
隨著網際網路的發展,業務體量的遞增,傳統單體應用逐步演變為拆分多個模組應用進行分散式部署,甚至演變為微服務架構應用,在這種環境下,一個複雜的業務功能往往需要多個平臺服務聯動才可以完成,我們的業務系統在呼叫別人的系統服務同時,也可能對外提供介面服務,供其他系統呼叫。今天,我們就如何快速的為你的專案構建一個PHP版本SDK展開討論
Easy-sdk專案簡介
Easy-sdk是一個用於快速構建PHP版本SDK的應用框架,通過此框架,開發人員可以快速將當前系統對外提供的功能服務封裝成PHP版本的SDK,供其他PHP專案快速引入並使用當前系統提供的功能服務,完成相應的業務邏輯。為了讓開發人員更好的上手使用,系統實現上主要借鑑Laravel、easy-wechat等專案的相關設計,某些框架功能使用上與Laravel、easy-wechat基本保持一致。
基本使用
1. 安裝easy-sdk-installer
通過composer進行全域性安裝,如下
$ composer global require f-oris/easy-sdk-installer
注意需要將composer的bin目錄設定到環境變數中,否則無法識別第二步中的easy-sdk命令
2. 建立Sdk應用
執行Sdk初始化建立命令
$ easy-sdk new sdk-demo
按照命令列提示,依次輸入以下包名、介紹、作者、根名稱空間,easy-sdk
指令會讀取當前目錄資訊以及Git認證資訊生成預設SDK應用資訊,如不需要調整,直接回車確認即可
3. Sdk元件開發
進入sdk-demo
目錄,執行命令建立元件
php artisan make:component Hello/Hello
命令執行完畢後,即可在src
目錄內可以看到Hello
子目錄,子目錄內包含一個Hello.php檔案,這個檔案內只是一個空的元件類,我們需要根據業務完善相關業務程式碼。以輸出一句“Hello, easy sdk framework.”為例,程式碼片段如下
<?php
// ...
class Hello extends Component
{
/**
* Return a hello message.
*
* @return string
*/
public function hello()
{
return "Hello, easy sdk framework.";
}
}
4. Sdk元件測試
在tests
下新建Hello
資料夾,新建HelloTest.php測試類,需要繼承基類tests/TestCase.php,按照常規的phpunit進行測試即可,如下
<?php
// ...
class HelloComponentTest extends TestCase
{
/**
* Test get a hello message from hello component.
*/
public function testGetAHelloMessageFromHelloComponent()
{
$this->assertEquals('Hello, easy sdk framework.', $this->app()->get(Hello::name())->hello());
}
}
5. 釋出Sdk程式碼包
功能測試完畢後,按照packagist元件包釋出指引,釋出Sdk程式碼包,待composer倉庫同步完畢後,即可通過composer拉取sdk元件程式碼包進行使用
使用擴充套件包擴充套件系統功能
Easy-sdk只是一個簡單的Sdk應用框架,主要用於Sdk應用的元件管理,本身並不提供太多複雜功能,可通過引入外部元件擴充套件包來豐富Sdk應用的基礎功能服務,以較為常用的Http服務為例,為Sdk應用引入Http功能元件。
1. 引入功能元件包
進入sdk-demo
目錄,通過composer引入http元件包
$ composer require f-oris/easy-sdk-httpclient
2. 釋出Http元件配置檔案
進入sdk-demo
目錄,執行artisan命令
$ php artisan vendor:publish --provider="Foris\Easy\Sdk\HttpClient\ServiceProvider"
命令執行完畢後,即可在專案目錄內config
檔案下找到http-client.php
配置檔案
3. 使用Http元件服務
每一個Sdk元件都是通過Application獲取到相應的元件例項才能進行呼叫相應的元件功能方法,獲取Http元件的方式例項如下:
<?php
//...
$http = (new Application())->get(\Foris\Easy\HttpClient\HttpClient::class);
由於元件的生命週期其實是包含在Application的生命週期裡面的,所以,在元件中就不能以上述方式進行呼叫,元件的呼叫方式如下:
<?php
//...
$http = $this->app()->get(\Foris\Easy\HttpClient\HttpClient::class);
另外,eask-sdk-httpclient擴充套件包提供了一個HasHttpClient
的Trait類,開發人員可以在src/Component.php
檔案中引入並使用該類,簡化之後的Http元件呼叫方式如下
<?php
//...
$http = $this->http();
Http元件擴充套件包提供具體功能參考f-oris/easy-sdk-httpclient擴充套件包說明
4. 擴充套件包列表
- easy-sdk-logger Logger元件包
- easy-sdk-httpclient HttpClient元件包
- easy-sdk-cache Cache元件包
- easy-sdk-develop Easy-sdk開發輔助擴充套件包
其他
1. 關於專案
專案主要是源於筆者所在的開發團隊需要對接數個平臺服務來實現自己的系統業務,然後大部分第三方都只是提供一個http介面文件,然後需要開發人員自己去實現具體的對接邏輯,然後再到業務對接,整個過程中,重複工作挺多的,而且由於沒有相應的規範,不同系統、不同開發人員對接出來的程式碼邏輯質量也參差不齊,出問題了,都是按照各自的規範去進行排查,難以統籌管理。因此,基於自己熟悉的Laravel框架以及使用過的easy-wechat擴充套件包,移植了部分功能程式碼,用於簡化統一SDK應用的構建。
2. 未來方向
其實這個專案還有很多功能待完善的,都是在想,比如說Sdk文件的自動化構建(Ps:我也很討厭寫文件,但是文件還是很重要的),簡化測試程式碼的編寫流程,PHP各種版本的一些相容性修復測試(目前基本上相容5.5+,但某些測試程式碼在7.x下無法執行…)等,這個專案本身還是挺好玩的,有興趣的童鞋可以一起玩。
3. 關於作者
技術宅一枚,最近由於各種原因,已提離職,有興趣的站內DD,希望找個相對來說對技術友好點的團隊。
本作品採用《CC 協議》,轉載必須註明作者和本文連結