本發(fā)明涉及計(jì)算機(jī),特別涉及一種api接口的構(gòu)建和數(shù)據(jù)查詢方法及裝置。
背景技術(shù):
1、在構(gòu)建基于apollpgraphql框架的api接口時(shí),api接口開發(fā)者經(jīng)常面臨schema數(shù)據(jù)結(jié)構(gòu)與字段解析器管理分散的問題,其中schema定義了可以查詢的數(shù)據(jù)結(jié)構(gòu),而字段解析器則用于填充這些數(shù)據(jù),雖然schema數(shù)據(jù)結(jié)構(gòu)和字段解析器根據(jù)業(yè)務(wù)邏輯進(jìn)行拆分可以減少軟件代碼之間的耦合度,但這也帶來了管理和維護(hù)上的挑戰(zhàn)。
2、傳統(tǒng)的schema數(shù)據(jù)結(jié)構(gòu)和字段解析器管理方式存在以下缺陷:
3、(1)結(jié)構(gòu)不一致。schema可以是樹型結(jié)構(gòu),而實(shí)現(xiàn)自定義類型的字段解析器時(shí)只能是單層結(jié)構(gòu),這導(dǎo)致了schema數(shù)據(jù)結(jié)構(gòu)和字段解析器在結(jié)構(gòu)上不一致,增加了分析問題的成本。
4、(2)維護(hù)困難。隨著應(yīng)用規(guī)模的擴(kuò)大,手動管理和維護(hù)大量的schema數(shù)據(jù)結(jié)構(gòu)和字段解析器變得復(fù)雜且容易出錯(cuò)。
5、(3)缺乏自動化工具?,F(xiàn)有的工具和方法不支持自動化生成和維護(hù)解析器,將導(dǎo)致開發(fā)者需要投入大量時(shí)間進(jìn)行手動編寫和調(diào)整。
技術(shù)實(shí)現(xiàn)思路
1、鑒于現(xiàn)有技術(shù)中的上述缺陷或不足,本發(fā)明提供了一種api接口的構(gòu)建和數(shù)據(jù)查詢方法及裝置,能夠自動生成與graphql?schema的結(jié)構(gòu)緊密對應(yīng)的字段解析器,提高了api接口的開發(fā)效率,在添加新的字段和解析器時(shí),不需要修改核心邏輯,提升了系統(tǒng)的可擴(kuò)展性。
2、本發(fā)明的一個(gè)方面,提供了一種api接口的構(gòu)建和數(shù)據(jù)查詢方法,用于graphql服務(wù)端,包括如下步驟:
3、創(chuàng)建以graphql操作類型為后綴的javascript文件;在javascript文件中接收聲明式解析器的結(jié)構(gòu)參數(shù),根據(jù)所述聲明式解析器的結(jié)構(gòu)參數(shù)構(gòu)造用于解析請求字段的解析器對象;其中,該聲明式解析器的結(jié)構(gòu)參數(shù)與預(yù)定義的graphql?schema數(shù)據(jù)結(jié)構(gòu)匹配,所述graphql?schema數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的字段和類型;通過graphql服務(wù)端獲取所述javascript文件的文件路徑列表,根據(jù)所述文件路徑列表動態(tài)的導(dǎo)入javascript文件,從導(dǎo)入的javascript文件中獲取待用的解析器對象;將獲取的待用的解析器對象傳遞給graphql服務(wù)端配置參數(shù)中的解析器配置項(xiàng);解析客戶端發(fā)送的查詢字符串,將其轉(zhuǎn)換為可執(zhí)行的查詢文檔,若查詢文檔的語法結(jié)構(gòu)符合graphql規(guī)范、查詢字段存在、并且客戶端具有訪問權(quán)限,則根據(jù)查詢文檔中指定的字段路徑,從數(shù)據(jù)源中獲取相應(yīng)的數(shù)據(jù);graphql服務(wù)端根據(jù)查詢文檔指定的字段路徑,通過解析器對獲取的數(shù)據(jù)進(jìn)行解析,并將解析后的數(shù)據(jù)返回給客戶端。
4、進(jìn)一步的,所述根據(jù)所述聲明式解析器的結(jié)構(gòu)參數(shù)構(gòu)造用于解析請求字段的解析器對象的步驟,包括:在所述javascript文件中創(chuàng)建用于存儲解析器函數(shù)的解析器初始對象;在解析器初始對象中添加默認(rèn)根操作對象,并在默認(rèn)根操作對象中添加操作字段類型的解析器函數(shù);對所述聲明式解析器的結(jié)構(gòu)參數(shù)中的result對象以遞歸的方式進(jìn)行逐層解析,將解析后的字段類型和解析器函數(shù)添加到所述解析器初始對象中,得到所述解析器對象。
5、進(jìn)一步的,所述從導(dǎo)入的javascript文件中獲取待用的解析器對象的步驟,包括:初始化模塊列表,根據(jù)文件路徑列表動態(tài)獲取所述javascript文件導(dǎo)出的用來存儲解析器的模塊對象,遍歷所述模塊對象中的每一個(gè)解析器對象,將默認(rèn)根操作對象替換為當(dāng)前根操作對象,并添加到所述模塊列表中;將初始化后的模塊列表中的數(shù)據(jù)轉(zhuǎn)換為待用的解析器對象。
6、進(jìn)一步的,所述將初始化后的模塊列表中的數(shù)據(jù)轉(zhuǎn)換為待用的解析器對象的步驟,包括:遍歷初始化后的模塊列表,將合并后的當(dāng)前根操作對象和自定義類型解析對象添加到解析器對象中,得到待用的解析器對象。
7、進(jìn)一步的,還包括:數(shù)據(jù)查詢包括安全日志查詢,所述graphql?schema數(shù)據(jù)結(jié)構(gòu)包括:安全日志類型和字段、安全事件類型和字段、以及分析規(guī)則類型和字段。
8、本發(fā)明的另一方面,還提供了一種api接口的構(gòu)建和數(shù)據(jù)查詢裝置,用于graphql服務(wù)端,包括:
9、文件生成模塊,被配置為創(chuàng)建以graphql操作類型為后綴的javascript文件;解析器構(gòu)建模塊,被配置為在javascript文件中接收聲明式解析器的結(jié)構(gòu)參數(shù),根據(jù)所述聲明式解析器的結(jié)構(gòu)參數(shù)構(gòu)造用于解析請求字段的解析器對象;其中,該聲明式解析器的結(jié)構(gòu)參數(shù)與預(yù)定義的graphql?schema數(shù)據(jù)結(jié)構(gòu)匹配,所述graphql?schema數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的字段和類型;解析器加載模塊,被配置為通過graphql服務(wù)端獲取所述javascript文件的文件路徑列表,根據(jù)所述文件路徑列表動態(tài)的導(dǎo)入javascript文件,從導(dǎo)入的javascript文件中獲取待用的解析器對象;將獲取的待用的解析器對象傳遞給graphql服務(wù)端配置參數(shù)中的解析器配置項(xiàng);查詢模塊,被配置為解析客戶端發(fā)送的查詢字符串,將其轉(zhuǎn)換為可執(zhí)行的查詢文檔,若查詢文檔的語法結(jié)構(gòu)符合graphql規(guī)范、查詢字段存在、并且客戶端具有訪問權(quán)限,則根據(jù)查詢文檔中指定的字段路徑,從數(shù)據(jù)源中獲取相應(yīng)的數(shù)據(jù);解析模塊,被配置為graphql服務(wù)端根據(jù)查詢文檔指定的字段路徑,通過解析器對獲取的數(shù)據(jù)進(jìn)行解析,并將解析后的數(shù)據(jù)返回給客戶端。
10、進(jìn)一步的,所述解析器構(gòu)建模塊進(jìn)一步被配置為:在所述javascript文件中創(chuàng)建用于存儲解析器函數(shù)的解析器初始對象;在解析器初始對象中添加默認(rèn)根操作對象,并在默認(rèn)根操作對象中添加操作字段類型的解析器函數(shù);對所述聲明式解析器的結(jié)構(gòu)參數(shù)中的result對象以遞歸的方式進(jìn)行逐層解析,將解析后的字段類型和解析器函數(shù)添加到所述解析器初始對象中,得到所述解析器對象。
11、進(jìn)一步的,所述解析器加載模塊被進(jìn)一步配置為:初始化模塊列表,根據(jù)文件路徑列表動態(tài)獲取所述javascript文件導(dǎo)出的用來存儲解析器的模塊對象,遍歷所述模塊對象中的每一個(gè)解析器對象,將默認(rèn)根操作對象替換為當(dāng)前根操作對象,并添加到所述模塊列表中;將初始化后的模塊列表中的數(shù)據(jù)轉(zhuǎn)換為待用的解析器對象。
12、進(jìn)一步的,所述解析器加載模塊被進(jìn)一步配置為:遍歷初始化后的模塊列表,將合并后的當(dāng)前根操作對象和自定義類型解析對象添加到解析器對象中,得到待用的解析器對象。
13、進(jìn)一步的,數(shù)據(jù)查詢包括安全日志查詢,所述graphql?schema數(shù)據(jù)結(jié)構(gòu)包括:安全日志類型和字段、安全事件類型和字段、以及分析規(guī)則類型和字段。
14、本發(fā)明提供的一種api接口的構(gòu)建和數(shù)據(jù)查詢方法及裝置,具體效果如下:
15、(1)提升api接口的開發(fā)效率。傳統(tǒng)的字段解析器管理方式要求開發(fā)者手動編寫和維護(hù)大量的代碼,這不僅耗時(shí)而且容易出錯(cuò)。本發(fā)明能夠自動生成字段解析器,減少了開發(fā)者在手動編寫和維護(hù)上的工作量。
16、(2)增強(qiáng)api接口的可維護(hù)性。采用聲明式配置字段解析器,使得字段解析器的生成與graphql?schema的數(shù)據(jù)結(jié)構(gòu)緊密對應(yīng),提高了api接口軟件的可讀性和可維護(hù)性。
17、(3)提升api接口的可擴(kuò)展性。當(dāng)需要添加新的字段和解析器時(shí),本發(fā)明允許開發(fā)者無需修改核心邏輯,只需通過聲明式配置即可輕松擴(kuò)展新的字段和解析器,簡化了擴(kuò)展過程,提高了系統(tǒng)的靈活性和可擴(kuò)展性。
18、(4)優(yōu)化資源分配。開發(fā)者可以將更多的時(shí)間投入到業(yè)務(wù)邏輯的優(yōu)化和創(chuàng)新上,而不是花費(fèi)在字段解析器的編寫和維護(hù)上,從而更有效地利用開發(fā)資源。