RESTful服务及跨平台移动应用

2015-04-30 06:16胡天云林庆
软件导刊 2015年4期

胡天云 林庆

摘要摘要:目前,智能移动平台呈现出多样化特征,其应用软件之间互不兼容,造成移动应用跨平台开发成本高、周期长等问题。在分析REST架构风格及当前Hybrid移动应用的基础上,提出了适合浏览器交互的REST式服务,以及基于Ajax应用和PhoneGap框架开发客户端的移动应用跨平台解决方案,为快速构建移动信息化平台提供了一种思路。

关键词关键词:Hybrid;REST;Ajax;跨平台移动应用;PhoneGap

DOIDOI:10.11907/rjdk.1431044

中图分类号:TP319

文献标识码:A文章编号文章编号:16727800(2015)004008703

0引言

随着移动互联网技术和互联网产业的快速发展,以及智能设备终端的逐渐普及,互联网应用开发商也越来越重视软件产品向移动设备的转移。然而,智能设备终端操作系统的多样化,以及智能设备的碎片化,造成各平台设备的软件之间互不兼容。移动智能终端使用较多的操作系统有Android、IOS、Windows Phone、BlackBerry等,但它们之间的应用软件并不兼容。并且,Android设备的型号、品牌、版本和屏幕尺寸呈现出严重的碎片化。原生移动应用的开发、测试周期长,开发成本高,而且跨平台开发使得这一问题更为突出。移动平台软件的快速开发需求与移动平台的多样化特征构成了矛盾。

针对移动应用跨平台开发的时间、成本及可扩展性等问题,本文提出采用REST架构风格的Web Service作为服务器,Ajax应用+PhoneGap[1]框架开发移动客户端的跨平台移动应用软件开发方案。服务器使用可伸缩、简单普适的RESTful Web服务,回避了客户端的平台相关性;移动客户端利用适合REST风格及ROA原则的Ajax框架,整合Hybrid模式开发框架PhoneGap,实现移动软件的跨平台快速开发。

1REST式Web服务概述

REST是Roy Fielding博士在2000年提出的一种分布式应用架构,与以往DO(分布式对象)、RPC(远程过程调用)等分布式架构相比,它符合一组通用的ROA设计原则:可寻址性、无状态性、连通性和统一接口。随着Ajax、移动互联网等的兴起,这种分布式的、轻量级的、可扩展的、与平台和编程语言无关的、具普适性的Web服务体系架构,受到越来越多的关注。

REST架构风格是HTTP1.1协议的设计原则[2]。与传统Web Services(SOAP)相比,REST更适合作为移动混合应用服务器,因为它具有以下优点:

(1)轻量级、高效性。无需引入SOAP/WSDL,更适合基于浏览器的交互,能更高效地使用HTTP协议。

(2)灵活易用性。无需通过复杂的SOAP信封通信,只需请求资源的网址和请求数据就可轻松使用REST服务。可以在编程语言中轻易实现,尤其是JavaScript浏览器语言。

(3)平台无关性。编程语言只要支持HTTP协议就可以应用REST服务,降低服务器与客户端的耦合性。这种特性适合客户端主要编程语言JavaScript。

(4)无状态性与可扩展性。每个资源都有自己的URI,服务器的可能状态也是资源,各HTTP请求都是独立的,这种模式可提高服务的可扩展性。

(5)缓存支持。通过标记响应中的数据赋予客户端数据缓存功能,减少带宽使用,提高数据响应速度,更适合移动应用。

这种服务器具有与客户端低耦合、简单普适等特性,适合软硬件环境复杂的移动设备软件跨平台开发,促进了移动客户端跨平台开发的实现。

2PhoneGap与Ajax跨平台应用

作为Web服务客户端,PhoneGap应用主要使用Web技术。JavaScript脚本语言是重要的浏览器编程语言,而Ajax是JavaScript的典型应用。

2.1跨平台框架PhoneGap原理与应用

Hybrid App(混合应用)是目前移动应用的一种应用模式,主要开发框架有PhoneGap、Titanium、Sencha Touch、AppCan等。PhoneGap是Hybrid App的一种开源开发框架。程序编码使用原生程序语言和网页语言,应用中同时有原生视图和Web视图。它拥有Web App的特点:开发成本低、实时更新、可集成和扩展等,而且使用方式也和Native App一致。

中间件提供应用与平台之间的通信服务,这些服务有标准的接口和协议,并根据不同的操作系统和硬件平台有各自的实现方式[3]。PhoneGap是第二代移动中间件,支持Hybrid开发模式和自定义插件扩展,使用移动设备自带浏览器引擎,以HTML5为主要应用开发语言。

图1所示为PhoneGap开发框架原理。PhoneGap应用基于HTML、JS、CSS等Web技术,将一些系统底层接口封装为统一的JavaScript API,供应用程序开发者通过JS调用。使用这些系统级的API,开发者能像原生应用一样调用GPS、网络、摄像头、重力感应等智能设备的核心功能。为了丰富移动应用功能,开发者还可以开发插件或使用已有插件。PhoneGap扩展和封装了不同平台的WebView组件,从而通过手机浏览器就可访问本地接口。使用PhoneGap编写的程序会被打包并安装到手机上,在应用运行时载入到设备内置浏览器中解析执行。

PhoneGap作为一种重要的跨平台开源开发框架,以其良好的兼容性、标准化、多平台和无限扩展功能的丰富插件,解决了跨平台开发成本高、周期长等问题,成为主流移动混合应用开发框架。

2.2Ajax应用

Ajax应用是运行在Web浏览器中,并发送Web服务请求的Web服务客户端,而Web浏览器更适合采用REST。因此,Ajax是REST式Web服务的客户端。Ajax在页面后台按需请求数据,无须刷新整个页面,使得Web应用既保留了B/S结构的优点,又具有C/S结构应用的强大功能和用户感受[4]。

为了取消各浏览器之间的差异,许多JavaScript库都提供了Ajax的封装库,用来发送HTTP请求。JQuery Mobile作为移动UI框架,封装了Ajax函数,核心是XMLHttpRequest。XMLHttpRequest是浏览器为JavaScript实现的HTTP客户端库。

3系统实现

3.1系统功能

C语言学习交流圈App是面向移动用户的移动学习系统,具有高便携性、高可用性及微型化特征。用户能够随时随地使用数字媒体学习资源,与传统网络学习平台和课程教学相比,具有学习时间短、知识传递效率高等优点。系统主要功能模块有在线学习、在线交流、在线测试。

(1) 在线学习。该模块主要功能是提供C语言的学习资源,包括专家课程、教案、专题、知识点及课后作业等。资源类型有文本、图像、音频、视频等,以适合移动学习的简短化、多样化形式。

(2) 在线交流。发布C语言的最新资讯、通知公告等,能组建话题讨论组,学生可以通过提出问题供大家讨论,或发送私信给其他用户等方式进行交流。

(3) 在线测试。系统有阶段性小测试,用户答题并提交,系统自动给出成绩及试题答案。

3.2REST设计

URI是资源的名称和地址,同一URI对应同一种资源。URIs设计应具有描述性意义和良好结构。由于系统需要展示的资源较多,同时为了降低耦合性,可采用URI模板和超媒体驱动(HATEOAS)。

URIs设计采用模板为:主机名/应用名/路径变量/版本号命名规则,路径名采用名称/集合/个体的方式。

没有哪种格式能够满足所有类型的资源和数据,系统采用多种数据表述格式,通过HTTP的content_type,即mediatype或MIME来描述媒体类型。系统参考IANA媒体类型登记处,在选用表述格式时使用标准和知名的媒体类型。系统使用的媒体表述格式有JSON、XML和Atom等可扩展格式,为视频、音频等媒体类型提供一个指向资源的链接。JSON格式专门为JavaScript而设计,使用JSON格式获取某章节课程资源如下:

3.3Ajax+PhoneGap作为REST客户端

PhoneGap框架实现移动客户端应用,用户界面使用Web语言编写,也即HTML5文档;数据请求与响应等逻辑使用JavaScript语言[5]。

Web浏览器遵循的一条基本规则是,不允许来自一个域名的代码向另一个域名发送HTTP请求。PhoneGap使用file://协议,不存在跨域访问问题,这避免了Ajax跨域访问限制[6]。出于安全考虑,还可以在PhoneGap的配置文件中将访问域加入白名单,例如:Android设置config.xml文件中的,即允许浏览器向http: //www.cmlearning.com/*域名发送服务请求。

3.3.1接口实现

Ajax库使用JQuery的ajax框架,简单易用的高层实现函数有$.get(options)、$.post(options)等,底层Ajax实现为$.ajax(options)[7]。所有options都可以通过$.ajaxSetup()函数来进行全局设置。例如请求获取某章节课程的列表,使用$.ajax(options):

3.3.2PhoneGap编译打包

PhoneGap开发工具有两种编译打包方式:云端编译和本地编译。云端编译使用PhoneGap官网提供的PhoneGap Build服务,上传编写好的程序,下载目标平台的安装包。关于本地编译,PhoneGap 3.0之前的版本支持本地打包手动配置,这种方式需要配置好目标移动平台的原生开发环境,新建项目并按照目标平台的配置步骤编译打包、发布。3.0及之后版本需要配置目标移动平台的编译环境,安装PhoneGap并在线生成目标平台软件的项目,然后在本地编译成应用软件,步骤如下:①npm install phonegapg (需要先安装nodejs和npm)指令安装PhoneGap;②phonegap create (位置 包名 项目名)创建项目;③phonegap build platform(在线创建目标平台项目)。

4结语

经过多项测试,该系统在Android平台上运行良好。同时,根据PhoneGap指令生成的IOS项目成功编译并能很好地运行。基于HTML5的Hybrid移动应用可以在未来转化成HTML5移动Web应用,而且不需要重写代码。本系统采用浏览器降级的UI框架——JQuery Mobile,不仅可以利用PhoneGap开发工具打包成移动应用,还可以发布为移动Web网站。用户访问时只需输入网址,即可获得如同本地应用一样的体验效果。本文提出的开发模式为移动Web App及混合移动应用开发提供了参考。

参考文献参考文献:

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

[2]SUBBU ALLAMARAJU.RESTful web services cookbook[M].丁雪丰,译.北京:电子工业出版社,2011.

[3]刘玉.基于跨平台的移动应用开发框架研究[D].北京:北京交通大学,2014.

[4]张亮.基于Ajax_REST架构Web服务的研究与应用[D].大庆:东北石油大学,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]李张永,陈和平.跨平台移动Web开发框架与数据交互方法[J].计算机工程与设计,2014,35(5):18271832.

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

责任编辑(责任编辑:孙娟)