張冠南,王純,王晶
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100876;2 東信北郵信息技術(shù)有限公司,北京 100191)
中國(guó)移動(dòng)建設(shè)了多種形式的能力開(kāi)放網(wǎng)關(guān),但是相比現(xiàn)有的互聯(lián)網(wǎng)應(yīng)用接口的簡(jiǎn)潔模式,中國(guó)移動(dòng)提供的平臺(tái)接口往往參數(shù)眾多,調(diào)用復(fù)雜,對(duì)于非電信技術(shù)背景的開(kāi)發(fā)者,調(diào)用相關(guān)電信能力的集成難度大,造成了電信能力雖然開(kāi)放,但推廣效果不佳的尷尬現(xiàn)狀。
能力開(kāi)放平臺(tái)以提供業(yè)務(wù)能力開(kāi)放,實(shí)現(xiàn)與能力開(kāi)放相關(guān)的管理運(yùn)營(yíng)為主要功能,從功能、流程、接口、數(shù)據(jù)、組網(wǎng)、系統(tǒng)要求等方面,定義能力開(kāi)放引擎規(guī)范,向各應(yīng)用開(kāi)發(fā)者提供更豐富的業(yè)務(wù)能力開(kāi)放、調(diào)用和融合手段,并實(shí)現(xiàn)業(yè)務(wù)網(wǎng)中的通用化的接入控制、管理以及計(jì)費(fèi)功能[1]。
LBMP是由遼寧移動(dòng)率先提出建立位置服務(wù)的統(tǒng)一接入平臺(tái),是一套可以整合、管理位置服務(wù)各相關(guān)系統(tǒng)的平臺(tái),LBMP通過(guò)提供一組GV接口來(lái)開(kāi)放其GIS、定位等能力[2]。GIS是以采集、存儲(chǔ)、管理、分析、描述和應(yīng)用整個(gè)或部分地球表面(包括大氣層在內(nèi))與空間和地理分布有關(guān)的數(shù)據(jù)的計(jì)算機(jī)系統(tǒng)[3]。
REST是一種針對(duì)網(wǎng)絡(luò)應(yīng)用的設(shè)計(jì)和開(kāi)發(fā)方式,REST提供了一組架構(gòu)約束,當(dāng)作為一個(gè)整體來(lái)應(yīng)用時(shí),強(qiáng)調(diào)組件交互的可伸縮性、接口的通用性、組件的獨(dú)立部署、以及用來(lái)減少交互延遲、增強(qiáng)安全性、封裝遺留系統(tǒng)的中間組件[4]。
REST提出以下設(shè)計(jì)準(zhǔn)則,網(wǎng)絡(luò)上的所有事物都被抽象為資源;每個(gè)資源對(duì)應(yīng)一個(gè)唯一的資源標(biāo)識(shí);通過(guò)通用的連接器接口對(duì)資源進(jìn)行操作;對(duì)資源的各種操作不會(huì)改變資源標(biāo)識(shí);所有的操作都是無(wú)狀態(tài)的[5]。
本文通過(guò)分析中國(guó)移動(dòng)LBMP提供的GV接口,將其分類(lèi)、整合,提煉出一組符合REST風(fēng)格的GIS接口,并將這組接口通過(guò)中國(guó)移動(dòng)能力開(kāi)放平臺(tái)開(kāi)放給基于GIS能力的應(yīng)用開(kāi)發(fā)者。
在LBMP上可以承載多個(gè)業(yè)務(wù)系統(tǒng),多業(yè)務(wù)系統(tǒng)共用一個(gè)GIS、定位平臺(tái),LBMP可以實(shí)現(xiàn)承載和業(yè)務(wù)相分離,便于業(yè)務(wù)的管理和發(fā)展,其組網(wǎng)結(jié)構(gòu)如圖1所示。

圖1 LBMP組網(wǎng)結(jié)構(gòu)圖
在圖1中,全網(wǎng)行業(yè)應(yīng)用平臺(tái)/業(yè)務(wù)子系統(tǒng)通過(guò)GV接口接入LBMP平臺(tái);LBMP平臺(tái)通過(guò)Li接口與行業(yè)GIS相連,調(diào)用GIS功能;LBMP平臺(tái)通過(guò)Le接口與各省LSP平臺(tái)相連,實(shí)現(xiàn)定位功能。OMP作為業(yè)務(wù)系統(tǒng)接入LBMP的接口為GV接口,通過(guò)千兆以太網(wǎng)相連,實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)到LBMP上訂購(gòu)關(guān)系鑒權(quán)、用戶鑒權(quán),位置信息查詢等功能,從而實(shí)現(xiàn)各省位置能力的開(kāi)放。
LBMP提供的GV接口采用HTTP協(xié)議,GV請(qǐng)求和應(yīng)答消息都由兩部分組成:消息頭(header或context)和消息體(body),消息頭包含了一些認(rèn)證信息等,消息體中則是請(qǐng)求的具體內(nèi)容[6]。OMP通過(guò)HTTP POST方式發(fā)送地理信息請(qǐng)求到LBMP。請(qǐng)求中必須包含實(shí)體頭Content-length,請(qǐng)求的消息體是XML 格式的請(qǐng)求消息,其長(zhǎng)度由Content-length指定。所有GV服務(wù)請(qǐng)求都被送到一個(gè)特定的URL,下面是一個(gè)URL 的例子:
http://host:port/GvQueryService
LBMP系統(tǒng)對(duì)請(qǐng)求進(jìn)行響應(yīng)并回送HTTP應(yīng)答消息。如果SP的服務(wù)請(qǐng)求不在本協(xié)議規(guī)定之中,LBMP將通過(guò)HTTP ‘404’錯(cuò)誤返回一個(gè)通用錯(cuò)誤消息。
因?yàn)樗械腉V服務(wù)請(qǐng)求都會(huì)被送到同一個(gè)URL,所以不同類(lèi)型的請(qǐng)求只能通過(guò)HTTP的消息體進(jìn)行判斷。LBMP的GV接口是通過(guò)請(qǐng)求消息體的根節(jié)點(diǎn)Gis_Req的子節(jié)點(diǎn)來(lái)判斷請(qǐng)求服務(wù)類(lèi)型。
消息的根節(jié)點(diǎn)
REST 從資源的角度來(lái)觀察整個(gè)網(wǎng)絡(luò),分布在各處的資源由URI確定,而客戶端的應(yīng)用通過(guò)URI來(lái)獲取資源的表征。獲得這些表征致使這些應(yīng)用程序轉(zhuǎn)變了其狀態(tài)。隨著不斷獲取資源的表征,客戶端應(yīng)用不斷地在轉(zhuǎn)變著其狀態(tài)參照REST提出的設(shè)計(jì)概念和準(zhǔn)則,我們可以對(duì)GIS接口進(jìn)行如下設(shè)計(jì):
2.2.1 網(wǎng)絡(luò)上的所有事物都被抽象為資源
因?yàn)镚V接口返回的GIS數(shù)據(jù)為符合條件的地圖信息,可能是一張地圖,也可能是某塊地圖的一些數(shù)據(jù)信息,比如面積、長(zhǎng)度等,而地圖等都可以看成一種資源,因此我們可以對(duì)GV接口提供的服務(wù)進(jìn)行分類(lèi)、整合,然后將其劃分為一組簡(jiǎn)單、獨(dú)立的資源,資源包括:地圖圖片、兩點(diǎn)線路、關(guān)鍵字地址和圓形面積。
2.2.2 每個(gè)資源對(duì)應(yīng)一個(gè)唯一的資源標(biāo)識(shí)
對(duì)于網(wǎng)絡(luò)應(yīng)用來(lái)說(shuō),資源標(biāo)識(shí)就是URI,URI構(gòu)成了一個(gè)全局命名空間,使用URI標(biāo)識(shí)關(guān)鍵資源意味著它們獲得了一個(gè)唯一、全局的ID,因此我們?yōu)槊總€(gè)資源設(shè)計(jì)一個(gè)URI,資源和URI對(duì)應(yīng)如表1所示。
2.2.3 通過(guò)通用的連接器接口對(duì)資源進(jìn)行操作
在網(wǎng)絡(luò)應(yīng)用中,通用的連接器接口就是HTTP,通過(guò)表2對(duì)于GIS資源的URI設(shè)計(jì),進(jìn)而我們能夠使用HTTP的基本方法對(duì)資源進(jìn)行操作。一般符合REST風(fēng)格的接口應(yīng)該支持HTTP的GET、POST、PUT、DELETE等多種方法,每種方法對(duì)應(yīng)著對(duì)資源的一種操作,操作方式符合方法在HTTP協(xié)議中的含義,見(jiàn)表2。

表1 資源URI對(duì)應(yīng)表

