基于GSON和Gzip的交互接口的应用研究

2017-03-23 13:48彭子真万励
科技创新与应用 2017年6期
关键词:数据包组件客户端

彭子真++万励

摘 要:在WebService网络服务当中,相对于传统的XML,JSON体积更小,解析起来更方便,因此JSON在移动互联网的应用中优势更为明显。文章结合JSON以及HTTP协议的特性,利用GSON工具和Gzip算法原理,设计并实现了在JavaEE平台上与And

roid以及iOS等移动端进行交互的一种接口。

关键词:WebService技术;JSON数据;GSON工具;Gzip算法;网络接口

1 概述

伴随“互联网+”理念上升至国家战略层面,移动互联网技术正以难以想象的速度迅猛速度发展。移动终端作为互联网最重要的载体,其发展对各行各业都有着深远的影响。根据QuestMobile发布的《2015年中国移动互联网研究报告》显示,国内移动智能设备的活跃数量将近9亿,其中苹果设备占比三成[1]。因此设计一种使用安全、简单可用于移动互联的接口就具有非常大的意义了。

SOA是一种以松耦合方式实现处理异构系统数据交互的面向服务的方法。WebService则是该方法的一种实现规范,WebService主要由解决对象互访问的SOAP协议、描述具体业务服务的WSDL文件和负责注册服务的UDDI注册中心三个模块组成[2]。WebService以XML(可拓展标记语言)作为数据交互的格式,XML数据主要以Open和Closing标记组成,具备较高的可读性,但是在解释速度和传输速率上面效果较差,并不是移动互联网使用场景的最佳方案[3]。REST是一种适合于客户端与服务器端交互的一种架构风格,该风格更简单、更有层次,也更容易实现缓存等机制,而REST最简单的实现技术则是JSON(Java Script Object Notation)技术。

2 JSON与GSON

2.1 JSON概述

JSON是一种以大括号、中括号等符号表达的轻量级(Lightweight,具有平台移植性)交换格式。JSON使用“名称/值”的方式组织数据,在占用体积极低的情况之下,仍然能以便捷的方式反向分析出数据源,同时以有序列表的方式直接表达对象列表,极大兼容了面向对象编程方式。

2.2 GSON工具

JSON属于Javascript的一个子集,早期多用于Web服务。随着JSON的快速发展和普及,很多平台均对该数据格式进行了支持。GSON(又称Google GSON)是Google公司发布的一个开放源代码的Java库,主要用途是将Java对象序列化为JSON字符串,或反序列化JSON字符串成Java对象。该工具的应用,不仅容易生成小体积的JSON数据,更从整体上简化了JSON数据开发的各个环节,降低了技术难度。

3 交互接口的设计

3.1 功能需求概述

本文以笔者近期参与的“周末玩乜 出游助理”项目的建设为例。该项目是以短期周末鄉村游为切入点,结合两广区域旅游特色而开发的平台,以解决当前旅游App市场上乡村游资源丰富而相关数据却匮乏的问题。该平台主要包括景点管理、产品管理、消费体系、结伴游、攻略、出游助理等功能模块。

3.2 移动终端与服务器交互接口体系结构的设计

考虑到旅游平台不仅需要有面向管理员以及商家的Web管理平台,还需要有适合用户户外使用的Android端或iOS端,可能后续还会拓展到其他终端。因此,平台必须要设计出符合以下约束的交互接口:

(1)接口访问敏感数据需要进行严格完整的身份认证,且达到业务发展之后对高可拓展性的要求。

(2)需要考虑无线环境下流量损耗的问题。

(3)为了功能同步,Android端以及iOS使用同一套接口。

(4)考虑到团队技术能力以及系统稳健性,要求技术简单可行。

综合以上四个条件,本文拟使用HTTP协议以及JSON数据进行REST风格接口的设计,同时使用GSON工具包对JSON进行转换。整个过程为:通过HTTP协议中的request包装POST数据传输命令,以response返回JSON数据包的方式最终完成交互,其中,使用GSON工具包在服务器生成JSON,以及在客户端解析JSON;Gzip主要用于服务器传输前的数据压缩以及客户端接收之后的数据解压。具体体系结构如图1所示。

服务器原有架构设计在RUP4+1架构体系的基础上结合分层以及MVC模式,设计出了自上而下的包括视图层、控制层、业务层和数据持久层在内的4层结构。而移动端无论是Android或者iOS,均把网络传输以及JSON数据的解释等功能抽取成了组件。在此基础上,总体设计可以结合以下几个方面的设计,最终完成图1所示的移动终端与服务器交互接口的体系结构的设计:

(1)服务器端过滤器安全认证设计。如果直接在POST的数据当中封装令牌,将会导致业务数据与安全验证的高度耦合,同时增加了程序的复杂度和可理解度。因此在每次传输之前,把安全认证信息封装到POST方式的Header数据当中,服务器则在进入具体控制器之前使用整体的过滤器完成整个系统的权限认证。

(2)服务器端控制层的设计。在不改变Web版控制层代码的情况下,创建新的安装包com.gxuwz.TravelToolWeb.action.ap,并在当中增加与移动端交互的Action。通过调用GSON组件快速把在调用业务层时得到的对象等数据转化为JSON的数据包,随后直接使用这些数据包,并且使用Gzip压缩之后返回给客户端。

(3)移动端接口设计。由于Android或iOS把网络连接模块抽取成了网络组件,把GSON工具包抽取成了JSON对象转换组件,所以在发送阶段可使用网络组件直接把Header数据封装到POST并进行传输。在接收处理阶段,先使用Gzip组件解压缩得到JSON数据包,接着使用转换组件把JSON数据表直接转换为本地对象的数据包,最后移动端则像使用本地对象一样使用该转换数据。

4 交互接口的实现

当前包括Android和iOS等在内的移动端均支持HTTP协议,移动端与服务器端的交互方式主要利用HTTP协议当中POST方式传输为主。本文使用GSON生成的用于传输的JSON数据的格式,利用POST方式的Header数据头隐藏解决安全问题的密钥,并使用Gzip算法对JSON数据进行压缩,最终完成整个接口的实现。整体上实现步骤以及调用逻辑如图2序列图所示。

4.1 利用GSON生成和解析JSON数据包

GSON对JSON做了最大的支持,在对外的接口当中,主要以to

Json方法生成JSON数据包,使用fromJson把JSON数据包映射为内部的对象或者对象列表。

其中,在服务器端控制器Action调用业务得到数据之后,直接使用toJson方法把内部数据直接生成JSON数据格式。

同理,Android等移动客户端只需要引入GSON组件并调用fromJson即可反向把JSON数据生成内部对象或者列表。

4.2 设计安全的数据请求机制

利用POST的传输方式,实现接口的安全机制。在移动端当中,把安全访问密钥、版本号以及访问端的平台等校验数据封装在POST的Header数据当中。

在JavaEE平台当中,Filter是一种对web资源进行管理的技术,其核心的机制是在进入Servlet等控制器之前优先执行,可以实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。Filter包含了内置对象request以及response,因此可以非常方便地在request中获取Header数据,根据校验结果在response中控制跳转到指定的资源,以实现权限认证的操作。

4.3 使用Gzip压缩算法对JSON数据进行优化

对于XML传输格式而言,JSON的数据量已经非常小,但是对于字符较多的数据列表的传输而言,传输的数据量还是较大的。故可以使用Gzip算法对JSON进行压缩。在包括JavaEE以及Android在内的Java平台当中,均已提供了用Gzip算法压缩JSON的技术实现方式。例如直接在服务器控制端生成JSON之后,传输之前,调用Java的GZIPOutputStream类用于压缩JSON数据包。而在Android移动端,接收到数据之后,解析JSON之前,直接GZIPInputStream类解压缩即可得到JSON字符。

5 实现效果分析

在目标系统“周末玩乜 出游助理”的使用场景当中,以最有代表性的三种应用场景为例,说明优化的效率。这三种应用场景分别为:获取景点列表、获取单个景点对象和获取操作状态的单个值。现分别对这三种返回类型从XML、JSON以及使用Gzip压缩之后的JSON(下称压缩JSON)的格式进行数据包测试,测试结果如表1所示:

由表1的数据得到图3分析图。景点列表元素不多,但是内部包含比较长的景点介绍的文本;景点对象元素较多但单个元素数据量较小;操作状态仅仅是单个字符。由此可知,在单个状态字符的情况下,JSON格式的优势并不明显;在列表对象这种字符元素较少、单个元素字符非常大的情况下有一定优势;而对于常规的元素较多而单个值字符较少的情况,压缩JSON则是最好的选择。

6 结束语

本文以项目“周末玩乜 出游助理”的实际需求为背景,提出了基于GSON技术和Gzip技术实现的移动端与服务器交互接口的设计与实现。首先由于GSON以及OKHttp等组件的使用,降低了开发难度,也降低了移动互联网数据的损耗;其次把认证信息封装到POST协议的Header的方式,以一种非常简单的手法解决了JSON的安全问题;最后使用Gzip算法对JSON数据进行压缩讲交互接口的传输效率调节到了最佳状态。整体上来说,该接口的实现不仅解决了iOS和Android等移动端与服务器互通信息和共享资源难的问题,也达到了低耦合、低成本、可拓展性强、高效和高安全性的要求。

參考文献

[1]李天昀.2015年中国互联网产业发展报告[J].现代传播(中国传媒大学学报),2016(08):8.

[2]陈峰震.基于调用Web Service的Android应用开发技术研究[J].福建电脑,2015(3):24.

[3]谭翔纬.利用JSON实现Android客户端与Web服务器间的数据交互[J].福建电脑,2013(02):166.

作者简介:彭子真(1987-),女,汉族,广西浦北,在读工程硕士,研究方向:软件工程。

万励(1972-),女,汉族,广西平南,硕士,副教授,研究方向:软件工程、图象处理。

猜你喜欢
数据包组件客户端
满足法规要求的车载终端数据包加密方案分析
创建Vue组件npm包实战分析
光伏组件热斑对发电性能的影响
智能机械臂
C#串口高效可靠的接收方案设计
虚拟专用网络访问保护机制研究
新闻客户端差异化发展策略
网络数据包的抓取与识别
浅析IEEE 802.1x及其客户端软件
嵌入式组件技术的研究及应用