国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

RESTful服務(wù)及跨平臺(tái)移動(dòng)應(yīng)用

2015-04-30 06:16胡天云林慶
軟件導(dǎo)刊 2015年4期

胡天云 林慶

摘要摘要:目前,智能移動(dòng)平臺(tái)呈現(xiàn)出多樣化特征,其應(yīng)用軟件之間互不兼容,造成移動(dòng)應(yīng)用跨平臺(tái)開(kāi)發(fā)成本高、周期長(zhǎng)等問(wèn)題。在分析REST架構(gòu)風(fēng)格及當(dāng)前Hybrid移動(dòng)應(yīng)用的基礎(chǔ)上,提出了適合瀏覽器交互的REST式服務(wù),以及基于Ajax應(yīng)用和PhoneGap框架開(kāi)發(fā)客戶端的移動(dòng)應(yīng)用跨平臺(tái)解決方案,為快速構(gòu)建移動(dòng)信息化平臺(tái)提供了一種思路。

關(guān)鍵詞關(guān)鍵詞:Hybrid;REST;Ajax;跨平臺(tái)移動(dòng)應(yīng)用;PhoneGap

DOIDOI:10.11907/rjdk.1431044

中圖分類號(hào):TP319

文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2015)004008703

0引言

隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)和互聯(lián)網(wǎng)產(chǎn)業(yè)的快速發(fā)展,以及智能設(shè)備終端的逐漸普及,互聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)商也越來(lái)越重視軟件產(chǎn)品向移動(dòng)設(shè)備的轉(zhuǎn)移。然而,智能設(shè)備終端操作系統(tǒng)的多樣化,以及智能設(shè)備的碎片化,造成各平臺(tái)設(shè)備的軟件之間互不兼容。移動(dòng)智能終端使用較多的操作系統(tǒng)有Android、IOS、Windows Phone、BlackBerry等,但它們之間的應(yīng)用軟件并不兼容。并且,Android設(shè)備的型號(hào)、品牌、版本和屏幕尺寸呈現(xiàn)出嚴(yán)重的碎片化。原生移動(dòng)應(yīng)用的開(kāi)發(fā)、測(cè)試周期長(zhǎng),開(kāi)發(fā)成本高,而且跨平臺(tái)開(kāi)發(fā)使得這一問(wèn)題更為突出。移動(dòng)平臺(tái)軟件的快速開(kāi)發(fā)需求與移動(dòng)平臺(tái)的多樣化特征構(gòu)成了矛盾。

針對(duì)移動(dòng)應(yīng)用跨平臺(tái)開(kāi)發(fā)的時(shí)間、成本及可擴(kuò)展性等問(wèn)題,本文提出采用REST架構(gòu)風(fēng)格的Web Service作為服務(wù)器,Ajax應(yīng)用+PhoneGap[1]框架開(kāi)發(fā)移動(dòng)客戶端的跨平臺(tái)移動(dòng)應(yīng)用軟件開(kāi)發(fā)方案。服務(wù)器使用可伸縮、簡(jiǎn)單普適的RESTful Web服務(wù),回避了客戶端的平臺(tái)相關(guān)性;移動(dòng)客戶端利用適合REST風(fēng)格及ROA原則的Ajax框架,整合Hybrid模式開(kāi)發(fā)框架PhoneGap,實(shí)現(xiàn)移動(dòng)軟件的跨平臺(tái)快速開(kāi)發(fā)。

1REST式Web服務(wù)概述

REST是Roy Fielding博士在2000年提出的一種分布式應(yīng)用架構(gòu),與以往DO(分布式對(duì)象)、RPC(遠(yuǎn)程過(guò)程調(diào)用)等分布式架構(gòu)相比,它符合一組通用的ROA設(shè)計(jì)原則:可尋址性、無(wú)狀態(tài)性、連通性和統(tǒng)一接口。隨著Ajax、移動(dòng)互聯(lián)網(wǎng)等的興起,這種分布式的、輕量級(jí)的、可擴(kuò)展的、與平臺(tái)和編程語(yǔ)言無(wú)關(guān)的、具普適性的Web服務(wù)體系架構(gòu),受到越來(lái)越多的關(guān)注。

REST架構(gòu)風(fēng)格是HTTP1.1協(xié)議的設(shè)計(jì)原則[2]。與傳統(tǒng)Web Services(SOAP)相比,REST更適合作為移動(dòng)混合應(yīng)用服務(wù)器,因?yàn)樗哂幸韵聝?yōu)點(diǎn):

(1)輕量級(jí)、高效性。無(wú)需引入SOAP/WSDL,更適合基于瀏覽器的交互,能更高效地使用HTTP協(xié)議。

(2)靈活易用性。無(wú)需通過(guò)復(fù)雜的SOAP信封通信,只需請(qǐng)求資源的網(wǎng)址和請(qǐng)求數(shù)據(jù)就可輕松使用REST服務(wù)??梢栽诰幊陶Z(yǔ)言中輕易實(shí)現(xiàn),尤其是JavaScript瀏覽器語(yǔ)言。

(3)平臺(tái)無(wú)關(guān)性。編程語(yǔ)言只要支持HTTP協(xié)議就可以應(yīng)用REST服務(wù),降低服務(wù)器與客戶端的耦合性。這種特性適合客戶端主要編程語(yǔ)言JavaScript。

(4)無(wú)狀態(tài)性與可擴(kuò)展性。每個(gè)資源都有自己的URI,服務(wù)器的可能狀態(tài)也是資源,各HTTP請(qǐng)求都是獨(dú)立的,這種模式可提高服務(wù)的可擴(kuò)展性。

(5)緩存支持。通過(guò)標(biāo)記響應(yīng)中的數(shù)據(jù)賦予客戶端數(shù)據(jù)緩存功能,減少帶寬使用,提高數(shù)據(jù)響應(yīng)速度,更適合移動(dòng)應(yīng)用。

這種服務(wù)器具有與客戶端低耦合、簡(jiǎn)單普適等特性,適合軟硬件環(huán)境復(fù)雜的移動(dòng)設(shè)備軟件跨平臺(tái)開(kāi)發(fā),促進(jìn)了移動(dòng)客戶端跨平臺(tái)開(kāi)發(fā)的實(shí)現(xiàn)。

2PhoneGap與Ajax跨平臺(tái)應(yīng)用

作為Web服務(wù)客戶端,PhoneGap應(yīng)用主要使用Web技術(shù)。JavaScript腳本語(yǔ)言是重要的瀏覽器編程語(yǔ)言,而Ajax是JavaScript的典型應(yīng)用。

2.1跨平臺(tái)框架PhoneGap原理與應(yīng)用

Hybrid App(混合應(yīng)用)是目前移動(dòng)應(yīng)用的一種應(yīng)用模式,主要開(kāi)發(fā)框架有PhoneGap、Titanium、Sencha Touch、AppCan等。PhoneGap是Hybrid App的一種開(kāi)源開(kāi)發(fā)框架。程序編碼使用原生程序語(yǔ)言和網(wǎng)頁(yè)語(yǔ)言,應(yīng)用中同時(shí)有原生視圖和Web視圖。它擁有Web App的特點(diǎn):開(kāi)發(fā)成本低、實(shí)時(shí)更新、可集成和擴(kuò)展等,而且使用方式也和Native App一致。

中間件提供應(yīng)用與平臺(tái)之間的通信服務(wù),這些服務(wù)有標(biāo)準(zhǔn)的接口和協(xié)議,并根據(jù)不同的操作系統(tǒng)和硬件平臺(tái)有各自的實(shí)現(xiàn)方式[3]。PhoneGap是第二代移動(dòng)中間件,支持Hybrid開(kāi)發(fā)模式和自定義插件擴(kuò)展,使用移動(dòng)設(shè)備自帶瀏覽器引擎,以HTML5為主要應(yīng)用開(kāi)發(fā)語(yǔ)言。

圖1所示為PhoneGap開(kāi)發(fā)框架原理。PhoneGap應(yīng)用基于HTML、JS、CSS等Web技術(shù),將一些系統(tǒng)底層接口封裝為統(tǒng)一的JavaScript API,供應(yīng)用程序開(kāi)發(fā)者通過(guò)JS調(diào)用。使用這些系統(tǒng)級(jí)的API,開(kāi)發(fā)者能像原生應(yīng)用一樣調(diào)用GPS、網(wǎng)絡(luò)、攝像頭、重力感應(yīng)等智能設(shè)備的核心功能。為了豐富移動(dòng)應(yīng)用功能,開(kāi)發(fā)者還可以開(kāi)發(fā)插件或使用已有插件。PhoneGap擴(kuò)展和封裝了不同平臺(tái)的WebView組件,從而通過(guò)手機(jī)瀏覽器就可訪問(wèn)本地接口。使用PhoneGap編寫(xiě)的程序會(huì)被打包并安裝到手機(jī)上,在應(yīng)用運(yùn)行時(shí)載入到設(shè)備內(nèi)置瀏覽器中解析執(zhí)行。

PhoneGap作為一種重要的跨平臺(tái)開(kāi)源開(kāi)發(fā)框架,以其良好的兼容性、標(biāo)準(zhǔn)化、多平臺(tái)和無(wú)限擴(kuò)展功能的豐富插件,解決了跨平臺(tái)開(kāi)發(fā)成本高、周期長(zhǎng)等問(wèn)題,成為主流移動(dòng)混合應(yīng)用開(kāi)發(fā)框架。

2.2Ajax應(yīng)用

