已經支持的SDK有:
為了給客戶端統(tǒng)一接口請求調用的規(guī)范性、流暢性和簡單易懂,我們特別為此使用了內部領域特定語言: 接口查詢語言 (Api Structured Query Language) 。
從外部DSL的角度來看待接口查詢的操作
create
withHost host
withFilter filter
withParser parser
reset #特別注意:重復查詢時須重置請求狀態(tài)
withService service
withParams paramName1 paramValue1
withParams paramName2 paramValue2
withParams ... ...
withTimeout timeout
request
根據此設計理念,各客戶端語言都可以實現(xiàn)此接口請求的操作。
所用到的查詢文法如下(通常從上往下依次操作,順序不強制):
操作 | 參數(shù) | 是否必須 | 是否可重復調用 | 作用說明 |
---|---|---|---|---|
create | 無 | 必須 | 可以,重復調用時新建一個實例,非單例模式 | 需要先調用此操作創(chuàng)建一個接口實例 |
withHost | 接口域名 | 必須 | 可以,重復時會覆蓋 | 設置接口域名,如:http://demo.phalapi.net/ |
withFilter | 過濾器 | 可選 | 可以,重復時會覆蓋 | 設置過濾器,與服務器的PhalApi\DI()->filter 對應,需要實現(xiàn)PhalApiClientFilter接口 |
withParser | 解析器 | 可選 | 可以,重復時會覆蓋 | 設置結果解析器,僅當不是JSON返回格式時才需要設置,需要實現(xiàn)PhalApiClientParser接口 |
reset | 無 | 通常必須 | 可以 | 重復查詢時須重置請求狀態(tài),包括接口服務名稱、接口參數(shù)和超時時間 |
withService | 接口服務名稱 | 通常必選 | 可以,重復時會覆蓋 | 設置將在調用的接口服務名稱,如:Site.Index |
withParams | 接口參數(shù)名、值 | 可選 | 可以,累加參數(shù) | 設置接口參數(shù),此方法是唯一一個可以多次調用并累加參數(shù)的操作 |
withTimeout | 超時時間 | 可選 | 可以,重復時會覆蓋 | 設置超時時間,單位毫秒,默認3秒 |
request | 無 | 必選 | 可以,重復發(fā)起接口請求 | 最后執(zhí)行此操作,發(fā)起接口請求 |
以JAVA版本為例,演示如何調用:
最簡單的調用,也就是默認接口的調用:
PhalApiClientResponse response = PhalApiClient.create()
.withHost("http://demo.phalapi.net/") //接口域名
.request(); //發(fā)起請求
通常的調用,即有設置接口服務名稱、接口參數(shù)和超時:
PhalApiClientResponse response = PhalApiClient.create()
.withHost("http://demo.phalapi.net/")
.withService("Site.Index") //接口服務
.withParams("username", "dogstar") //接口參數(shù)
.withTimeout(3000) //接口超時
.request();
高級復雜調用,即設置了過濾器、解析器的操作:
PhalApiClientResponse response = PhalApiClient.create()
.withHost("http://demo.phalapi.net/")
.withService("Site.Index")
.withParser(new PhalApiClientParserJson()) //設置JSON解析,默認已經是此解析,這里僅作演示
.withParams("username", "dogstar")
.withTimeout(3000)
.request();
此接口查詢的用法是屬于基礎的用法,其實現(xiàn)與宿主語言有強依賴關系,在不支持面向對象語言中,如javascript,可以使用函數(shù)序列的方式,如:
create();
withHost('http://demo.phalapi.net/');
withService('Site.Index');
withParams('username', 'dogstar');
withTimeout(3000);
var rs = request();
通常,在一個項目里面我們只需要一個接口實例即可,但此語言沒默認使用單例模式,是為了大家更好的自由度。
基于此,大家在項目開發(fā)時,可以再進行封裝:提供一個全局的接口查詢單例,并組裝基本的接口公共查詢屬性。
即分兩步:初始化接口實例,以及接口具體的查詢操作。
如第一步先初始化:
PhalApiClient client = PhalApiClient.create()
.withHost("http://demo.phalapi.net/")
.withParser(new PhalApiClientParserJson());
第二步進行具體的接口請求:
PhalApiClientResponse response = client.reset() #重復查詢時須重置
.withService("Site.Index")
.withParams("username", "dogstar")
.withTimeout(3000)
.request();
這樣,在其他業(yè)務場景下就不需要再重復設置這些共同的屬性(如過濾器、解析器)或者共同的接口參數(shù)。
當接口請求超時時,統(tǒng)一返回 ret = 408,表示接口請求超時。此時可進行接口重試。
如:
PhalApiClient client = PhalApiClient.create()
.withHost("http://demo.phalapi.net/")
PhalApiClientResponse response = client.request();
if (response.getRet() == 408) {
response = client.request(); //請求重試
}
更多建議: