本發(fā)明屬于基礎(chǔ)能力/api網(wǎng)關(guān),尤其是涉及一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件及其調(diào)用方法。
背景技術(shù):
1、當(dāng)api網(wǎng)關(guān)作為前后端調(diào)用的樞紐,其調(diào)用量和調(diào)用場(chǎng)景在實(shí)際運(yùn)用過程中也在逐漸增加。api網(wǎng)關(guān)除了提供統(tǒng)一對(duì)外調(diào)用的數(shù)據(jù)結(jié)構(gòu)和調(diào)用方式外,做到支持多協(xié)議的后端參數(shù)轉(zhuǎn)換也顯得十分關(guān)鍵。如何在最大限度減少請(qǐng)求方以api網(wǎng)關(guān)所規(guī)定的數(shù)據(jù)結(jié)構(gòu)(json格式)調(diào)入,且可以在最大程度下支持依照后端服務(wù)協(xié)議做好數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成所需要的xml格式的功能就顯得尤為重要。除此之外,還需要將后端返回的xml格式數(shù)據(jù)進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換成json返回給調(diào)用方。實(shí)現(xiàn)json與xml的相互轉(zhuǎn)換。
2、傳統(tǒng)的json與xml轉(zhuǎn)換插件需要從api網(wǎng)關(guān)調(diào)用第三方j(luò)ava服務(wù),存在一定的延時(shí)。如遇服務(wù)更新或崩潰將無法進(jìn)行轉(zhuǎn)換。那么一種基于lua語言,且支持熱更新的json與xml可以相互轉(zhuǎn)換的請(qǐng)求體協(xié)議轉(zhuǎn)換插件就顯得尤為重要。
3、該插件的誕生實(shí)現(xiàn)了一次更新網(wǎng)關(guān)插件,當(dāng)后臺(tái)服務(wù)需要以xml進(jìn)行接收和返回時(shí),啟用插件。不需要時(shí)關(guān)閉插件即可實(shí)現(xiàn)該功能。使用過程中,無需修改配置文件、即更新即使用,不依賴第三方服務(wù),調(diào)用即轉(zhuǎn)換,返回即轉(zhuǎn)換,極大程度上減少了調(diào)用時(shí)間損耗。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明旨在提出一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件及其調(diào)用方法,以解決上述現(xiàn)有技術(shù)中存在的至少一個(gè)問題。
2、為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
3、第一方面,本發(fā)明提供一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,包括插件結(jié)構(gòu)、數(shù)據(jù)庫、功能轉(zhuǎn)換模塊、異常處理模塊、單元測(cè)試模塊和性能優(yōu)化模塊,所述插件結(jié)構(gòu)、功能轉(zhuǎn)換模塊均與數(shù)據(jù)庫通信連接,所述功能轉(zhuǎn)換模塊還分別與異常處理模塊、單元測(cè)試模塊和性能優(yōu)化模塊通信連接。
4、進(jìn)一步的,所述插件結(jié)構(gòu)包括主入口文件模塊和配置文件模塊,所述主入口文件模塊和配置文件模塊均與數(shù)據(jù)庫通信連接,所述主入口文件模塊用于初始化所有必要的庫和定義主要的操作函數(shù),所述配置文件模塊用于提供配置參數(shù)。
5、進(jìn)一步的,所述數(shù)據(jù)庫包括json庫模塊和xml庫模塊,所述xml庫模塊json庫模塊用于json格式的解析和生成,所述xml庫模塊用于xml格式的解析和生成。
6、進(jìn)一步的,所述功能轉(zhuǎn)換模塊包括json到xml轉(zhuǎn)換函數(shù)和xml到j(luò)son轉(zhuǎn)換函數(shù),其中,json到xml轉(zhuǎn)換函數(shù)包括:
7、輸入:json字符串;
8、處理:解析為lua表,然后轉(zhuǎn)換為xml格式;
9、輸出:xml字符串;
10、xml到j(luò)son轉(zhuǎn)換函數(shù)包括:
11、輸入:xml字符串;
12、處理:解析為lua表,然后轉(zhuǎn)換為json格式;
13、輸出:json字符串。
14、進(jìn)一步的,所述異常處理模塊用于捕獲json解析錯(cuò)誤、xml解析錯(cuò)誤。
15、進(jìn)一步的,所述單元測(cè)試模塊用于編寫測(cè)試用例,確保各個(gè)轉(zhuǎn)換函數(shù)的正確性。
16、進(jìn)一步的,所述性能優(yōu)化模塊用于對(duì)大型數(shù)據(jù)集的處理進(jìn)行優(yōu)化。
17、第二方面,基于同一方面構(gòu)思,本發(fā)明還提供了一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件的調(diào)用方法,包括以下步驟:
18、首先將插件搭配紫光云api網(wǎng)關(guān)或apisix網(wǎng)關(guān)使用,將其放置在配置plugins中;重啟網(wǎng)關(guān)后該插件生效;
19、選擇任意的api,啟用插件,對(duì)插件進(jìn)行配置后,點(diǎn)擊保存,插件立即生效,無需重啟網(wǎng)關(guān);
20、任意符合規(guī)范的調(diào)用請(qǐng)求,再該插件開啟時(shí);都會(huì)將請(qǐng)求端的請(qǐng)求體從json格式轉(zhuǎn)換成xml格式,調(diào)用后端服務(wù);
21、后端服務(wù)返回完整的xml報(bào)文,該插件獲取后進(jìn)行轉(zhuǎn)換,成功轉(zhuǎn)換為json格式返回給調(diào)用端;
22、如后端服務(wù)修改,依然需要協(xié)議轉(zhuǎn)換則無需操作,如后端服務(wù)無需使用協(xié)議轉(zhuǎn)換功能,對(duì)插件做刪除操作,即可立即失效。
23、相對(duì)于現(xiàn)有技術(shù),本發(fā)明所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件及其調(diào)用方法具有以下優(yōu)勢(shì):
24、本發(fā)明所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件及其調(diào)用方法,通過本發(fā)明,可以對(duì)api網(wǎng)關(guān)中任意的api接口啟用該協(xié)議轉(zhuǎn)換插件。插件啟用后,將會(huì)對(duì)請(qǐng)求的json格式報(bào)文進(jìn)行協(xié)議轉(zhuǎn)換。通過轉(zhuǎn)換后的報(bào)文調(diào)用后端服務(wù),當(dāng)然同時(shí)對(duì)請(qǐng)求頭會(huì)進(jìn)行改寫,符合xml調(diào)用的規(guī)范。后端返回xml數(shù)據(jù)后,該插件將自動(dòng)轉(zhuǎn)換為json格式。該插件不依賴第三方j(luò)ava服務(wù),減少了第三方服務(wù)調(diào)用造成的通訊延時(shí)等問題。同時(shí)該插件是否啟用只有api提供方知曉,前端調(diào)用接口無任何感知。
1.一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,其特征在于:包括插件結(jié)構(gòu)、數(shù)據(jù)庫、功能轉(zhuǎn)換模塊、異常處理模塊、單元測(cè)試模塊和性能優(yōu)化模塊,所述插件結(jié)構(gòu)、功能轉(zhuǎn)換模塊均與數(shù)據(jù)庫通信連接,所述功能轉(zhuǎn)換模塊還分別與異常處理模塊、單元測(cè)試模塊和性能優(yōu)化模塊通信連接。
2.根據(jù)權(quán)利要求1所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,其特征在于:所述插件結(jié)構(gòu)包括主入口文件模塊和配置文件模塊,所述主入口文件模塊和配置文件模塊均與數(shù)據(jù)庫通信連接,所述主入口文件模塊用于初始化所有必要的庫和定義主要的操作函數(shù),所述配置文件模塊用于提供配置參數(shù)。
3.根據(jù)權(quán)利要求1所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,其特征在于:所述數(shù)據(jù)庫包括json庫模塊和xml庫模塊,所述xml庫模塊json庫模塊用于json格式的解析和生成,所述xml庫模塊用于xml格式的解析和生成。
4.根據(jù)權(quán)利要求1所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,其特征在于:所述功能轉(zhuǎn)換模塊包括json到xml轉(zhuǎn)換函數(shù)和xml到j(luò)son轉(zhuǎn)換函數(shù),其中,json到xml轉(zhuǎn)換函數(shù)包括:
5.根據(jù)權(quán)利要求1所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,其特征在于:所述異常處理模塊用于捕獲json解析錯(cuò)誤、xml解析錯(cuò)誤。
6.根據(jù)權(quán)利要求1所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,其特征在于:所述單元測(cè)試模塊用于編寫測(cè)試用例,確保各個(gè)轉(zhuǎn)換函數(shù)的正確性。
7.根據(jù)權(quán)利要求1所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,其特征在于:所述性能優(yōu)化模塊用于對(duì)大型數(shù)據(jù)集的處理進(jìn)行優(yōu)化。
8.一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件的調(diào)用方法,應(yīng)用于權(quán)利要求1-7任一所述的一種基于lua的請(qǐng)求體協(xié)議轉(zhuǎn)換插件,其特征在于:包括以下步驟: