VX-API-GatewayAPI網(wǎng)關(guān)
VX-API-Gateway是基于Vert.x3.5.1(java)開發(fā)的API網(wǎng)關(guān),是一個(gè)集分布式,全異步,高性能,可擴(kuò)展 ,輕量級(jí)的API網(wǎng)關(guān)
軟件使用說明
VX-API 執(zhí)行流程
綠線代表一定會(huì)執(zhí)行,黑線代表當(dāng)存在時(shí)執(zhí)行,當(dāng)用戶請(qǐng)求的時(shí)候,完整的流程按組件順序由1開始執(zhí)行到7,如果不滿足任意一個(gè)組件時(shí)請(qǐng)求結(jié)束并響應(yīng)(fail-end-response),當(dāng)任意組件出現(xiàn)異常時(shí)統(tǒng)一進(jìn)入異常組件(Exception Handler)請(qǐng)求結(jié)束并響應(yīng)錯(cuò)誤信息
API的執(zhí)行流程參考組件介紹
組件介紹
1.黑名單檢查
該組件永遠(yuǎn)會(huì)被執(zhí)行! 用戶請(qǐng)求時(shí)第一步先經(jīng)過黑名單檢查,VX-API會(huì)讀取請(qǐng)求中的remote Address并獲取用戶的host(也就是獲取用戶的IP地址),如果用戶的IP地址在全局黑名單中,結(jié)束請(qǐng)求并響應(yīng)狀態(tài)碼:404,狀態(tài)信息:you can't access this service;反則繼續(xù)執(zhí)行處理...
2.訪問限制
當(dāng)創(chuàng)建API時(shí)開啟了訪問限制,該組件會(huì)被執(zhí)行! 訪問限制單位分別為:天/小時(shí)/分;可以設(shè)置API與IP限制,IP的限制不能大于API的限制;
假設(shè)開啟API限制:1分鐘可以訪問1000次;如果1分鐘內(nèi)訪問次數(shù)大于1000將結(jié)束請(qǐng)求并響應(yīng)請(qǐng)求(響應(yīng)內(nèi)容為:創(chuàng)建API中定義API返回結(jié)果:訪問限制返回);反則繼續(xù)執(zhí)行處理...
3.參數(shù)檢查
當(dāng)創(chuàng)建API時(shí)如果在定義API請(qǐng)求中添加了入?yún)⒍x,該組件會(huì)被執(zhí)行! 組件會(huì)根據(jù)入?yún)⒍x規(guī)定的格式檢查請(qǐng)求中的參數(shù);
如果參數(shù)不符合入?yún)⒍x結(jié)束請(qǐng)求并響應(yīng)請(qǐng)求(響應(yīng)內(nèi)容為:創(chuàng)建API中定義API返回結(jié)果:網(wǎng)關(guān)入口參數(shù)檢查失敗返回);反則繼續(xù)執(zhí)行處理...
4.權(quán)限認(rèn)證
當(dāng)創(chuàng)建API時(shí)開啟了安全認(rèn)證,該組件會(huì)被執(zhí)行! 組件會(huì)將流程交給權(quán)限認(rèn)證插件,權(quán)限認(rèn)證插件負(fù)責(zé)做相關(guān)處理后決定將流程交給下一個(gè)組件處理或結(jié)束請(qǐng)求
5.前置處理器
當(dāng)創(chuàng)建API時(shí)開啟了前置處理器,該組件會(huì)被執(zhí)行! 組件會(huì)將流程交給前置處理器插件,前置處理器插件負(fù)責(zé)做相關(guān)處理后決定將流程交給下一個(gè)組件處理或結(jié)束請(qǐng)求
6.中心處理器(主處理器)
當(dāng)前面的組件都執(zhí)行通過時(shí),該組件永遠(yuǎn)會(huì)被執(zhí)行! 組件會(huì)根據(jù)服務(wù)類型做相應(yīng)的處理,處理完畢后組件會(huì)判斷是否開啟了后置處理器,如果開啟了后置處理器,組件會(huì)將流程交給后置處理器,并傳遞一個(gè)標(biāo)識(shí)告訴后置處理器當(dāng)前組件處理的結(jié)果;反則結(jié)束請(qǐng)求并返回服務(wù)結(jié)果;
7.后置處理器
當(dāng)創(chuàng)建API時(shí)開啟了后置處理器,該組件會(huì)被執(zhí)行! 該組件是正常流程的最后一個(gè)組件,組件會(huì)收到主處理器的執(zhí)行結(jié)果,組件做完相應(yīng)操作后必須做對(duì)請(qǐng)求的響應(yīng)用戶的請(qǐng)求;
8.異常處理器
當(dāng)以上任意組件在執(zhí)行的過程中出現(xiàn)了異常,該組件會(huì)被執(zhí)行! 組件會(huì)結(jié)束請(qǐng)求并響應(yīng)請(qǐng)求(響應(yīng)內(nèi)容為:創(chuàng)建API中定義API返回結(jié)果:發(fā)生異常/失敗返回);
服務(wù)類型介紹
服務(wù)類型指網(wǎng)關(guān)主處理器要處理的類型,詳情參考類型以下的介紹
HTTP/HTTPS
表示后臺(tái)服務(wù)是常見的HTTP/HTTPS,也就是網(wǎng)關(guān)要將用戶的請(qǐng)求發(fā)送的目的地,該服務(wù)支持帶權(quán)重的負(fù)載均衡支持輪詢與哈希策略(默認(rèn)輪詢),自動(dòng)斷路并重試連接;當(dāng)網(wǎng)關(guān)請(qǐng)求后臺(tái)服務(wù)地址失敗時(shí)會(huì)提交給策略,如果同一個(gè)服務(wù)地址失敗兩次及以上時(shí),會(huì)被策略移除,網(wǎng)關(guān)會(huì)檢測(cè)策略中是否存在不可用的服務(wù)地址,如果存在會(huì)根據(jù)設(shè)定的重試時(shí)間進(jìn)行重試,重試后如果服務(wù)地址可用則將服務(wù)地址重新添加到策略中
頁面跳轉(zhuǎn)
該服務(wù)用于做鏈接重定向,當(dāng)用戶請(qǐng)求該服務(wù)的API時(shí)會(huì),網(wǎng)關(guān)會(huì)返回狀態(tài)302,告訴瀏覽器跳轉(zhuǎn)到指定的URL;
自定義服務(wù)
自定義服務(wù)其實(shí)跟前置處理器實(shí)現(xiàn)的功能差不多,因?yàn)榍爸锰幚砥骺梢宰鐾晗鄳?yīng)處理后響應(yīng)用戶請(qǐng)求,自定義服務(wù)中提供了三個(gè)默認(rèn)的實(shí)現(xiàn),分別為獲取網(wǎng)關(guān)時(shí)間戳,返回常量值與Session認(rèn)證的授權(quán)
執(zhí)行方式與環(huán)境要求
該項(xiàng)目基于vert.x 3.5.1開發(fā),開發(fā)環(huán)境jdk1.8_121,理論上只要帶有JDK/JRE 1.8以上都可以運(yùn)行該項(xiàng)目
可以在發(fā)行版中下載已經(jīng)打包好的或者自己編譯打包該項(xiàng)目,方法如下:
執(zhí)行mvn clean package appassembler:assemble 對(duì)項(xiàng)目進(jìn)行編譯打包
mvn clean package appassembler:assemble 打包完畢后進(jìn)入target/VX-API-Gateway/bin執(zhí)行相應(yīng)bat/sh文件
如果機(jī)器上沒有JDK8環(huán)境,可以自己下載一個(gè)JRE/JDK環(huán)境并在腳本中指定軟件使用哪個(gè)JRE/JDK啟動(dòng)
修改示例(Windows環(huán)境):
假設(shè)jre在D盤/java目錄下,可以在start.bat找到%JAVACMD% %JAVA_OPTS% -Dfile....
在以上語句前cd到j(luò)re的所在bin目錄,也就是在執(zhí)行java之前切換到D:/java/jreXXX/bin目錄在執(zhí)行java,相當(dāng)于設(shè)置了一個(gè)運(yùn)行環(huán)境
cd D:/java/jreXXX/bin %JAVACMD% %JAVA_OPTS% -Dfile.encoding=UTF-8 ...
軟件目錄說明:
bin 執(zhí)行腳本
conf 配置文件與客戶端靜態(tài)文件
lib 項(xiàng)目依賴的架包
logs 日志文件
temp 緩存/臨時(shí)文件
項(xiàng)目目錄說明
src/main/java中core包存放核心代碼,spi包存放用戶可以自定義插件的接口與工廠,自定義插件時(shí)實(shí)現(xiàn)相應(yīng)的接口并在工場(chǎng)中添加獲取
