dgate:基于Vert.x的輕量級(jí)API Gateway

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è)試很有信心,為何不嘗試一下讨衣,;)换棚?

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市反镇,隨后出現(xiàn)的幾起案子固蚤,更是在濱河造成了極大的恐慌,老刑警劉巖歹茶,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夕玩,死亡現(xiàn)場(chǎng)離奇詭異你弦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)燎孟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)禽作,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人揩页,你說(shuō)我怎么就攤上這事领迈。” “怎么了碍沐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)衷蜓。 經(jīng)常有香客問(wèn)我累提,道長(zhǎng),這世上最難降的妖魔是什么磁浇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任斋陪,我火速辦了婚禮,結(jié)果婚禮上置吓,老公的妹妹穿的比我還像新娘无虚。我一直安慰自己,他們只是感情好衍锚,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布友题。 她就那樣靜靜地躺著,像睡著了一般戴质。 火紅的嫁衣襯著肌膚如雪度宦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天告匠,我揣著相機(jī)與錄音戈抄,去河邊找鬼。 笑死后专,一個(gè)胖子當(dāng)著我的面吹牛划鸽,可吹牛的內(nèi)容都是我干的霉翔。 我是一名探鬼主播肆饶,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼撒桨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼给梅!你這毒婦竟也來(lái)了渴杆?” 一聲冷哼從身側(cè)響起钾虐,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤渴丸,失蹤者是張志新(化名)和其女友劉穎案腺,沒(méi)想到半個(gè)月后啰脚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體殷蛇,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡实夹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粒梦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亮航。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖匀们,靈堂內(nèi)的尸體忽然破棺而出缴淋,到底是詐尸還是另有隱情,我是刑警寧澤泄朴,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布重抖,位于F島的核電站,受9級(jí)特大地震影響祖灰,放射性物質(zhì)發(fā)生泄漏钟沛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一局扶、第九天 我趴在偏房一處隱蔽的房頂上張望恨统。 院中可真熱鬧,春花似錦三妈、人聲如沸畜埋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悠鞍。三九已至,卻和暖如春模燥,著一層夾襖步出監(jiān)牢的瞬間狞玛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工涧窒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留心肪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓纠吴,卻偏偏與公主長(zhǎng)得像硬鞍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戴已,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容