馮 偉
(淮北職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)技術(shù)系,安徽淮北 235000)
基于REST風(fēng)格的Android系統(tǒng)Web服務(wù)的研究
馮 偉
(淮北職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)技術(shù)系,安徽淮北 235000)
隨著智能移動(dòng)終端的發(fā)展,傳統(tǒng)的Web應(yīng)用程序如何與移動(dòng)設(shè)備進(jìn)行數(shù)據(jù)交互已經(jīng)成為主要研究方向,針對(duì)移動(dòng)設(shè)備的特點(diǎn),REST風(fēng)格的Web服務(wù)與傳統(tǒng)的基于SOAP的Web服務(wù)相比較具有許多優(yōu)點(diǎn),本文結(jié)合Android系統(tǒng)對(duì)REST風(fēng)格的Web服務(wù)進(jìn)行了研究和應(yīng)用。
Android;REST;XML;Web服務(wù)
隨著電子商務(wù)、智能移動(dòng)設(shè)備的快速興起,Android系統(tǒng)憑借其代碼開(kāi)源、使用方便、靈活易用、價(jià)格低廉等諸多特點(diǎn),在3G和無(wú)線網(wǎng)絡(luò)領(lǐng)域持續(xù)走紅。許多傳統(tǒng)的PC平臺(tái)上的Web應(yīng)用也亟待向Android應(yīng)用程序方向轉(zhuǎn)變。但在當(dāng)前面向移動(dòng)設(shè)備的應(yīng)用中,各個(gè)Web服務(wù)所使用的語(yǔ)言和開(kāi)發(fā)平臺(tái)各有不同,我們可以采用傳統(tǒng)的基于SOAP的Web服務(wù)來(lái)實(shí)現(xiàn)數(shù)據(jù)交互,但這種方式的服務(wù)針對(duì)不同的平臺(tái)定制自己的接口,隨著服務(wù)的不斷增加,接口的數(shù)量和類(lèi)型也在急速的擴(kuò)大,這將使Web服務(wù)的規(guī)模變得越來(lái)越龐大,對(duì)系統(tǒng)的性能產(chǎn)生很大的影響。而REST風(fēng)格的Web服務(wù)則可以有效的避免定義接口的復(fù)雜性,只需要使用被廣泛使用的HTTP標(biāo)準(zhǔn)協(xié)議以及URI和XML規(guī)范進(jìn)行即可實(shí)現(xiàn)通信,從而簡(jiǎn)化了開(kāi)發(fā)的復(fù)雜性,提高了軟件的開(kāi)發(fā)效率。本文對(duì)REST風(fēng)格服務(wù)的調(diào)用、XML文檔的解析進(jìn)行研究,并在此基礎(chǔ)上設(shè)計(jì)和實(shí)現(xiàn)了Android平臺(tái)下的社區(qū)醫(yī)療衛(wèi)生系統(tǒng)的訪問(wèn)。
REST(presentational State Transfer,表述性狀態(tài)轉(zhuǎn)移)的概念最早由美國(guó)計(jì)算機(jī)科學(xué)家Roy Fielding博士于2000年在其博士論文中提出的,隨后又由Leonard Richardson進(jìn)行了進(jìn)一步研究,并提出了基于REST服務(wù)的新的面向資源的設(shè)計(jì)方法。REST是基于Java的一種輕量級(jí)Web服務(wù)架構(gòu)風(fēng)格,它與傳統(tǒng)的SOAP相比,具有靈活性高、支持協(xié)議簡(jiǎn)單、響應(yīng)速度快等特點(diǎn),越來(lái)越受到廣大開(kāi)發(fā)人員的青睞。
REST不是Web服務(wù)標(biāo)準(zhǔn),也不是一種軟件架構(gòu),而是一種設(shè)計(jì)風(fēng)格,是對(duì)Web體系結(jié)構(gòu)設(shè)計(jì)原則的抽象和描述。REST通?;贖TTP,URI、XML以及HTML這些現(xiàn)有的廣泛流行的協(xié)議和標(biāo)準(zhǔn)之上的。服務(wù)資源有URI來(lái)指定;通過(guò)HTTP協(xié)議提供的Post、Get、Put和Delete方法實(shí)現(xiàn)對(duì)資源的創(chuàng)建、獲取、修改和刪除操作;通過(guò)XML或HTML來(lái)描述資源,也可以是任何其他的格式。REST風(fēng)格的Web服務(wù)于傳統(tǒng)的基于SOAP的Web服務(wù)相比較具有以下區(qū)別:
表1 REST風(fēng)格的Web服務(wù)與基于SOAP的Web服務(wù)對(duì)比
從表1可以看出,與傳統(tǒng)的基于SOAP的Web服務(wù)相比較,REST具有接口統(tǒng)一、面向資源、文檔格式豐富、通信協(xié)議簡(jiǎn)單、冗余信息較少,可被搜索引擎直接搜索等優(yōu)點(diǎn)。目前,眾多大型網(wǎng)絡(luò)運(yùn)營(yíng)商均開(kāi)始將REST API提供給用戶,我們只要通過(guò)在移動(dòng)客戶端編程即可訪問(wèn)這些API,從而方便的訪問(wèn)網(wǎng)站所提供的服務(wù)。
Android是Google公司于2007年11月5日宣布的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng),該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件。其本身是一套軟件堆疊(Software Stack),自底向上分別包括Linux內(nèi)核層、Android系統(tǒng)運(yùn)行庫(kù)和其他庫(kù)層、應(yīng)用框架層和應(yīng)用程序?qū)铀牟糠帧?/p>
2.1 Linux內(nèi)核層
Android平臺(tái)使用Linux2.6版本的內(nèi)核,實(shí)現(xiàn)安全管理、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議和驅(qū)動(dòng)模型等系統(tǒng)服務(wù),Linux核心在硬件層和軟件層之間建立了一個(gè)抽象層,使得Android平臺(tái)的硬件細(xì)節(jié)對(duì)開(kāi)發(fā)人員透明化。主要包括顯示驅(qū)動(dòng)、Flash內(nèi)存驅(qū)動(dòng)、照相機(jī)驅(qū)動(dòng)、音頻驅(qū)動(dòng)、WIFI驅(qū)動(dòng)、鍵盤(pán)驅(qū)動(dòng)、藍(lán)牙驅(qū)動(dòng)、Binder IPC驅(qū)動(dòng)和能源管理。
2.2 Android系統(tǒng)運(yùn)行庫(kù)和其他庫(kù)層
Android包含了一個(gè)可供不同組件調(diào)用的C/C++庫(kù),這些功能模塊通過(guò)應(yīng)用程序框架暴露給開(kāi)發(fā)者。核心庫(kù)主要有:系統(tǒng)C庫(kù)、媒體庫(kù)(Media Libraries)、OpenGL ES、Free Type、嵌入式數(shù)據(jù)庫(kù)引擎SQLite、SSL、WebKit等
2.3 應(yīng)用框架層
Android提供了開(kāi)發(fā)應(yīng)用程序的一系列框架。如:Activity Manager、Window Manager、Content Providers、View Providers、Package Manager、Telephony Manager、Resource Manager、Location Manager、Notification Manager。開(kāi)發(fā)人員可以使用框架提供的API來(lái)實(shí)現(xiàn)自己的功能。
2.4 應(yīng)用程序?qū)?/p>
Android平臺(tái)搭載了一系列的核心應(yīng)用程序,如E-mail客戶端、日歷、瀏覽器、電話薄等、這些應(yīng)用程序都是Java語(yǔ)言開(kāi)發(fā)的。
REST風(fēng)格是對(duì)Web體系結(jié)構(gòu)設(shè)計(jì)原則的抽象和描述,可以使用不同的技術(shù)實(shí)現(xiàn)這種設(shè)計(jì)理念,其中最為廣泛適用的是HTTP協(xié)議,它是一種面向資源的協(xié)議,不僅能夠利用該協(xié)議進(jìn)行網(wǎng)絡(luò)資源唯一定位,而且還可以進(jìn)行對(duì)資源的操作。這也是REST風(fēng)格中最為重要的理念。
3.1 HTTP資源請(qǐng)求
在基于REST風(fēng)格的Web服務(wù)中,一切資源都有其唯一的URI,每個(gè)資源對(duì)應(yīng)唯一的資源標(biāo)示符,通過(guò)HttpURLConnection連接器接口對(duì)資源進(jìn)行訪問(wèn),使用HTTP的GET、POST、PUT和DELEIT 4個(gè)動(dòng)作作為資源的請(qǐng)求方式。以下給出了基于REST風(fēng)格的Web服務(wù)進(jìn)行HTTP資源請(qǐng)求的參考代碼:
以上代碼采用的是HTTP協(xié)議中的“PUT”請(qǐng)求方式,其他請(qǐng)求方式在這里就不做描述,均與此方式基本一致。要注意的是用以標(biāo)識(shí)資源的URI最好是邏輯地址,而不是物理地址,如:http://www.store.com/product/12345,這樣可以保證對(duì)服務(wù)端的資源修改不影響客戶端的調(diào)用。
3.2 XML文檔解析
XML(Extensible Markup Language,即可擴(kuò)展標(biāo)記語(yǔ)言)是數(shù)據(jù)描述的標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言,它不僅可以用于某平臺(tái)內(nèi)部的數(shù)據(jù)描述,更適合于Internet上跨平臺(tái)數(shù)據(jù)交換,它具有系統(tǒng)無(wú)關(guān)性、平臺(tái)無(wú)關(guān)性、語(yǔ)言無(wú)關(guān)性等特點(diǎn),為不同平臺(tái)間的數(shù)據(jù)交換提供了方便。Android平臺(tái)上開(kāi)發(fā)的移動(dòng)應(yīng)用程序訪問(wèn)Web服務(wù)也采用了XML的的數(shù)據(jù)描述。
當(dāng)Android客戶端向服務(wù)端申請(qǐng)服務(wù)后,服務(wù)端會(huì)返回響應(yīng)的消息,響應(yīng)的消息采用XML進(jìn)行描述一個(gè)無(wú)結(jié)構(gòu)的字符串序列,不能被客戶端直接識(shí)別,所以必須對(duì)接收的消息進(jìn)行解析,使之轉(zhuǎn)換為滿足XML語(yǔ)法的結(jié)構(gòu)化組件。在Android系統(tǒng)中,對(duì)XML文檔的解析可以使用DOM、XML pull和SAX三種技術(shù)。目前,Android SDK為XML文檔的讀寫(xiě)提供了五個(gè)包:org.w3c.dom、org.xml、org.xmlpull.v1、javax.xml、javax.xml.parsers。以DOM技術(shù)為例,可以利用DOM工廠方法建立DOM解析器,并分層逐個(gè)獲取節(jié)點(diǎn)及節(jié)點(diǎn),因篇幅限制,解析過(guò)程就不再詳述。
本文研究了基于REST風(fēng)格的Android系統(tǒng)Web服務(wù),并與傳統(tǒng)的基于SOAP的Web服務(wù)進(jìn)行了比較,顯示出了REST風(fēng)格的輕便性、靈活性和易使用等優(yōu)勢(shì),并分析了Android平臺(tái)的架構(gòu)對(duì)REST的支持、最后對(duì)如何在Android系統(tǒng)中構(gòu)建REST風(fēng)格的Web服務(wù)進(jìn)行研究。通過(guò)使用REST風(fēng)格的Web服務(wù),統(tǒng)一了接口、提高了移動(dòng)程序的開(kāi)發(fā)效率、降低了開(kāi)發(fā)成本,具有良好的應(yīng)用前景。
[1]黃錦川.REST風(fēng)格服務(wù)在Android平臺(tái)上的研究與應(yīng)用[D].成都:西南交通大學(xué),2010.
[2]李瑞花.基于Android的XML解析技術(shù)的分析[J].計(jì)算機(jī)時(shí)代,2010(12).
[3]黃錦川,金煒東.基于Android平臺(tái)Web服務(wù)的應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用,2010(11).
[4]微軟公司.XML Web Service開(kāi)發(fā)[M].北京:高等教育出版社,2004.
TP393.09
A
1671-8275(2012)03-0087-02
2012-04-12
本文系安徽省自然科學(xué)基金項(xiàng)目“基于數(shù)據(jù)融合的動(dòng)態(tài)目標(biāo)檢測(cè)技術(shù)的研究”(項(xiàng)目編號(hào):KJ2012Z354),淮北職業(yè)技術(shù)學(xué)院科研項(xiàng)目“基于.NET的SOA在社區(qū)醫(yī)療信息系統(tǒng)中的研究與應(yīng)用”(項(xiàng)目編號(hào):2012-A-25)階段性研究成果。
馮偉(1978-),男,安徽蕭縣人,淮北職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)技術(shù)系講師,碩士。研究方向:軟件工程、.NET技術(shù)、數(shù)據(jù)庫(kù)應(yīng)用技術(shù)。
孟云玲