本公開涉及網(wǎng)絡(luò)技術(shù),特別涉及一種數(shù)據(jù)獲取方法和裝置。
背景技術(shù):
移動設(shè)備和移動應(yīng)用越來越普及,人們每天都使用移動設(shè)備上安裝的移動應(yīng)用瀏覽資料、查詢數(shù)據(jù),并且移動設(shè)備及移動應(yīng)用的數(shù)量和功能也越來越多,其中一種類型的功能即通過移動應(yīng)用瀏覽網(wǎng)頁中的內(nèi)容。在網(wǎng)頁展示中,有時涉及到跨域請求數(shù)據(jù),比如,a網(wǎng)站和b網(wǎng)站分屬于不同的域(domain),a網(wǎng)站的頁面在顯示時,頁面顯示所需的部分數(shù)據(jù)是存儲在b網(wǎng)站的服務(wù)器,這就需要跨域訪問b網(wǎng)站的服務(wù)器獲取數(shù)據(jù)。相關(guān)技術(shù)中,跨域獲取數(shù)據(jù)的方法也可以有多種,但是當前的方法都存在諸多缺點,致使跨域交互不太理想。例如可以使用jsonp,但是jsonp只支持get請求而不支持post等其他類型的http請求,適用范圍較小,同時又存在安全隱患;又例如還可以使用修改跨域文件的方式,但是該方法只在很少的瀏覽器中支持,而且不夠靈活。
技術(shù)實現(xiàn)要素:
有鑒于此,本公開提供一種數(shù)據(jù)獲取方法和裝置,以提供一種簡單且適用性廣的跨域數(shù)據(jù)獲取方式。
具體地,本公開是通過如下技術(shù)方案實現(xiàn)的:
第一方面,提供一種數(shù)據(jù)獲取方法,所述方法應(yīng)用于移動應(yīng)用,所述移動應(yīng)用包括web頁面和用于加載所述web頁面的頁面容器,所述頁面容器通過native實現(xiàn);所述方法包括:
當檢測到所述web頁面接收到數(shù)據(jù)獲取請求時,通過所述頁面容器向跨域提供所述數(shù)據(jù)的服務(wù)器發(fā)送數(shù)據(jù)請求;
通過所述頁面容器接收所述服務(wù)器反饋的數(shù)據(jù),并將所述數(shù)據(jù)傳輸至所述web頁面加載。
第二方面,提供一種數(shù)據(jù)獲取系統(tǒng),所述系統(tǒng)包括:移動設(shè)備上安裝的移動應(yīng)用和服務(wù)器,所述移動應(yīng)用包括web頁面和用于加載所述web頁面的頁面容器,所述頁面容器通過native實現(xiàn),且所述服務(wù)器跨域提供所述web頁面展示所需要的數(shù)據(jù);
所述移動應(yīng)用,用于當檢測到所述web頁面接收到數(shù)據(jù)獲取請求時,通過所述頁面容器向跨域提供所述數(shù)據(jù)的服務(wù)器發(fā)送數(shù)據(jù)請求;
所述服務(wù)器,用于將所述數(shù)據(jù)反饋至所述移動應(yīng)用的頁面容器,并由所述頁面容器將所述數(shù)據(jù)傳輸至所述web頁面加載。
第三方面,提供一種數(shù)據(jù)獲取裝置,所述裝置應(yīng)用于移動應(yīng)用,所述移動應(yīng)用包括web頁面和用于加載所述web頁面的頁面容器,所述頁面容器通過native實現(xiàn);所述web頁面包括數(shù)據(jù)請求模塊,所述頁面容器包括調(diào)用處理模塊:
所述數(shù)據(jù)請求模塊,用于當檢測到所述web頁面接收到數(shù)據(jù)獲取請求時,通過所述頁面容器的所述調(diào)用處理模塊向跨域提供所述數(shù)據(jù)的服務(wù)器發(fā)送數(shù)據(jù)請求;
所述調(diào)用處理模塊,用于在接收到所述服務(wù)器反饋的數(shù)據(jù)時,將所述數(shù)據(jù)傳輸至所述數(shù)據(jù)請求模塊。
本公開的數(shù)據(jù)獲取方法和裝置,通過借助native提供的客戶端接口向服務(wù)器跨域請求數(shù)據(jù),該方法由于native向服務(wù)器發(fā)送的rpc數(shù)據(jù)請求沒有跨域的概念,所以不會受到相關(guān)跨域方法的限制,適用性更廣,并且實施簡單。
附圖說明
圖1是本公開實施例提供的一種數(shù)據(jù)獲取方法的系統(tǒng)架構(gòu);
圖2是本公開實施例提供的一種數(shù)據(jù)獲取方法的流程圖;
圖3是本公開實施例提供的一種數(shù)據(jù)獲取裝置的結(jié)構(gòu)示意圖。
具體實施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請中的技術(shù)方案,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當屬于本申請保護的范圍。
隨著移動設(shè)備的普及,移動應(yīng)用在數(shù)量和功能的發(fā)展也越來越豐富。移動應(yīng)用存在三種形態(tài):原生應(yīng)用(nativeapp)、web應(yīng)用(webapp)、混合應(yīng)用(hybridapp)。其中,混合應(yīng)用是指web與native相結(jié)合的app,混合應(yīng)用正是取native應(yīng)用和web應(yīng)用各自所長。
混合應(yīng)用(hybridapp)可以使用原生系統(tǒng)程序語言(即native)實現(xiàn)一個具備網(wǎng)頁瀏覽功能的ui(userinterface,用戶界面)容器,所有用戶可見的內(nèi)容均為使用html(hypertextmark-uplanguage,超文本標記語言)、javascript(java腳本)、css(cascadingstylesheet,層疊樣式)等網(wǎng)頁語言開發(fā)的web頁面。因此,本公開中,可以稱為混合應(yīng)用包括兩個部分,一部分是web頁面,另一部分是用于加載所述web頁面的頁面容器,所述頁面容器通過native實現(xiàn)。
用戶在使用混合應(yīng)用時,可能會遇到跨域數(shù)據(jù)請求的場景:例如,用戶在自己移動設(shè)備上安裝的移動應(yīng)用中打開web頁面http://www.a.com/,該頁面屬于網(wǎng)站a。假設(shè)一種情況,用戶在這個頁面上觸發(fā)了一個操作,比如輸入關(guān)鍵詞,點擊“搜索”,那么該web頁面會監(jiān)測上述觸發(fā)操作,則需要獲取對應(yīng)關(guān)鍵詞的搜索結(jié)果數(shù)據(jù),并返回展示在頁面上。在一個例子中,該數(shù)據(jù)可以是由另一個域的服務(wù)器跨域提供的,比如該服務(wù)器是http://www.b.com/的服務(wù)端,屬于網(wǎng)站b,a網(wǎng)站和b網(wǎng)站分屬于不同的域(domain)。那么,移動應(yīng)用就需要跨域獲取頁面展示需要的數(shù)據(jù),即跨域數(shù)據(jù)請求。
本公開的數(shù)據(jù)獲取方法,將描述移動應(yīng)用如何獲取服務(wù)器跨域提供的數(shù)據(jù)。圖1示例了該方法應(yīng)用的系統(tǒng)環(huán)境,并結(jié)合該環(huán)境說明跨域訪問的過程。如圖1所示,該系統(tǒng)中可以包括:移動設(shè)備11、服務(wù)器12和網(wǎng)關(guān)13。
在一個示例性的實施方式中,移動設(shè)備例如可以是智能電話、pda、蜂窩電話、相機電話、智能電話、個人數(shù)字助理、媒體播放器、導(dǎo)航設(shè)備、電子郵件收發(fā)設(shè)備、游戲控制臺、平板計算機、可穿戴設(shè)備或者這些設(shè)備中的任意幾種設(shè)備的組合等。在圖1的例子中,移動設(shè)備可以是用戶的智能手機11。
如圖1所示,智能手機11上安裝的移動應(yīng)用12,可以包括web頁面121和頁面容器122,其中,web頁面121可以是通過網(wǎng)頁程序語言開發(fā)的頁面,而頁面容器122可以是通過native實現(xiàn),例如可以嵌入一個webview組件或其他瀏覽器內(nèi)核組件,可以在這個組件中載入頁面,相當于內(nèi)嵌的瀏覽器。
用戶在移動應(yīng)用中打開web頁面121,并在該頁面中執(zhí)行了數(shù)據(jù)獲取觸發(fā)操作時,例如點擊了頁面中的一個按鈕項,可以觸發(fā)該移動應(yīng)用去獲取服務(wù)器12跨域提供的數(shù)據(jù),以供在頁面中展示。圖1的系統(tǒng)中還可以包括網(wǎng)關(guān)13,該網(wǎng)關(guān)13將在本例子的數(shù)據(jù)獲取方法中,在移動應(yīng)用和服務(wù)器12之間的信息傳輸中起到信息轉(zhuǎn)發(fā)的作用。
在javascript中,有一個很重要的安全性限制,即同源策略,javascript只能訪問與包含它的文檔在同一域下的內(nèi)容,簡單來說就是a域的javascript代碼試圖訪問b域時,這種跨域訪問通常是被禁止的。本例子為了實現(xiàn)跨域的數(shù)據(jù)訪問,提供了一種數(shù)據(jù)獲取方法,圖2示例了圖1中的移動應(yīng)用向服務(wù)器跨域獲取數(shù)據(jù)的流程,如圖2所示,該流程可以包括如下步驟:
在步驟201中,移動應(yīng)用檢測到所述web頁面接收到數(shù)據(jù)獲取請求。
例如,移動應(yīng)用的web頁面代碼部分,在開發(fā)時可以設(shè)定該頁面包括一個功能,即可以檢測頁面是否接收到數(shù)據(jù)獲取請求。當檢測到用戶在web頁面執(zhí)行了數(shù)據(jù)獲取觸發(fā)操作時,表明需要獲取數(shù)據(jù)。在一個例子中,該數(shù)據(jù)獲取觸發(fā)操作可以是用戶點擊了頁面中的某個按鈕項,或者是輸入關(guān)鍵詞,點擊“搜索”,則移動應(yīng)用需要獲取搜索結(jié)果的數(shù)據(jù),以在頁面展示。
在步驟202中,移動應(yīng)用的web頁面可以調(diào)用native封裝的客戶端接口,該客戶端接口調(diào)用了native的rpc接口。
本公開的例子中,移動應(yīng)用中的頁面容器(后續(xù)的描述中將稱為native)可以封裝一個調(diào)用了rpc(remoteprocedurecallprotocol,遠程過程調(diào)用協(xié)議)接口的客戶端接口,當步驟201中的web頁面檢測到數(shù)據(jù)獲取請求時,可以調(diào)用該客戶端接口,以觸發(fā)步驟203的執(zhí)行。
此外,web頁面在調(diào)用客戶端接口時,可以將一些請求數(shù)據(jù)所需要的參數(shù)傳遞至native。例如,所述參數(shù)可以包括接口地址信息和請求參數(shù)信息。其中,接口地址信息可以是與服務(wù)器端提前預(yù)定好的信息,用于表示所述數(shù)據(jù)所在的服務(wù)器的地址、以及所述數(shù)據(jù)在服務(wù)器的調(diào)用接口名稱。例如,web頁面向native傳遞的信息可以包括https://www.alipay.com/a.json?data=123,其中,https://www.alipay.com/a.json即接口地址信息,其中,www.alipay.com是服務(wù)器地址、a.json是數(shù)據(jù)調(diào)用接口名稱,服務(wù)器根據(jù)該接口名稱去存儲數(shù)據(jù)的數(shù)據(jù)庫取對應(yīng)的數(shù)據(jù),該調(diào)用接口名稱可以是在本例子的跨域請求數(shù)據(jù)之前,服務(wù)器預(yù)先進行接口的聲明,以用于外部調(diào)用對應(yīng)的數(shù)據(jù)。“?data=123”即請求參數(shù)信息,用于表示具體取哪些數(shù)據(jù)。服務(wù)器可以根據(jù)該參數(shù)得知具體請求的哪些數(shù)據(jù),從而按照要求下發(fā)數(shù)據(jù)到客戶端。比如,假設(shè)要獲取的數(shù)據(jù)是接口地址信息對應(yīng)的數(shù)據(jù)集合中的前五個數(shù)據(jù),則請求參數(shù)信息可以包括“5”,表明要獲取前五個數(shù)據(jù)。
在步驟203中,native向網(wǎng)關(guān)發(fā)送數(shù)據(jù)請求。
當web頁面調(diào)用了上述native提供的客戶端接口后,將觸發(fā)native向服務(wù)器12發(fā)送rpc數(shù)據(jù)請求,以請求服務(wù)器12跨域提供的數(shù)據(jù)。本步驟中,native可以向網(wǎng)關(guān)13發(fā)送rpc數(shù)據(jù)請求,通過rpc遠程過程調(diào)用,可以像調(diào)用本地服務(wù)一樣調(diào)用服務(wù)器的服務(wù),通常的實現(xiàn)可以包括xml-rpc,json-rpc等。該rpc數(shù)據(jù)請求用于請求服務(wù)器12提供的跨域數(shù)據(jù),該跨域數(shù)據(jù)是移動應(yīng)用的web頁面需要展示的數(shù)據(jù)。此外,該rpc數(shù)據(jù)請求中可以攜帶接口地址信息和請求參數(shù)信息。
在步驟204中,網(wǎng)關(guān)將所述數(shù)據(jù)請求轉(zhuǎn)發(fā)至所述服務(wù)器。
本例子中,網(wǎng)關(guān)13可以預(yù)先拉取服務(wù)器12聲明的接口、配置并發(fā)布,這樣網(wǎng)關(guān)13可以記錄在接收到某個接口的調(diào)用時所需的轉(zhuǎn)發(fā)路徑。網(wǎng)關(guān)在接收到native的rpc數(shù)據(jù)請求后,可以根據(jù)請求中的接口地址信息和請求參數(shù)信息,將請求路由轉(zhuǎn)發(fā)至服務(wù)器12。例如,網(wǎng)關(guān)可以記錄某個服務(wù)器的地址對應(yīng)的轉(zhuǎn)發(fā)路徑,在接收到對于www.alipay.com的服務(wù)器地址時,找到對應(yīng)路徑轉(zhuǎn)發(fā)。
在步驟205中,服務(wù)器將跨域數(shù)據(jù)返回給網(wǎng)關(guān)。
例如,服務(wù)器在接收到網(wǎng)關(guān)轉(zhuǎn)發(fā)的數(shù)據(jù)請求之后,可以根據(jù)請求中的調(diào)用接口名稱獲取對應(yīng)的數(shù)據(jù),處理完成并將數(shù)據(jù)返回給網(wǎng)關(guān),以使得網(wǎng)關(guān)可以將該數(shù)據(jù)反饋至移動設(shè)備中的移動應(yīng)用。
在步驟206中,網(wǎng)關(guān)將數(shù)據(jù)返回給native。
在步驟207中,native將所述跨域數(shù)據(jù)傳輸至web頁面,以在頁面中加載展示該數(shù)據(jù)。
本例子的數(shù)據(jù)獲取方法中,是利用了native向服務(wù)器發(fā)送的rpc數(shù)據(jù)請求沒有跨域的概念的特點,由native向web頁面封裝了一個客戶端接口,該接口調(diào)用了native的rpc接口,當web頁面接收到數(shù)據(jù)獲取觸發(fā)時調(diào)用該接口,就可以相應(yīng)觸發(fā)native向服務(wù)器發(fā)送rpc數(shù)據(jù)請求,以獲取不同域的數(shù)據(jù)。這種
通過借助native提供的客戶端接口向服務(wù)器跨域請求數(shù)據(jù)的方法,由于native向服務(wù)器發(fā)送的rpc請求沒有跨域的概念,所以適用性更廣,并且,該策略的開發(fā)過程簡單,兼容性好;對于服務(wù)器來說,在服務(wù)器發(fā)布接口之后,可以供多個域的移動端頁面來訪問,各個域都可以按照圖2所示的流程跨域請求數(shù)據(jù)即可。
本公開的例子中,用于執(zhí)行該數(shù)據(jù)獲取方法的移動應(yīng)用所在的移動設(shè)備,可以包括以下一個或多個組件:處理組件,存儲器,電源組件,多媒體組件,音頻組件,輸入/輸出(i/o)的接口,傳感器組件,以及通信組件。處理組件通??刂埔苿釉O(shè)備的整體操作,諸如與顯示,電話呼叫,數(shù)據(jù)通信,相機操作和記錄操作相關(guān)聯(lián)的操作。處理組件可以包括一個或多個處理器來執(zhí)行指令,以完成上述的方法的全部或部分步驟。此外,處理組件可以包括一個或多個模塊,便于處理組件和其它組件之間的交互。例如,處理部件可以包括多媒體模塊,以方便多媒體組件和處理組件之間的交互。
存儲器被配置為存儲各種類型的數(shù)據(jù)以支持在移動設(shè)備的操作。這些數(shù)據(jù)的示例包括用于在設(shè)備上操作的任何應(yīng)用程序或方法的指令,聯(lián)系人數(shù)據(jù),電話簿數(shù)據(jù),消息,圖片,視頻等。當存儲器中的指令被處理器執(zhí)行時,可以實現(xiàn)本公開中的數(shù)據(jù)獲取方法。存儲器可以由任何類型的易失性或非易失性存儲設(shè)備或者它們的組合實現(xiàn),如靜態(tài)隨機存取存儲器(sram),電可擦除可編程只讀存儲器(eeprom),可擦除可編程只讀存儲器(eprom),可編程只讀存儲器(prom),只讀存儲器(rom),快閃存儲器,磁盤或光盤。
在示例性實施例中,移動設(shè)備可以被一個或多個應(yīng)用專用集成電路(asic)、數(shù)字信號處理器(dsp)、數(shù)字信號處理設(shè)備(dspd)、可編程邏輯器件(pld)、現(xiàn)場可編程門陣列(fpga)、控制器、微控制器、微處理器或其它電子元件實現(xiàn),用于執(zhí)行上述方法。
在示例性實施例中,還提供了一種包括指令的非臨時性計算機可讀存儲介質(zhì),例如包括指令的存儲器,上述指令可由移動設(shè)備的處理器執(zhí)行以完成本公開的數(shù)據(jù)獲取方法。例如,所述非臨時性計算機可讀存儲介質(zhì)可以是rom、隨機存取存儲器(ram)、cd-rom、磁帶、軟盤和光數(shù)據(jù)存儲設(shè)備等。
為了實現(xiàn)上述的數(shù)據(jù)獲取方法,本公開的例子中還提供了一種數(shù)據(jù)獲取裝置,所述裝置應(yīng)用于移動應(yīng)用,所述移動應(yīng)用包括web頁面和用于加載所述web頁面的頁面容器,所述頁面容器通過native實現(xiàn);所述web頁面包括數(shù)據(jù)請求模塊,所述頁面容器包括調(diào)用處理模塊。
如圖3所示,數(shù)據(jù)請求模塊31,用于當檢測到所述web頁面接收到數(shù)據(jù)獲取請求時,通過所述頁面容器的所述調(diào)用處理模塊向跨域提供所述數(shù)據(jù)的服務(wù)器發(fā)送數(shù)據(jù)請求;
調(diào)用處理模塊32,用于在接收到所述服務(wù)器反饋的數(shù)據(jù)時,將所述數(shù)據(jù)傳輸至所述數(shù)據(jù)請求模塊。
在一個例子中,所述數(shù)據(jù)請求中攜帶:接口地址信息和請求參數(shù)信息,所述接口地址信息用于表示所述數(shù)據(jù)所在的服務(wù)器的地址、以及所述數(shù)據(jù)在服務(wù)器的調(diào)用接口名稱。
在一個例子中,調(diào)用處理模塊32,具體用于將客戶端接口封裝給所述web頁面,所述客戶端接口調(diào)用了所述頁面容器的rpc接口;
所述數(shù)據(jù)請求模塊31,具體用于調(diào)用所述客戶端接口,以觸發(fā)所述調(diào)用處理模塊通過所述rpc接口向所述服務(wù)器發(fā)送rpc數(shù)據(jù)請求。
上述實施例闡明的裝置或模塊,具體可以由計算機芯片或?qū)嶓w實現(xiàn),或者由具有某種功能的產(chǎn)品來實現(xiàn)。為了描述的方便,描述以上裝置時以功能分為各種模塊分別描述。當然,在實施本公開時可以把各模塊的功能在同一個或多個軟件和/或硬件中實現(xiàn)。
以上所述僅為本公開的較佳實施例而已,并不用以限制本公開,凡在本公開的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本公開保護的范圍之內(nèi)。