趙超鴻





摘要:筆者通過對(duì)JSON數(shù)據(jù)格式的研究,結(jié)合實(shí)際需求,利用ASP實(shí)現(xiàn)對(duì)Web API的自定義構(gòu)建,提供給AppInventor調(diào)用,從而實(shí)現(xiàn)了Web API在基于Android系統(tǒng)的學(xué)生成績(jī)查詢的應(yīng)用。
關(guān)鍵詞:JSON、Web API;AppInventor;"名稱:值"對(duì);鍵值對(duì)
中圖分類號(hào):G481 文獻(xiàn)標(biāo)識(shí)碼:A 論文編號(hào):1647-2117(2015)05-0074-04
Web2.0時(shí)代,隨著移動(dòng)終端的普及,移動(dòng)應(yīng)用滲透到每個(gè)人的日常生活中,人們隨時(shí)隨地通過網(wǎng)絡(luò)訪問各類網(wǎng)站,網(wǎng)站不僅要滿足人對(duì)機(jī)器的訪問模式,而且還需提供機(jī)器對(duì)機(jī)器的訪問模式,以便移動(dòng)終端快速獲取信息。在機(jī)器對(duì)機(jī)器的訪問模式中,提供數(shù)據(jù)的一方被稱為網(wǎng)絡(luò)服務(wù)(Web Service),而客戶端應(yīng)用與網(wǎng)絡(luò)服務(wù)之間的通信協(xié)議則稱為網(wǎng)絡(luò)應(yīng)用程序接口,簡(jiǎn)稱Web API。在網(wǎng)絡(luò)通訊過程中,服務(wù)器端的Web Service根據(jù)需求生成某種格式的數(shù)據(jù)供客戶端的Web API調(diào)用。比較知名的Web API有Amazon Web API、FaceBook Web API、Twitter Web API、Baidu Web API等,因此,利用這些公開的Web API可以更方便有效地獲取信息,加工整合,從而發(fā)現(xiàn)信息的內(nèi)在價(jià)值,實(shí)現(xiàn)創(chuàng)新。誠(chéng)然,我們也可以根據(jù)規(guī)則自定義自己需要的Web API,供客戶端調(diào)用。
Web API地址的表示形式是http://URL:port?tag=value,其中URL表示W(wǎng)eb API服務(wù)器地址,port表示通訊端口,tag表示要傳遞參數(shù)值的引用,value表示傳遞的參數(shù)。用來表示W(wǎng)eb API的數(shù)據(jù)格式一般有JSON和XML兩種,這兩種格式的優(yōu)缺點(diǎn)為:①可讀性:JSON偏向于符號(hào)表示,XML偏向于單詞表示,兩者各具優(yōu)勢(shì)。②簡(jiǎn)潔性:JSON優(yōu)于XML,JSON更接近類C語(yǔ)言的描述,而XML更接近文本描述。③友好性:JSON比XML更友好,JSON在客戶端可以使用eval( )解釋,在服務(wù)器端可以使用ASP、 C、 C#、ColdFusion、 Java、 JavaScript、 Perl、 PHP、Python、 Ruby等60多種語(yǔ)言生成,官方網(wǎng)站(http://www.json.org/json-zh.html)已經(jīng)提供支持各種語(yǔ)言的封裝函數(shù);而XML則相對(duì)復(fù)雜,不管在服務(wù)器端還是在客戶端都需要花費(fèi)大量的代碼來解析維護(hù)。④安全性:由于JSON可以使用eval( )來解釋,安全性會(huì)稍微比XML差。
根據(jù)以上分析,對(duì)于安全性不是首要考慮要素的Android終端來說,筆者建議使用JSON來描述數(shù)據(jù)格式。
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于JavaScript語(yǔ)言,遵守ECMA-262標(biāo)準(zhǔn)。JSON的構(gòu)建基于"名稱:值"對(duì)的集合和值的有序列表兩種,前者稱為對(duì)象(object),后者稱為數(shù)組(array),對(duì)象和數(shù)組之間可以互相嵌套,如{"021600201":[{"語(yǔ)文":"117.5","語(yǔ)文排名":"50"},{"數(shù)學(xué)":"112","數(shù)學(xué)排名":"125"}]}。JSON在“值”的表達(dá)上使用Unicode編碼生成諸如{"學(xué)生":{"021600201":"\u9648\u5B9D\u4EEA"}}這樣格式的數(shù)據(jù)。我們利用BEJSON網(wǎng)站(網(wǎng)址:http://www.bejson.com/)校驗(yàn)以上兩個(gè)JSON格式數(shù)據(jù)的有效性,格式化后的JSON如下頁(yè)表1。
為使Android終端能獲取Web API傳遞過來的JSON格式數(shù)據(jù),筆者使用了AppInventor作為終端應(yīng)用程序開發(fā)工具。App Inventor是一款手機(jī)編程軟件,它采用Open Blocks Java Library來創(chuàng)建可視化的模塊編程語(yǔ)言,允許沒有編程知識(shí)的用戶以拖拽特定的應(yīng)用程序行為模塊來創(chuàng)建Android應(yīng)用。App Inventor整個(gè)項(xiàng)目建立在云服務(wù)器上,只要輸入具體的網(wǎng)址(官方網(wǎng)址:http://contest.appinventor.mit.edu/),通過Gmail郵箱登錄即可訪問,開發(fā)的源程序以AIA格式打包,實(shí)時(shí)保存在遠(yuǎn)程服務(wù)器上,只要開發(fā)者能上網(wǎng),就能隨時(shí)隨地打開自己創(chuàng)建的項(xiàng)目。App Inventor還內(nèi)置了模擬器和AI伴侶,可以通過模擬器調(diào)試,或通過AI伴侶在手機(jī)中調(diào)試。利用App Inventor開發(fā)音樂制作、視頻互動(dòng)、語(yǔ)音識(shí)別、GPS定位等移動(dòng)設(shè)備上的高科技應(yīng)用,也可以設(shè)計(jì)如小調(diào)查、小測(cè)驗(yàn)、互動(dòng)學(xué)習(xí)反饋等移動(dòng)設(shè)備上的教育應(yīng)用軟件。對(duì)于輕量級(jí)的手機(jī)終端應(yīng)用開發(fā),App Inventor無疑是最佳的選擇。
筆者所在單位因每學(xué)期學(xué)生放假旅游導(dǎo)致無法及時(shí)在PC終端查詢考試成績(jī),面對(duì)大批量的出游學(xué)生,筆者擬利用JSON構(gòu)建Web API,并使用App Inventor來開發(fā)一個(gè)基于Android系統(tǒng)的成績(jī)查詢應(yīng)用。
● 成績(jī)查詢應(yīng)用設(shè)計(jì)
該應(yīng)用程序要求功能單一,界面簡(jiǎn)潔,安全實(shí)用,少耗流量。據(jù)此,成績(jī)查詢應(yīng)用設(shè)計(jì)流程如下:利用App Inventor構(gòu)建的Android手機(jī)終端應(yīng)用在初始化的時(shí)候獲取Web API中當(dāng)前考試的主題,顯示在“考試主題”欄。學(xué)生輸入統(tǒng)考號(hào)和姓名,點(diǎn)擊“查詢”按鈕,應(yīng)用程序?qū)⒄?qǐng)求發(fā)送給服務(wù)器端ASP構(gòu)建的Web API,Web API通過分析數(shù)據(jù)的合法性,打包成SQL指令向網(wǎng)絡(luò)數(shù)據(jù)庫(kù)發(fā)起請(qǐng)求,網(wǎng)絡(luò)數(shù)據(jù)庫(kù)根據(jù)查詢結(jié)果返回?cái)?shù)據(jù)集給Web API,Web API把數(shù)據(jù)集格式化為JSON數(shù)據(jù)格式,最終給應(yīng)用程序調(diào)用,顯示查詢結(jié)果。圖1描述了上述的整個(gè)過程。
通過對(duì)學(xué)生參加考試后查詢成績(jī)這個(gè)事件分析得知,學(xué)生實(shí)體與成績(jī)實(shí)體和排名實(shí)體發(fā)生聯(lián)系。對(duì)于學(xué)生來說,學(xué)生實(shí)體有統(tǒng)考號(hào)和姓名兩個(gè)屬性;對(duì)于學(xué)生的成績(jī)來說,成績(jī)實(shí)體和排名實(shí)體均有語(yǔ)文、數(shù)學(xué)、英語(yǔ)、物理、化學(xué)、政治、歷史、地理、生物、總分這些屬性,并且一個(gè)學(xué)生對(duì)應(yīng)著多個(gè)成績(jī)和多個(gè)排名,他們是一對(duì)多的關(guān)系。圖2描述了學(xué)生參加考試的實(shí)體聯(lián)系。
按照學(xué)生參加考試的實(shí)體聯(lián)系圖的描述,很容易設(shè)計(jì)出數(shù)據(jù)庫(kù)中表的結(jié)構(gòu)。為方便在實(shí)際使用中將Excel數(shù)據(jù)表直接導(dǎo)出為數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)表,筆者將考試主題作為數(shù)據(jù)表表名,將“學(xué)生”、“成績(jī)”、“排名”實(shí)體的屬性作為字段,具體見表2數(shù)據(jù)表各字段設(shè)計(jì)。
● 成績(jī)查詢應(yīng)用開發(fā)
根據(jù)以上設(shè)計(jì),筆者從服務(wù)器端構(gòu)建Web API和在Android終端構(gòu)建應(yīng)用程序兩方面說明成績(jī)查詢應(yīng)用的開發(fā)過程。
1.服務(wù)器端利用ASP構(gòu)建JSON格式的Web API
在JSON官網(wǎng)中下載JSON_2.0.4.asp作為JSON的類被調(diào)用,通過Set o = jsObject( )定義一個(gè)名稱為o的JSON類對(duì)象,旗下有四個(gè)子對(duì)象,名稱為“主題”、“學(xué)生”、“各科成績(jī)”、“各科排信名”,定義如下:Set o("主題") = jsObject( )、Set o("學(xué)生") = jsObject( )、Set o("各科成績(jī)") = jsObject( )、Set o("各科排名") = jsObject( )。獲取數(shù)據(jù)表的表名作為查詢成績(jī)的“主題”,通過request( )獲取Android終端傳遞過來的統(tǒng)考號(hào),并將統(tǒng)考號(hào)關(guān)聯(lián)數(shù)據(jù)表中學(xué)生的信息,將“統(tǒng)考號(hào)”、“姓名”作為“學(xué)生”對(duì)象的"名稱:值"對(duì),同理將關(guān)聯(lián)的學(xué)生各科科目和各科成績(jī)作為“各科成績(jī)”對(duì)象的"名稱:值",將關(guān)聯(lián)的學(xué)生各科科目和各科排名作為“各科排名”對(duì)象的"名稱:值"對(duì),通過表3代碼生成完整的JSON對(duì)象供Android終端調(diào)用。至此,關(guān)聯(lián)服務(wù)器和終端的Web API構(gòu)建完成。
2.利用App Inventor構(gòu)建Android終端應(yīng)用程序
終端程序的界面設(shè)計(jì)如表4所示,設(shè)計(jì)界面用到了一個(gè)屏幕組件、八個(gè)標(biāo)簽組件、兩個(gè)文本輸入框組件、一個(gè)按鈕組件、兩個(gè)表格布局組件和兩個(gè)Web客戶端組件等,其中Web客戶端組件為非可視組件,它是使用異步通信協(xié)議來獲取Web API的JSON數(shù)據(jù)的。
終端程序的代碼設(shè)計(jì)分兩部分:程序的初始化和查詢按鈕事件。當(dāng)程序初始化的時(shí)候,通過Web組件的地址請(qǐng)求返回?cái)?shù)據(jù)表的名稱作為本次查詢的考試主題,顯示在lbsubject標(biāo)簽里。當(dāng)用戶輸入統(tǒng)考號(hào)和姓名后,點(diǎn)擊“查詢”按鈕觸發(fā)按鈕事件,程序按照Web API的地址格式生成URL供Web組件調(diào)用,向Web API發(fā)出GET請(qǐng)求。當(dāng)Web組件獲得JSON格式的文本后,將文本按照J(rèn)SON格式解碼,生成類似于("主題":"2013年高考","學(xué)生":("021600201":"陳寶儀"),"各科成績(jī)":("021600201":("語(yǔ)文":"117.5","數(shù)學(xué)":"120")),"各科排名":("021600201":("語(yǔ)文排名":"34","數(shù)學(xué)排名":"50")))的鍵值對(duì),檢查輸入的統(tǒng)考號(hào)和姓名合法后,進(jìn)一步查找“各科成績(jī)”和“各科排名”的鍵值對(duì),最后作輸出格式化處理,輸出到Android系統(tǒng)的終端。如果檢查到輸入的信息不合法,則輸出“輸入的信息不正確”的提示。關(guān)鍵源代碼如上頁(yè)圖3所示。
筆者利用上述技術(shù)開發(fā)的Web API部署在服務(wù)器端Windows 2003系統(tǒng)的IIS里,以MYSQL作為后臺(tái)數(shù)據(jù)庫(kù),用App Inventor生成的apk文件運(yùn)行在Android系統(tǒng)里。筆者在上述運(yùn)行環(huán)境中多次測(cè)試成功并實(shí)際應(yīng)用到學(xué)生群體中。用到的源文件可從以下地址下載,鏈接:http://pan.baidu.com/share/link?shareid=3258655633&uk=707995714&third=15,密碼:4sq5。