Ajax應(yīng)用是運(yùn)行在Web瀏覽器中,并發(fā)送Web服務(wù)請(qǐng)求的Web服務(wù)客戶端,而Web瀏覽器更適合采用REST。因此,Ajax是REST式Web服務(wù)的客戶端。Ajax在頁(yè)面后臺(tái)按需請(qǐng)求數(shù)據(jù),無(wú)須刷新整個(gè)頁(yè)面,使得Web應(yīng)用既保留了B/S結(jié)構(gòu)的優(yōu)點(diǎn),又具有C/S結(jié)構(gòu)應(yīng)用的強(qiáng)大功能和用戶感受[4]。

為了取消各瀏覽器之間的差異,許多JavaScript庫(kù)都提供了Ajax的封裝庫(kù),用來(lái)發(fā)送HTTP請(qǐng)求。JQuery Mobile作為移動(dòng)UI框架,封裝了Ajax函數(shù),核心是XMLHttpRequest。XMLHttpRequest是瀏覽器為JavaScript實(shí)現(xiàn)的HTTP客戶端庫(kù)。

3系統(tǒng)實(shí)現(xiàn)

3.1系統(tǒng)功能

C語(yǔ)言學(xué)習(xí)交流圈App是面向移動(dòng)用戶的移動(dòng)學(xué)習(xí)系統(tǒng),具有高便攜性、高可用性及微型化特征。用戶能夠隨時(shí)隨地使用數(shù)字媒體學(xué)習(xí)資源,與傳統(tǒng)網(wǎng)絡(luò)學(xué)習(xí)平臺(tái)和課程教學(xué)相比,具有學(xué)習(xí)時(shí)間短、知識(shí)傳遞效率高等優(yōu)點(diǎn)。系統(tǒng)主要功能模塊有在線學(xué)習(xí)、在線交流、在線測(cè)試。

(1) 在線學(xué)習(xí)。該模塊主要功能是提供C語(yǔ)言的學(xué)習(xí)資源,包括專家課程、教案、專題、知識(shí)點(diǎn)及課后作業(yè)等。資源類型有文本、圖像、音頻、視頻等,以適合移動(dòng)學(xué)習(xí)的簡(jiǎn)短化、多樣化形式。

(2) 在線交流。發(fā)布C語(yǔ)言的最新資訊、通知公告等,能組建話題討論組,學(xué)生可以通過(guò)提出問(wèn)題供大家討論,或發(fā)送私信給其他用戶等方式進(jìn)行交流。

(3) 在線測(cè)試。系統(tǒng)有階段性小測(cè)試,用戶答題并提交,系統(tǒng)自動(dòng)給出成績(jī)及試題答案。

3.2REST設(shè)計(jì)

URI是資源的名稱和地址,同一URI對(duì)應(yīng)同一種資源。URIs設(shè)計(jì)應(yīng)具有描述性意義和良好結(jié)構(gòu)。由于系統(tǒng)需要展示的資源較多,同時(shí)為了降低耦合性,可采用URI模板和超媒體驅(qū)動(dòng)(HATEOAS)。

URIs設(shè)計(jì)采用模板為:主機(jī)名/應(yīng)用名/路徑變量/版本號(hào)命名規(guī)則,路徑名采用名稱/集合/個(gè)體的方式。

沒(méi)有哪種格式能夠滿足所有類型的資源和數(shù)據(jù),系統(tǒng)采用多種數(shù)據(jù)表述格式,通過(guò)HTTP的content_type,即mediatype或MIME來(lái)描述媒體類型。系統(tǒng)參考IANA媒體類型登記處,在選用表述格式時(shí)使用標(biāo)準(zhǔn)和知名的媒體類型。系統(tǒng)使用的媒體表述格式有JSON、XML和Atom等可擴(kuò)展格式,為視頻、音頻等媒體類型提供一個(gè)指向資源的鏈接。JSON格式專門(mén)為JavaScript而設(shè)計(jì),使用JSON格式獲取某章節(jié)課程資源如下:

3.3Ajax+PhoneGap作為REST客戶端

PhoneGap框架實(shí)現(xiàn)移動(dòng)客戶端應(yīng)用,用戶界面使用Web語(yǔ)言編寫(xiě),也即HTML5文檔;數(shù)據(jù)請(qǐng)求與響應(yīng)等邏輯使用JavaScript語(yǔ)言[5]。

Web瀏覽器遵循的一條基本規(guī)則是,不允許來(lái)自一個(gè)域名的代碼向另一個(gè)域名發(fā)送HTTP請(qǐng)求。PhoneGap使用file://協(xié)議,不存在跨域訪問(wèn)問(wèn)題,這避免了Ajax跨域訪問(wèn)限制[6]。出于安全考慮,還可以在PhoneGap的配置文件中將訪問(wèn)域加入白名單,例如:Android設(shè)置config.xml文件中的,即允許瀏覽器向http: //www.cmlearning.com/*域名發(fā)送服務(wù)請(qǐng)求。

