專利名稱:基于Internet的OpenAPI自動(dòng)獲取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)加載領(lǐng)域,本發(fā)明將hternet中大量的OpenAPI (Application Programming hterface,應(yīng)用編程接口 )數(shù)據(jù)自動(dòng)或半自動(dòng)(手動(dòng)配置)地加載到數(shù)據(jù)庫(kù)中,特別涉及一種基于hternet的OpenAPI自動(dòng)獲取方法。
背景技術(shù):
在互聯(lián)網(wǎng)時(shí)代,將網(wǎng)站的服務(wù)封裝成一系列計(jì)算機(jī)易識(shí)別的數(shù)據(jù)接口開放出去供第三方開發(fā)者使用的行為就叫做開放網(wǎng)站的API,與之對(duì)應(yīng)的所開放的API就稱作 OpenAPI0目前互聯(lián)網(wǎng)上流行的OpenAPI不論是種類、服務(wù)質(zhì)量、還是規(guī)范化和使用情況都有了很大的提升,可以說(shuō)已經(jīng)由初期的發(fā)展轉(zhuǎn)到了較為成熟的發(fā)展。其中Google已經(jīng)開放了包括 GoogleMaps、karch、Video 和 Advertising 等 50 多個(gè) OpenAPI,尤其是 GoogleMaps 衍生出眾多的Web應(yīng)用,也推動(dòng)了更多OpenAPI的開放。Yahoo、Microsoft、Amazon、eBay、 Facebook、Twitter和Flickr等也紛紛開放平臺(tái)或提供相應(yīng)的OpenAPI。與此同時(shí),國(guó)內(nèi)各大網(wǎng)站紛紛宣布推出開放平臺(tái),其中有新浪和搜狐等門戶網(wǎng)站,也有最近涌現(xiàn)的人人網(wǎng)和 Myspace等社交類網(wǎng)站。OpenAPI數(shù)量的快速增加以及功能的日益豐富,為用戶提供了更加方便、快捷開放能力,也使得越來(lái)越多的開發(fā)者能夠接觸到Web應(yīng)用開發(fā)的前沿,可以很容易地在自己的網(wǎng)站中構(gòu)建各種功能豐富、交互性強(qiáng)的應(yīng)用程序。發(fā)明人在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下缺點(diǎn)由于OpenAPI沒有一個(gè)統(tǒng)一的接口規(guī)范,使得開發(fā)者在使用不同網(wǎng)站的同種類型的OpenAPI時(shí),如Google地圖API和百度地圖API,需要閱讀不同的API類參考文檔,這就給開發(fā)者的開發(fā)帶來(lái)了諸多不便。
發(fā)明內(nèi)容
為了方便開發(fā)者的開發(fā)和應(yīng)用,滿足實(shí)際應(yīng)用中的需要,本發(fā)明提供了一種基于 Internet的OpenAPI自動(dòng)獲取方法,詳見下文描述一種基于hternet的OpenAPI自動(dòng)獲取方法,所述方法包括以下步驟(1)判斷OpenAPI協(xié)議的類型是否是Ajax協(xié)議或Rest協(xié)議,如果是,則執(zhí)行步驟 (2);如果否,則為Soap協(xié)議,執(zhí)行步驟(3);(2)通過(guò)OpenAPI Home的URL獲取存放OpenAPI詳細(xì)信息的頁(yè)面,判斷是否獲取到所述存放OpenAPI詳細(xì)信息的頁(yè)面,如果是,執(zhí)行步驟(4);如果否,流程結(jié)束;(3)通過(guò)OpenAPI Home的URL獲取存放OpenAPI詳細(xì)信息的WSDL文檔,判斷是否獲取到所述存放OpenAPI詳細(xì)信息的WSDL文檔,如果是,執(zhí)行步驟(5);如果否,流程結(jié)束;(4)根據(jù)所述存放OpenAPI詳細(xì)信息的頁(yè)面,獲取網(wǎng)頁(yè)源碼,并分析網(wǎng)頁(yè)結(jié)構(gòu),執(zhí)行步驟(6);(5)根據(jù)所述存放OpenAPI詳細(xì)信息的WSDL文檔,解析WSDL文檔,執(zhí)行步驟(7);
(6)根據(jù)所述網(wǎng)頁(yè)結(jié)構(gòu)編寫和所述網(wǎng)頁(yè)結(jié)構(gòu)相應(yīng)的正則表達(dá)式,執(zhí)行步驟(8);(7)判斷解析是否成功,如果是,執(zhí)行步驟(9);如果否,流程結(jié)束;(8)判斷OpenAPI協(xié)議類型是否是所述Ajax協(xié)議,如果是,執(zhí)行步驟(10);如果否,則為所述Rest協(xié)議,執(zhí)行步驟(11);(9)獲取所述Soap協(xié)議的詳細(xì)信息,執(zhí)行步驟(12);(10)通過(guò)正則表達(dá)式匹配頁(yè)面源代碼,獲取Ajax協(xié)議的詳細(xì)信息,執(zhí)行步驟 (12);(11)通過(guò)正則表達(dá)式匹配頁(yè)面源代碼,獲取Rest協(xié)議的詳細(xì)信息,執(zhí)行步驟 (12);(1 根據(jù)所述Ajax協(xié)議、所述Rest協(xié)議和所述Soap協(xié)議將所述Soap協(xié)議的詳細(xì)信息、所述Ajax協(xié)議的詳細(xì)信息和所述Rest協(xié)議的詳細(xì)信息加載到數(shù)據(jù)庫(kù)相應(yīng)的表中;(13)判斷是否加載成功,如果是,執(zhí)行步驟(14);如果否,流程結(jié)束。(14)返回成功信息,流程結(jié)束。所述方法還包括將包含Ajax協(xié)議或Rest協(xié)議的所述OpenAPI詳細(xì)信息的頁(yè)面讀取至本地文件。所述方法還包括將包含Soap協(xié)議的所述OpenAPI詳細(xì)信息的WSDL文檔下載到本地。在步驟(10)和步驟(11)之后,步驟(1 之前,所述方法還包括對(duì)獲取到的所述Ajax協(xié)議的詳細(xì)信息進(jìn)行人工校驗(yàn);對(duì)獲取到的所述Rest協(xié)議的詳細(xì)信息進(jìn)行人工校驗(yàn)。在執(zhí)行步驟( 之前,所述方法還包括判斷是否已有所述存放OpenAPI詳細(xì)信息的頁(yè)面,如果是,執(zhí)行步驟(4);如果否, 則執(zhí)行步驟(2)。在執(zhí)行步驟( 之前,所述方法還包括判斷是否已有所述存放OpenAPI詳細(xì)信息的WSDL文檔,如果是,執(zhí)行步驟(5);如果否,則執(zhí)行步驟(3)。在執(zhí)行步驟( 或步驟(3)時(shí),所述方法還包括在獲取所述存放OpenAPI詳細(xì)信息的頁(yè)面或所述存放OpenAPI詳細(xì)信息的WSDL 文檔時(shí),采用UTF-8格式。本發(fā)明提供的技術(shù)方案的有益效果是本發(fā)明提供了一種基于hternet的OpenAPI自動(dòng)獲取方法,本發(fā)明能夠以自動(dòng)或半自動(dòng)(手動(dòng)配置)的方式主動(dòng)地抓取OpenAPI數(shù)據(jù),通過(guò)必要的分解和重組,封裝為完整的OpenAPI并添加入庫(kù),從而不斷擴(kuò)大開放能力管理平臺(tái)的OpenAPI數(shù)據(jù)量,為面向 OpenAPI的開放能力管理平臺(tái)打好基礎(chǔ);使用本方法可以將hternet中大量的OpenAPI自動(dòng)加載到數(shù)據(jù)庫(kù)中,而且即使某個(gè)OpenAPI的信息發(fā)生變化,也不需要重新開發(fā),只需要修改配置文件中的正則表達(dá)式就可以解決,為OpenAPI數(shù)據(jù)的獲取提供了便利。
圖1為本發(fā)明提供的架構(gòu)示意5
圖2為本發(fā)明提供的基于hternet的OpenAPI自動(dòng)獲取方法的示意圖;圖3為本發(fā)明提供的基于hternet的OpenAPI自動(dòng)獲取方法的流程圖;圖4為本發(fā)明提供的存儲(chǔ)OpenAPI基本信息的表字段的結(jié)構(gòu)示意圖;圖5為本發(fā)明提供的Ajax協(xié)議的表結(jié)構(gòu)的示意圖;圖6為本發(fā)明提供的Rest協(xié)議的表結(jié)構(gòu)的示意圖;圖7為本發(fā)明提供的Soap協(xié)議的表結(jié)構(gòu)的示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。為了方便開發(fā)者的開發(fā)和應(yīng)用,滿足實(shí)際應(yīng)用中的需要,本發(fā)明實(shí)施例提供了一種基于hternet的OpenAPI自動(dòng)獲取方法,參見圖1、圖2和圖3,詳見下文描述在本發(fā)明實(shí)施例中,OpenAPI的協(xié)議類型分為三種,分別為Ajax協(xié)議、Rest協(xié)議和Soap協(xié)議。對(duì)于每一個(gè)OpenAPI,都由基本信息和詳細(xì)信息兩個(gè)部分組成?;拘畔⒅饕糜谟脩舻臋z索以及查看,包括API名稱、標(biāo)簽、協(xié)議類型和提供者等信息;詳細(xì)信息主要用于調(diào)用,包括調(diào)用時(shí)需要的類、方法、輸入,以及返回結(jié)果等信息,對(duì)于不同協(xié)議類型的 OpenAPI,調(diào)用時(shí)需要的信息類型也各不相同,本發(fā)明實(shí)施例提供的架構(gòu)如圖1所示。從圖1 中可以看出,本發(fā)明實(shí)施例主要分為三個(gè)部分,分別為數(shù)據(jù)獲取、解析數(shù)據(jù)和持久化。下面分別對(duì)各個(gè)部分進(jìn)行概要的介紹。1、數(shù)據(jù)獲取基于hternet不斷查找新的OpenAPI ;盡管hternet中有著大量的OpenAPI,但如果盲目地在hternet中進(jìn)行 OpenAPI的搜索,則會(huì)花費(fèi)大量的精力及時(shí)間,因此本發(fā)明實(shí)施例從注冊(cè)有大量OpenAPI的 Programmable Web出發(fā),在其中查找當(dāng)前最流行、使用最多的OpenAPI,需要的操作可分為以下兩個(gè)步驟①在Programmable Web中,為獲取OpenAPI的基本信息,需要解析Programmable Web中的網(wǎng)頁(yè),以獲取OpenAPI的名稱、標(biāo)簽、協(xié)議和API HomeURI等基本信息;②由于!Programmable Web中只包含OpenAPI的基本信息,不包含詳細(xì)信息,因此需要轉(zhuǎn)到API Home URI中找到包含有相應(yīng)OpenAPI詳細(xì)信息的頁(yè)面,在該包含有相應(yīng) OpenAPI詳細(xì)信息的頁(yè)面獲取到詳細(xì)信息。2、解析數(shù)據(jù)獲取OpenAPI的詳細(xì)信息;由于本發(fā)明實(shí)施例涉及了三種協(xié)議類型的OpenAPI,而不同協(xié)議的OpenAPI的詳細(xì)信息類型也各不相同,因此需要針對(duì)不同協(xié)議的OpenAPI制定不同的解析方案,分別為· Ajax協(xié)議該協(xié)議的OpenAPI的詳細(xì)信息是以頁(yè)面的形式進(jìn)行展現(xiàn)的,因此需要對(duì)包含有Ajax協(xié)議的OpenAPI的詳細(xì)信息的頁(yè)面進(jìn)行解析,從中獲取該OpenAPI提供的類、類所具有的屬性和方法、方法需要的輸入以及返回的結(jié)果;· Rest協(xié)議該協(xié)議的OpenAPI的詳細(xì)信息也是以頁(yè)面的格式進(jìn)行存放的,因此要做的也是解析頁(yè)面,與解析Ajax協(xié)議的OpenAPI的詳細(xì)信息不同的是,對(duì)于Rest協(xié)議的 OpenAPI,需要獲取的詳細(xì)信息為該OpenAPI包含的方法、方法中需要的輸入以及返回的結(jié)果列表;
· Soap協(xié)議不同于以上兩種協(xié)議的OpenAPI,該協(xié)議的OpenAPI的詳細(xì)信息以 WSDL文檔的方式進(jìn)行存儲(chǔ),因此要進(jìn)行的操作就是解析包含有Soap協(xié)議的OpenAPI的詳細(xì)信息的WSDL文檔,獲取該OpenAPI提供的服務(wù)、調(diào)用服務(wù)時(shí)執(zhí)行的操作、操作需要的輸入和返回的結(jié)果。在解析Ajax協(xié)議的OpenAPI時(shí),著重獲取的是該OpenAPI所包含的類、類的屬性以及方法、方法需要的輸入和返回的結(jié)果,因此就需要對(duì)頁(yè)面格式即頁(yè)面源代碼進(jìn)行細(xì)致的分析,分析哪塊代碼包含該OpenAPI的類的信息,找出這些代碼的共性,然后編寫出相應(yīng)的正則表達(dá)式,通過(guò)正則表達(dá)式去匹配頁(yè)面源代碼,獲取類的信息,之后獲取每個(gè)類的屬性和方法、每個(gè)方法的輸入和返回的結(jié)果。以Google Maps API的類及其描述信息的獲取為例,包含Google MapsAPI詳細(xì)信息的頁(yè)面的網(wǎng)址為http//code.google, com/intl/en/apis/maps/documentation/reference, html,在對(duì)包含Google Maps的類及其描述的代碼進(jìn)行分析后,編寫出用于匹配源代碼的正則表達(dá)式為<h2 id=" (["〃 ] *)" >Class (["<] * ) </h2Xp> ((. ) * )</p>,然后通過(guò)Pattern類的compile方法將上述正則表達(dá)式編譯并賦值給Pattern類的一個(gè)對(duì)象,之后這個(gè)對(duì)象使用matcher方法生成一個(gè)Matcher實(shí)例,接著就可以使用該 Matcher實(shí)例以編譯的正則表達(dá)式為基礎(chǔ)對(duì)頁(yè)面源代碼進(jìn)行匹配工作,通過(guò)調(diào)用find方法在頁(yè)面源代碼中查找下一個(gè)匹配子串,在查找到的每個(gè)子串中使用group方法獲取與指定的組相匹配的內(nèi)容,即是Google Maps所包含的類的名稱及其描述。Rest協(xié)議的OpenAPI的解析過(guò)程類似于Ajax協(xié)議,只是獲取的信息類型不同,本發(fā)明實(shí)施例對(duì)此不再贅述。由于Soap協(xié)議的OpenAPI的詳細(xì)信息是以WSDL文檔的形式進(jìn)行存放的,因此解析Soap協(xié)議的OpenAPI的詳細(xì)信息的過(guò)程就是解析WSDL文檔。在解析WSDL文檔時(shí)有很多選擇方案,如SAX、D0M等,在本發(fā)明實(shí)施例中,采用wsdl4j來(lái)解析WSDL文檔,依次得到該 OpenAPI提供的服務(wù)、服務(wù)調(diào)用的操作、操作需要的輸入和返回的結(jié)果。3、持久化進(jìn)行OpenAPI的存儲(chǔ)。前面提到過(guò),對(duì)于不同協(xié)議的OpenAPI,其基本信息的數(shù)據(jù)格式是一樣的,而詳細(xì)信息的數(shù)據(jù)格式不一樣,因此對(duì)于基本信息的存放采用一個(gè)數(shù)據(jù)表即可,而對(duì)于詳細(xì)信息的存儲(chǔ)則需要不同的數(shù)據(jù)表,涉及的操作分別為①設(shè)計(jì)一個(gè)數(shù)據(jù)表用于存放OpenAPI的基本信息;②對(duì)于不同協(xié)議的OpenAPI,設(shè)計(jì)不同的數(shù)據(jù)表,以Rest協(xié)議的OpenAPI為例,每個(gè)Rest協(xié)議的OpenAPI都包含有至少一個(gè)方法,而每個(gè)方法也可能包含多個(gè)輸入,因此,為了優(yōu)化數(shù)據(jù)庫(kù),需要采用多張表格用于每種協(xié)議的OpenAPI的詳細(xì)信息的存儲(chǔ);③定義對(duì)OpenAPI數(shù)據(jù)庫(kù)操作的接口,通過(guò)接口實(shí)現(xiàn)基本的數(shù)據(jù)庫(kù)操作。101 判斷OpenAPI協(xié)議的類型是否是Ajax協(xié)議或Rest協(xié)議,如果是,則執(zhí)行步驟 102 ;如果否,則為Soap協(xié)議,執(zhí)行步驟103 ;102 通過(guò)OpenAPI Home的URL獲取存放OpenAPI詳細(xì)信息的頁(yè)面,判斷是否獲取到存放OpenAPI詳細(xì)信息的頁(yè)面,如果是,執(zhí)行步驟104 ;如果否,流程結(jié)束;其中,為了提高工作效率,在執(zhí)行步驟102之前,本發(fā)明實(shí)施例還包括
7
判斷是否已有存放OpenAPI詳細(xì)信息的頁(yè)面,如果是,執(zhí)行步驟104 ;如果否,則執(zhí)行步驟102。103 通過(guò)OpenAPI Home的URL獲取存放OpenAPI詳細(xì)信息的WSDL文檔,判斷是否獲取到存放OpenAPI詳細(xì)信息的WSDL文檔,如果是,執(zhí)行步驟105 ;如果否,流程結(jié)束;其中,對(duì)于不同協(xié)議的OpenAPI,需要不同的解析方案,在解析OpenAPI的詳細(xì)信息時(shí),為將網(wǎng)絡(luò)速度對(duì)本發(fā)明實(shí)施例的影響減至最小,本發(fā)明實(shí)施例會(huì)將包含Ajax協(xié)議或 Rest協(xié)議的OpenAPI的詳細(xì)信息的頁(yè)面讀取至本地文件;對(duì)于Soap協(xié)議的OpenAPI,本發(fā)明實(shí)施例會(huì)將包含Soap協(xié)議的OpenAPI詳細(xì)信息的WSDL文檔下載到本地。其中,為了提高工作效率,在執(zhí)行步驟103之前,本發(fā)明實(shí)施例還包括判斷是否已有存放OpenAPI詳細(xì)信息的WSDL文檔,如果是,執(zhí)行步驟105 ;如果否,則執(zhí)行步驟103。104 根據(jù)存放OpenAPI詳細(xì)信息的頁(yè)面,獲取網(wǎng)頁(yè)源碼,并分析網(wǎng)頁(yè)結(jié)構(gòu),執(zhí)行步驟 106 ;105 根據(jù)存放OpenAPI詳細(xì)信息的WSDL文檔,解析WSDL文檔,執(zhí)行步驟107 ;106 根據(jù)網(wǎng)頁(yè)結(jié)構(gòu)編寫和網(wǎng)頁(yè)結(jié)構(gòu)相應(yīng)的正則表達(dá)式,執(zhí)行步驟108 ;其中,正則表達(dá)式常被用于檢索和/或替換符合某個(gè)模式的文本內(nèi)容,所以本發(fā)明實(shí)施例采用正則表達(dá)式匹配頁(yè)面源代碼的方法獲取信息。由于,解析的頁(yè)面都是 Programmable Web中的,因此包含OpenAPI基本信息的頁(yè)面都是具有統(tǒng)一格式的,編寫的正則表達(dá)式也能適用于絕大多數(shù)頁(yè)面,因此,具有高效性。107 判斷解析是否成功,如果是,執(zhí)行步驟109 ;如果否,流程結(jié)束;108 判斷OpenAPI協(xié)議類型是否是Ajax協(xié)議,如果是,執(zhí)行步驟110 ;如果否,則為Rest協(xié)議,執(zhí)行步驟111 ;109 獲取Soap協(xié)議的詳細(xì)信息,執(zhí)行步驟112 ;其中,該Soap協(xié)議的詳細(xì)信息包括服務(wù)、服務(wù)包含的方法、方法的輸入和輸出。110 通過(guò)正則表達(dá)式匹配頁(yè)面源代碼,獲取Ajax協(xié)議的詳細(xì)信息,執(zhí)行步驟 112 ;其中,該Ajax協(xié)議的詳細(xì)信息包括類、類的屬性、類的方法和方法的參數(shù)。111 通過(guò)正則表達(dá)式匹配頁(yè)面源代碼,獲取Rest協(xié)議的詳細(xì)信息,執(zhí)行步驟 112 ;其中,該Rest協(xié)議的詳細(xì)信息包括方法、方法的參數(shù)和返回元素列表。112 根據(jù)Ajax協(xié)議、Rest協(xié)議和Soap協(xié)議將Soap協(xié)議的詳細(xì)信息、Ajax協(xié)議的詳細(xì)信息和Rest協(xié)議的詳細(xì)信息加載到數(shù)據(jù)庫(kù)相應(yīng)的表中;其中,用于存儲(chǔ)OpenAPI基本信息的表字段的示意圖如圖4所示。表api包括 OpenAPI 的 Name、Tags、Protocol 和 API Home 等基本信息字段。根據(jù)三種不同協(xié)議的OpenAPI的結(jié)構(gòu)特點(diǎn),分別制定和數(shù)據(jù)庫(kù)相應(yīng)的表進(jìn)行存儲(chǔ)。對(duì)于Ajax協(xié)議的OpenAPI,由于基于Ajax的OpenAPI本身就是JS庫(kù),所以包含若干 JS類,每個(gè)類里面包含有類的數(shù)據(jù)成員和方法,方法又具備調(diào)用參數(shù)列表。由于Ajax協(xié)議的特殊性,可獨(dú)立運(yùn)行的JS代碼片段稱為應(yīng)用(Application),并將其源碼以及基本的描述信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶可以直接對(duì)其功能進(jìn)行調(diào)用。Ajax協(xié)議和數(shù)據(jù)庫(kù)相應(yīng)的表結(jié)
8構(gòu)的示意圖如圖5所示,包括6個(gè)表,分別為ajax_application 用于存儲(chǔ)Ajax協(xié)議的OpenAPI的可獨(dú)立運(yùn)行的JS代碼片段, 也即應(yīng)用,包括應(yīng)用的名稱、描述和代碼片段;application_input 作為ajax_application的輸入,包括輸入的名稱、描述、類型、是否必需、樣本值和默認(rèn)值;ajax_class 用于存儲(chǔ)Ajax協(xié)議的OpenAPI提供的類,包括類的名稱和描述;ajax_property 作為ajax^lass的屬性,包括屬性的名稱、描述和類型;ajax_method 作為ajax^lass的方法,包括方法的名稱、描述和使用例子,由于調(diào)用方法后最多返回一個(gè)結(jié)果,因此將返回的結(jié)果的名稱和類型也作為方法的屬性;ajax_input 作為ajaxjiiethod的輸入,包括輸入的名稱、描述、類型、是否必需、 樣本值和默認(rèn)值。對(duì)于Rest協(xié)議,存儲(chǔ)結(jié)構(gòu)分為兩級(jí),即Rest協(xié)議的OpenAPI提供若干可調(diào)用的方法;每個(gè)方法有帶有自己的調(diào)用參數(shù)列表,以及返回元素列表。Rest協(xié)議的表結(jié)構(gòu)的示意圖如圖6所示,包括3個(gè)表,分別為rest_method 用于存放Rest協(xié)議的OpenAPI包含的方法,包括方法的名稱、描述、 可用性、調(diào)用串、調(diào)用樣例和返回的結(jié)果樣例;rest_input 作為rest_method的輸入,包括輸入的名稱、描述、類型、是否必需、 樣本值、默認(rèn)值和約束條件;rest_response 作為rest_method的返回結(jié)果,包括返回結(jié)果的名稱、描述和類型。對(duì)于Soap協(xié)議的OpenAPI來(lái)說(shuō),每個(gè)OpenAPI都對(duì)應(yīng)一個(gè)Web服務(wù)。服務(wù)首先要具備基本的服務(wù)描述信息,以及該服務(wù)可調(diào)用的服務(wù)操作,每個(gè)服務(wù)操作又包括輸入輸出參數(shù)列表。Soap協(xié)議的表結(jié)構(gòu)的示意圖如圖7所示,包括4個(gè)表,分別為soap_service 用于存儲(chǔ)Soap協(xié)議的OpenAPI所提供的服務(wù),包括服務(wù)的名稱、命名空間、WSDL文檔的URI和WSDL文檔;soap_method 作為soap_service的操作,包括操作的名稱和描述;soap_input 作為soap_method的輸入,包括輸入的名稱、類型、樣本值和默認(rèn)值;soap_output 作為soap_method的輸出,包括輸出的名稱、類型、樣本值和默認(rèn)值。其中,在步驟110和步驟111之后,步驟112之前,為確保獲取到的信息的準(zhǔn)確性, 本發(fā)明實(shí)施例還包括對(duì)獲取到的Ajax協(xié)議的詳細(xì)信息進(jìn)行人工校驗(yàn);對(duì)獲取到的Rest協(xié)議的詳細(xì)信息進(jìn)行人工校驗(yàn)。值得一提的是,當(dāng)獲取到的數(shù)據(jù)信息量較大時(shí),就不再對(duì)每條信息都進(jìn)行一一地校驗(yàn),而是隨機(jī)地對(duì)信息進(jìn)行校驗(yàn)。113 判斷是否加載成功,如果是,執(zhí)行步驟114 ;如果否,流程結(jié)束。114 返回成功信息,流程結(jié)束。其中,在執(zhí)行步驟102或103時(shí),避免出現(xiàn)中文亂碼問(wèn)題,本發(fā)明實(shí)施例在獲取存放OpenAPI詳細(xì)信息的頁(yè)面或存放OpenAPI詳細(xì)信息的WSDL文檔時(shí),采用UTF-8格式,很好地解決了中文亂碼問(wèn)題。綜上所述,本發(fā)明實(shí)施例提供了一種基于hternet的OpenAPI自動(dòng)獲取方法,本發(fā)明能夠以自動(dòng)或半自動(dòng)(手動(dòng)配置)的方式主動(dòng)地抓取OpenAPI數(shù)據(jù),通過(guò)必要的分解和重組,封裝為完整的OpenAPI并添加入庫(kù),從而不斷擴(kuò)大開放能力管理平臺(tái)的OpenAPI數(shù)據(jù)量,為面向OpenAPI的開放能力管理平臺(tái)打好基礎(chǔ);使用本發(fā)明實(shí)施例提供的方法可以將hternet中大量的OpenAPI自動(dòng)加載到數(shù)據(jù)庫(kù)中,而且即使某個(gè)OpenAPI的信息發(fā)生變化,也不需要重新開發(fā),只需要修改配置文件中的正則表達(dá)式就可以解決,為OpenAPI數(shù)據(jù)的獲取提供了便利。本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施例的示意圖,上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種基于hternet的OpenAPI自動(dòng)獲取方法,其特征在于,所述方法包括以下步驟(1)判斷OpenAPI協(xié)議的類型是否是Ajax協(xié)議或Rest協(xié)議,如果是,則執(zhí)行步驟O); 如果否,則為Soap協(xié)議,執(zhí)行步驟(3);(2)通過(guò)OpenAPIHome的URL獲取存放OpenAPI詳細(xì)信息的頁(yè)面,判斷是否獲取到所述存放OpenAPI詳細(xì)信息的頁(yè)面,如果是,執(zhí)行步驟(4);如果否,流程結(jié)束;(3)通過(guò)OpenAPIHome的URL獲取存放OpenAPI詳細(xì)信息的WSDL文檔,判斷是否獲取到所述存放OpenAPI詳細(xì)信息的WSDL文檔,如果是,執(zhí)行步驟(5);如果否,流程結(jié)束;(4)根據(jù)所述存放OpenAPI詳細(xì)信息的頁(yè)面,獲取網(wǎng)頁(yè)源碼,并分析網(wǎng)頁(yè)結(jié)構(gòu),執(zhí)行步驟(6);(5)根據(jù)所述存放OpenAPI詳細(xì)信息的WSDL文檔,解析WSDL文檔,執(zhí)行步驟(7);(6)根據(jù)所述網(wǎng)頁(yè)結(jié)構(gòu)編寫和所述網(wǎng)頁(yè)結(jié)構(gòu)相應(yīng)的正則表達(dá)式,執(zhí)行步驟(8);(7)判斷解析是否成功,如果是,執(zhí)行步驟(9);如果否,流程結(jié)束;(8)判斷OpenAPI協(xié)議類型是否是所述Ajax協(xié)議,如果是,執(zhí)行步驟(10);如果否,則為所述Rest協(xié)議,執(zhí)行步驟(11);(9)獲取所述Soap協(xié)議的詳細(xì)信息,執(zhí)行步驟(12);(10)通過(guò)正則表達(dá)式匹配頁(yè)面源代碼,獲取Ajax協(xié)議的詳細(xì)信息,執(zhí)行步驟(12);(11)通過(guò)正則表達(dá)式匹配頁(yè)面源代碼,獲取Rest協(xié)議的詳細(xì)信息,執(zhí)行步驟(12);(12)根據(jù)所述Ajax協(xié)議、所述Rest協(xié)議和所述Soap協(xié)議將所述Soap協(xié)議的詳細(xì)信息、所述Ajax協(xié)議的詳細(xì)信息和所述Rest協(xié)議的詳細(xì)信息加載到數(shù)據(jù)庫(kù)相應(yīng)的表中;(13)判斷是否加載成功,如果是,執(zhí)行步驟(14);如果否,流程結(jié)束;(14)返回成功信息,流程結(jié)束。
2.根據(jù)權(quán)利要求1所述的基于hternet的OpenAPI自動(dòng)獲取方法,其特征在于,所述方法還包括將包含Ajax協(xié)議或Rest協(xié)議的所述OpenAPI詳細(xì)信息的頁(yè)面讀取至本地文件。
3.根據(jù)權(quán)利要求1所述的基于hternet的OpenAPI自動(dòng)獲取方法,其特征在于,所述方法還包括將包含Soap協(xié)議的所述OpenAPI詳細(xì)信息的WSDL文檔下載到本地。
4.根據(jù)權(quán)利要求1所述的基于hternet的OpenAPI自動(dòng)獲取方法,其特征在于,在步驟(10)和步驟(11)之后,步驟(1 之前,所述方法還包括對(duì)獲取到的所述Ajax協(xié)議的詳細(xì)信息進(jìn)行人工校驗(yàn);對(duì)獲取到的所述Rest協(xié)議的詳細(xì)信息進(jìn)行人工校驗(yàn)。
5.根據(jù)權(quán)利要求1所述的基于^iternet的OpenAPI自動(dòng)獲取方法,其特征在于,在執(zhí)行步驟( 之前,所述方法還包括判斷是否已有所述存放OpenAPI詳細(xì)信息的頁(yè)面,如果是,執(zhí)行步驟(4);如果否,則執(zhí)行步驟O)。
6.根據(jù)權(quán)利要求1所述的基于^iternet的OpenAPI自動(dòng)獲取方法,其特征在于,在執(zhí)行步驟C3)之前,所述方法還包括判斷是否已有所述存放OpenAPI詳細(xì)信息的WSDL文檔,如果是,執(zhí)行步驟(5);如果否,則執(zhí)行步驟(3)。
7.根據(jù)權(quán)利要求1所述的基于hternet的OpenAPI自動(dòng)獲取方法,其特征在于,在執(zhí)行步驟( 或步驟(3)時(shí),所述方法還包括在獲取所述存放OpenAPI詳細(xì)信息的頁(yè)面或所述存放OpenAPI詳細(xì)信息的WSDL文檔時(shí),采用UTF-8格式。
全文摘要
本發(fā)明公開了一種基于Internet的OpenAPI自動(dòng)獲取方法,涉及數(shù)據(jù)加載領(lǐng)域,本發(fā)明能夠以自動(dòng)或半自動(dòng)(手動(dòng)配置)的方式主動(dòng)地抓取OpenAPI數(shù)據(jù),通過(guò)必要的分解和重組,封裝為完整的OpenAPI并添加入庫(kù),從而不斷擴(kuò)大開放能力管理平臺(tái)的OpenAPI數(shù)據(jù)量,為面向OpenAPI的開放能力管理平臺(tái)打好基礎(chǔ);使用本發(fā)明提供的方法可以將Internet中大量的OpenAPI自動(dòng)加載到數(shù)據(jù)庫(kù)中,而且即使某個(gè)OpenAPI的信息發(fā)生變化,也不需要重新開發(fā),只需要修改配置文件中的正則表達(dá)式就可以解決,為OpenAPI數(shù)據(jù)的獲取提供了便利。
文檔編號(hào)G06F9/44GK102193798SQ20111006947
公開日2011年9月21日 申請(qǐng)日期2011年3月22日 優(yōu)先權(quán)日2011年3月22日
發(fā)明者馮志勇, 李亞洲, 胡小草, 陳世展 申請(qǐng)人:天津大學(xué)