GATEWAY-WormHole簡單易用的 API 管理平臺
WormHole是“蟲洞”意思。物理界解釋為連接黑洞和白洞的時空隧道。它的結(jié)構(gòu)和計算機網(wǎng)絡(luò)中的網(wǎng)關(guān)類似,作為連接兩個世界的樞紐。各管各,不用關(guān)心中間做了什么。如下:
WormHole是一個簡單、易用的api管理平臺。目的是為了降低后端服務(wù)開發(fā)與前端調(diào)用的耦合性。通過WormHole這一層使整個項目的開發(fā)協(xié)作更加完善??蛻舳碎_發(fā)人員從管理平臺查找需要的接口信息進行調(diào)用,服務(wù)端開發(fā)人員定義好接口后同步到管理平臺中,管理平臺可以統(tǒng)一對接口的訪問設(shè)置等。
WormHole有兩個版本,一個是基于SpringMVC框架、一個是基于原版改造為SpringBoot版本的。
平臺特性
- 網(wǎng)關(guān)支持Dubbo服務(wù)
- 完善的授權(quán)管理(接口權(quán)限、web操作權(quán)限等)
- 安全機制(驗簽、IP名單設(shè)置)
- 流控機制(sentinel限流、熔斷、隔離)
- 處理流程、可插拔機制(組件化配置)
- 支持mock功能,設(shè)定預(yù)期結(jié)果加快聯(lián)調(diào)進度
- 支持接口的快速錄入測試功能
- 有完善的用戶、角色管理,使用shiro框架
- 接口的有效管理,跨環(huán)境策略
- 平臺的擴展性,可按需調(diào)整
平臺技術(shù)結(jié)構(gòu)
注:server層是指具體的dubbo服務(wù)提供方,框架、插件根據(jù)實際需求處理
WormHole的SpringBoot版本是 將SpringMVC、Shiro、JSP、Velocity、Servlet等組件與SpringBoot進行整合。部分配置還有優(yōu)化空間,可按需調(diào)整
平臺組件邏輯
- contextProcessor 存儲上下文信息
- ipProcessor IP黑白名單設(shè)置
- userAgentProcessor 瀏覽器用戶代理
- paramProcessor 參數(shù)檢查驗證
- callbackParamProcessor 回調(diào)接口參數(shù)檢查驗證
- loginProcessor token信息檢查
- flowControlProcessor 流控限制
- signProcessor 簽名驗證
- authProcessor 權(quán)限驗證
- mockProcessor mock邏輯處理
- dubboProcessor 泛化調(diào)用dubbo服務(wù)
## 平臺項目結(jié)構(gòu)
1、maven項目結(jié)構(gòu)
wormehole
/ — wormehole-api 【管理臺接口、實體類、傳輸對象、異常等的定義】
/ — wormehole-domain 【客戶端信息、用戶token、result對象等的定義】
/ — wormehole-web 【管理臺的頁面實現(xiàn)、接口實現(xiàn)業(yè)務(wù)邏輯】
2、項目目錄結(jié)構(gòu)
wormehole-api
/ — com.kaistart.gateway / — api.service 【網(wǎng)關(guān)邏輯相關(guān)的所有接口定義】 / — domain 【網(wǎng)關(guān)邏輯相關(guān)的實體對象】 / — dto 【業(yè)務(wù)傳輸對象】 / — exception 【自定義異常類、返回碼】 / — support 【自定義公共應(yīng)對象】 / — json 【自定義公共響應(yīng)對象】 / — page 【自定義公共分頁對象】 / — proto 【自定義公共接口】 / — tool 【日期轉(zhuǎn)換工具類】
wormehole-domain
| — com.kaistart.gateway.domain | — pojo 【網(wǎng)關(guān)的客戶端對象、token信息】 | — response 【網(wǎng)關(guān)層的異常、結(jié)構(gòu)定義】
wormehole-web 【JAVA類、配置部分】
src/main/java | — com.kaistart 【主包名】 | — auth 【管理臺核心包】 | — controller 【管理臺用戶、角色、權(quán)限、資源等控制層】 | — domain 【管理臺相關(guān)實體類】 | — interceptor 【管理臺攔截器,url、權(quán)限等處理】 | — mapper 【管理臺相關(guān)的mapper對象】 | — service 【管理臺相關(guān)的service對象與實現(xiàn)】 | — gateway 【網(wǎng)關(guān)核心包】 | — common 【網(wǎng)關(guān)業(yè)務(wù)公共包】 | — cache 【緩存工具類】 | — exception 【網(wǎng)關(guān)異常類】 | — http 【http請求工具類,支持get請求傳body】 | — util 【工具類,zk,md5,executor】 | — controller 【網(wǎng)關(guān)業(yè)務(wù)控制層】 | — config 【網(wǎng)關(guān)的必要配置】 | — dubbo 【網(wǎng)關(guān)的簽名算法及對外服務(wù)】 | — mgr 【網(wǎng)關(guān)的管理臺處理】 | — mapper 【網(wǎng)關(guān)相關(guān)的mapper對象】 | — service 【網(wǎng)關(guān)相關(guān)的service定義及實現(xiàn)】 | — processor 【網(wǎng)關(guān)邏輯的核心組件】 | — servlet 【網(wǎng)關(guān)接口請求的servlet地址】 src/main/resources | — mybatis 【mybatis相關(guān)xml文件】 | — auth 【控制臺核心功能相關(guān)】 | — mgr 【網(wǎng)關(guān)功能相關(guān)】 | — spring 【核心配置文件】 | — velocity 【velocity編碼配置】 | — log4j.xml 【日志文件】 webapp | — common 【公共頁面】 | — velocity 【velocity核心資源】 | — config 【配置】 | — image 【圖片資源】 | — js 【核心js相關(guān)】 | — components 【公用js組件】 | — pages 【對應(yīng)頁面的js引用文件】 | — utils 【分頁等工具類】 | — xxx.js 【框架相關(guān)js】 | — lib 【引用的三方插件資源】 | — style 【引用的css樣式表】 | — WEB-INF | — templates 【頁面結(jié)構(gòu)】 | — demo 【樣例】 | — layout 【頁面框架布局】 | — pages 【管理臺頁面包】 | — auth 【用戶、角色、權(quán)限相關(guān)】 | — gateway 【網(wǎng)關(guān)相關(guān)頁面】 | — system 【系統(tǒng)查看頁面】 | — zookeeper 【zk相關(guān)頁面】 | — web.xml 【核心web.xml配置頁面】 | — 401.jsp 【過渡頁面】 | — index.jsp 【主頁】 | — login.jsp 【登錄頁面】
SpringBoot版本的配置文件會少一點。 約定大于配置,應(yīng)該還有較多優(yōu)化空間。
平臺環(huán)境要求
- JDK1.8
- Disconf配套環(huán)境【已移除配置】
- Zookeeper
- Tomcat容器等
- Mysql數(shù)據(jù)庫
SpringBoot版本不需要tomcat,
平臺運行說明
-
下載項目
-
處理以下幾個核心配置
- /gateway.sql 【初始化數(shù)據(jù)庫信息】
- /resources/config.properties 【修改zk、redis、mysql等的連接】
- /com/kaistart/gateway/config/MgrConfig.java 【修改不同環(huán)境的ip信息,這里這樣寫主要為了簡化使用,可按需遷移到配置中心去】
- gateway-web的 Context root 為 “/”
-
部署到tomcat容器進行啟動, 記得將webcontext-root 改為 '/'
運行的時候,DEBUG模式查看日志,比較容易處理問題。