3.3.1接口實(shí)現(xiàn)

Ajax庫(kù)使用JQuery的ajax框架,簡(jiǎn)單易用的高層實(shí)現(xiàn)函數(shù)有$.get(options)、$.post(options)等,底層Ajax實(shí)現(xiàn)為$.ajax(options)[7]。所有options都可以通過(guò)$.ajaxSetup()函數(shù)來(lái)進(jìn)行全局設(shè)置。例如請(qǐng)求獲取某章節(jié)課程的列表,使用$.ajax(options):

3.3.2PhoneGap編譯打包

PhoneGap開(kāi)發(fā)工具有兩種編譯打包方式:云端編譯和本地編譯。云端編譯使用PhoneGap官網(wǎng)提供的PhoneGap Build服務(wù),上傳編寫(xiě)好的程序,下載目標(biāo)平臺(tái)的安裝包。關(guān)于本地編譯,PhoneGap 3.0之前的版本支持本地打包手動(dòng)配置,這種方式需要配置好目標(biāo)移動(dòng)平臺(tái)的原生開(kāi)發(fā)環(huán)境,新建項(xiàng)目并按照目標(biāo)平臺(tái)的配置步驟編譯打包、發(fā)布。3.0及之后版本需要配置目標(biāo)移動(dòng)平臺(tái)的編譯環(huán)境,安裝PhoneGap并在線生成目標(biāo)平臺(tái)軟件的項(xiàng)目,然后在本地編譯成應(yīng)用軟件,步驟如下:①npm install phonegapg (需要先安裝nodejs和npm)指令安裝PhoneGap;②phonegap create (位置 包名 項(xiàng)目名)創(chuàng)建項(xiàng)目;③phonegap build platform(在線創(chuàng)建目標(biāo)平臺(tái)項(xiàng)目)。

4結(jié)語(yǔ)

經(jīng)過(guò)多項(xiàng)測(cè)試,該系統(tǒng)在Android平臺(tái)上運(yùn)行良好。同時(shí),根據(jù)PhoneGap指令生成的IOS項(xiàng)目成功編譯并能很好地運(yùn)行?;贖TML5的Hybrid移動(dòng)應(yīng)用可以在未來(lái)轉(zhuǎn)化成HTML5移動(dòng)Web應(yīng)用,而且不需要重寫(xiě)代碼。本系統(tǒng)采用瀏覽器降級(jí)的UI框架——JQuery Mobile,不僅可以利用PhoneGap開(kāi)發(fā)工具打包成移動(dòng)應(yīng)用,還可以發(fā)布為移動(dòng)Web網(wǎng)站。用戶訪問(wèn)時(shí)只需輸入網(wǎng)址,即可獲得如同本地應(yīng)用一樣的體驗(yàn)效果。本文提出的開(kāi)發(fā)模式為移動(dòng)Web App及混合移動(dòng)應(yīng)用開(kāi)發(fā)提供了參考。

參考文獻(xiàn)參考文獻(xiàn):

[1]PhoneGap[EB/OL].http://phonegap.com/.

[2]SUBBU ALLAMARAJU.RESTful web services cookbook[M].丁雪豐,譯.北京:電子工業(yè)出版社,2011.

[3]劉玉.基于跨平臺(tái)的移動(dòng)應(yīng)用開(kāi)發(fā)框架研究[D].北京:北京交通大學(xué),2014.

[4]張亮.基于Ajax_REST架構(gòu)Web服務(wù)的研究與應(yīng)用[D].大慶:東北石油大學(xué),2011.

[5]Z ALEXANDER, M TIM A.Crossplatform development using HTML5,jQuery mobile, and PhoneGap:realizing a smart meter application[C].8th International Conference on Web Information Systems and Technologies,2013:1633.

[6]李張永,陳和平.跨平臺(tái)移動(dòng)Web開(kāi)發(fā)框架與數(shù)據(jù)交互方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35(5):18271832.

[7]JQuery mobile[EB/OL].http://jquerymobile.com/.

責(zé)任編輯(責(zé)任編輯:孫娟)

若尔盖县| 夏河县| 苗栗县| 囊谦县| 宜章县| 盘锦市| 梁平县| 克东县| 自治县| 杭州市| 河源市| 通渭县| 承德县| 沾益县| 澄城县| 巴青县| 凤庆县| 易门县| 沙洋县| 新丰县| 荣昌县| 惠来县| 抚松县| 迁西县| 大理市| 青田县| 台南县| 佛坪县| 乐安县| 和田县| 余姚市| 普格县| 兰溪市| 甘洛县| 道真| 庄河市| 惠东县| 青神县| 横峰县| 辽宁省| 奎屯市|