彭子真++萬勵
摘 要:在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-),女,漢族,廣西平南,碩士,副教授,研究方向:軟件工程、圖象處理。