dgate是一款基于Vert.x的API Gateway涮较,它不同于大多數(shù)其他API Gateway蝗拿,主要表現(xiàn)在兩個(gè)地方:
- 輕量級(jí)配置伤极,所有路由規(guī)則都定義在文件中谎懦,不需要后端DB鲫咽。
- 除了服務(wù)于產(chǎn)品環(huán)境签赃,它還支持測(cè)試場(chǎng)景,提供Mock機(jī)制分尸,讓前后端的接口通過(guò)配置文件得以固化锦聊。
本文將對(duì)dgate的主要特性一一進(jìn)行簡(jiǎn)要的說(shuō)明,方便讀者對(duì)dgate有進(jìn)一步的了解箩绍。
基于Groovy的配置DSL
以下是一個(gè)簡(jiǎn)單的配置文件的例子:
import io.vertx.core.http.HttpMethod
apiGateway {
port = 7000
host = 'localhost'
urls {
"/url1" {
required = ['param1', 'param2']
methods = ['GET', 'POST']
upstreamURLs = [
[host: 'localhost', port: 8080, url: '/test']
]
}
"/url2" {
required = ['param1', 'param2']
methods = ['GET', 'POST']
upstreamURLs = [
[host: 'localhost', port: 8080, url: '/test1'],
[host: 'localhost', port: 8080, url: '/test2']
]
}
}
}
語(yǔ)法非常簡(jiǎn)單孔庭,基本無(wú)需做過(guò)多的解釋。將其應(yīng)用到dgate的命令如下(其中的conf為文件名):
java -jar dgate-版本號(hào)-fat.jar -Dconf=conf
支持測(cè)試的Mock URL
Mock URL主要是為了簡(jiǎn)化前后端分離(包括Mobile和后臺(tái))環(huán)境下的開(kāi)發(fā)和測(cè)試材蛛。還是通過(guò)例子來(lái)看看:
"/mock" {
expected {
statusCode = 200
payload = [test: true]
}
}
跟前面的例子一樣圆到,這個(gè)語(yǔ)法也是不言自明,其中expected部分只需放入前后端開(kāi)發(fā)人員商量好的接口即可卑吭。這樣完全避免了前端等后端的情形芽淡,開(kāi)發(fā)時(shí)采用Mock配置,產(chǎn)品環(huán)境下采用真實(shí)配置即可豆赏。
同時(shí)挣菲,為了更好地支持測(cè)試,dgate還有這些特性:
- 支持按HTTP Method進(jìn)行Mock
- statusCode和payload都支持閉包掷邦,以其返回值為最終結(jié)果白胀,支持動(dòng)態(tài)Mock。
靈活的上游請(qǐng)求
一般來(lái)講耙饰,一個(gè)前端頁(yè)面在加載過(guò)程中會(huì)向后端發(fā)起多個(gè)請(qǐng)求纹笼,dgate完全支持這種場(chǎng)景。參見(jiàn)上面的“/url2”苟跪,對(duì)于前端只是暴露統(tǒng)一的/url2廷痘,但它對(duì)應(yīng)后端的兩個(gè)請(qǐng)求。
dgate會(huì)同時(shí)發(fā)起多個(gè)請(qǐng)求件已,并將結(jié)果匯總笋额,統(tǒng)一返還給前端。這樣不僅僅降低了前端頁(yè)面面對(duì)的后端URL數(shù)篷扩,而且通過(guò)引入中間層兄猩,讓接口和實(shí)現(xiàn)得到分離。
并且,對(duì)于某些有特殊需要的場(chǎng)景枢冤,dgate提供了before和after閉包鸠姨,允許開(kāi)發(fā)者在前端請(qǐng)求轉(zhuǎn)發(fā)到后端和后端結(jié)果發(fā)往前端之前“為所欲為”。具體使用可以參見(jiàn)相應(yīng)的文檔淹真。
其他值得一提的特性
除了上面的主要功能讶迁,dgate還具備以下特性:
- 支持URL Path Parameters
- 支持JWT,token獲取和token刷新
- 支持CORS
- 靈活的login配置
- 支持?jǐn)嗦菲骱苏海瑢?duì)于每個(gè)發(fā)往后端的請(qǐng)求巍糯,dgate會(huì)將其包裹在一個(gè)斷路器中】驮可視為對(duì)于后端API的decorator祟峦。
各位可以從用戶指南中了解進(jìn)一步的細(xì)節(jié)。
限制
作為一篇介紹工具的短文徙鱼,不講限制和缺陷是不完整的宅楞,這里我就說(shuō)說(shuō)dgate的不足:
- 前端請(qǐng)求經(jīng)過(guò)dgate之后,都會(huì)變成【HTTP METHOD + Request BODY】的形式疆偿,F(xiàn)orm請(qǐng)求也不例外咱筛。
- 雖然支持JWT,但整個(gè)驗(yàn)證過(guò)程仍需結(jié)合外部杆故。因?yàn)檠嘎幔覀兿嘈胚@里并沒(méi)有一刀切的方式。
- 上游服務(wù)的地址時(shí)硬編碼处铛,這在未來(lái)將會(huì)改進(jìn)
- 僅支持HTTP方式的調(diào)用饲趋,未來(lái)會(huì)考慮支持gRPC
dgate雖然已經(jīng)用于我們的開(kāi)發(fā)和產(chǎn)品環(huán)境,但離完美還有相當(dāng)?shù)囊欢尉嚯x撤蟆。這里的所有功能都是首先為了滿足我們自己的需要而開(kāi)發(fā)的奕塑。因此,很難說(shuō)dgate是否能完全適用于你的產(chǎn)品環(huán)境家肯。
但是龄砰,我對(duì)dgate會(huì)促進(jìn)和簡(jiǎn)化你的開(kāi)發(fā)和測(cè)試很有信心,為何不嘗試一下讨衣,;)换棚?