表2 HTTP方法含義表
在GIS能力開(kāi)放中,因?yàn)樗械馁Y源能力調(diào)用者是無(wú)權(quán)修改的,只能去獲取資源,因此在我們可以使所有的URI只支持GET請(qǐng)求,對(duì)于其他的操作應(yīng)該返回“方法不支持”等信息,在GET請(qǐng)求中我們也可以在URI后面添加資源需要的參數(shù)。
2.2.4 對(duì)資源的各種操作不會(huì)改變資源標(biāo)識(shí)
即我們?cè)趯?duì)資源進(jìn)行GET、PUT和DELETE等操作時(shí),不會(huì)改變資源的標(biāo)識(shí)URI,在GIS能力開(kāi)放中,我們要確保所有資源的GET操作不會(huì)修改資源的URI,而只是返回資源。
2.2.5 所有的操作都是無(wú)狀態(tài)的
無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力,同一個(gè)會(huì)話的連續(xù)兩個(gè)請(qǐng)求互相獨(dú)立,REST要求我們必須實(shí)現(xiàn)無(wú)狀態(tài)的接口,即服務(wù)器不保存客戶端的狀態(tài),客戶端每次發(fā)送請(qǐng)求必須包含這次請(qǐng)求所需要的全部參數(shù)。
參照對(duì)GIS能力REST風(fēng)格接口的設(shè)計(jì)思路,我們可以使用RESTLET框架對(duì)其進(jìn)行實(shí)現(xiàn)。RESTLET項(xiàng)目為“建立REST概念與Java類(lèi)之間的映射”提供了一個(gè)輕量級(jí)而全面的框架。RESTLET在術(shù)語(yǔ)上參照了Roy Fielding博士論文在講解REST時(shí)采用的術(shù)語(yǔ),RESTLET增加了一些專門(mén)的類(lèi)(如Application、Filter、Finder、Router和Route),用以簡(jiǎn)化RESTLET的彼此結(jié)合,以及簡(jiǎn)化把收到的請(qǐng)求映射為處理它們的資源。
SPRING MVC支持REST 風(fēng)格的Web 服務(wù)的定義,SPRING同時(shí)也定義了RESTTemplate以配合Web 服務(wù)的調(diào)用[7],我們可以使用RESTLET框架結(jié)合SPRING完成URI和資源的映射,完成能力調(diào)用請(qǐng)求的統(tǒng)一接入,然后獲取請(qǐng)求中的參數(shù),封裝成XML發(fā)給資源對(duì)應(yīng)的GV接口,在此過(guò)程中,我們可以使用另一個(gè)開(kāi)源框架——JAXB框架。
JAXB(Java Architecture for XML Binding)是一個(gè)業(yè)界的標(biāo)準(zhǔn),是一項(xiàng)可以根據(jù)XML Schema產(chǎn)生Java類(lèi)的技術(shù)。該過(guò)程中,JAXB也提供了將XML實(shí)例文檔反向生成Java對(duì)象樹(shù)的方法,并能將Java對(duì)象樹(shù)的內(nèi)容重新寫(xiě)到XML實(shí)例文檔。從另一方面來(lái)講,JAXB提供了快速而簡(jiǎn)便的方法將XML模式綁定到Java表示,從而使得Java開(kāi)發(fā)者在Java應(yīng)用程序中能方便地結(jié)合XML數(shù)據(jù)和處理函數(shù)。
實(shí)現(xiàn)的整體結(jié)構(gòu)圖如圖2所示。
本文基于中國(guó)移動(dòng)OMP平臺(tái)及其LBMP,設(shè)計(jì)了一套R(shí)EST風(fēng)格的能力調(diào)用接口,并且使用開(kāi)源框架RESTLET、SPRING和JAXB等進(jìn)行了實(shí)現(xiàn),這些接口易于理解、參數(shù)簡(jiǎn)單,能夠極大地簡(jiǎn)化基于GIS能力的應(yīng)用開(kāi)發(fā)者的開(kāi)發(fā)過(guò)程,同時(shí)因?yàn)镽EST具有無(wú)狀態(tài)和緩存支持等優(yōu)點(diǎn),可以提高服務(wù)器的擴(kuò)展性,并且在軟件技術(shù)演進(jìn)中具備長(zhǎng)期的兼容性。

圖2 REST風(fēng)格GIS接口實(shí)現(xiàn)圖
[1] 中國(guó)移動(dòng)通信集團(tuán),能力開(kāi)放引擎總體技術(shù)要求[Z]. 2010-01-01.
[2] 中國(guó)移動(dòng)通信集團(tuán),位置服務(wù)基礎(chǔ)業(yè)務(wù)管理平臺(tái)(LBMP)設(shè)備規(guī)范[Z]. 2010-01-01.
[3] Zhang H, Liao J X.Extensible platform for location based services[J].IEE Mobility Conference 2005,. 2005,12:106.
[4] Fielding R T著. 李錕,廖志剛,譯. Architectural Styles andthe Design of Network-based Software Architectures[M]. University of California, 2000.
[5] 鄭侃,王純.IMS中基于REST的wIMS中間件平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].電信工程技術(shù)與標(biāo)準(zhǔn)化, 2010,8:77-82.
[6] 中國(guó)移動(dòng)通信集團(tuán).位置業(yè)務(wù)GV接口規(guī)范[Z]. 2010-01-01發(fā)布.
[7] 丁振凡.Spring REST風(fēng)格Web服務(wù)的Json消息封裝及解析研究[J].智能計(jì)算機(jī)與應(yīng)用, 2012,4:16-17.