李彬峰,陳建國(guó),朱明敏(華南農(nóng)業(yè)大學(xué)數(shù)學(xué)與信息學(xué)院,廣州 510642)
?
基于REST架構(gòu)的電子村務(wù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
李彬峰,陳建國(guó),朱明敏
(華南農(nóng)業(yè)大學(xué)數(shù)學(xué)與信息學(xué)院,廣州510642)
摘要:
關(guān)鍵詞:
REST;電子村務(wù);Web服務(wù);HATEOAS
電子村務(wù)是電子政務(wù)在農(nóng)村的延伸和落地。電子政務(wù)在城市的發(fā)展已經(jīng)基本成熟,但是在廣大的農(nóng)村地區(qū)這仍是一個(gè)亟待解決的問(wèn)題。2016年,中央一號(hào)文件提出提高農(nóng)村公共服務(wù)水平,創(chuàng)新和完善鄉(xiāng)村治理機(jī)制,這指明了電子村務(wù)或農(nóng)村電子政務(wù)的重要性和發(fā)展方向。而且,隨著農(nóng)村經(jīng)濟(jì)的發(fā)展和信息化水平的提高,我省很多農(nóng)村地區(qū)尤其是珠三角的農(nóng)村地區(qū)已經(jīng)具備實(shí)現(xiàn)電子村務(wù)的基本條件。
目前,我國(guó)學(xué)者在電子村務(wù)的研究方面已經(jīng)有一定積累,這些研究和實(shí)踐主要分為兩類(lèi):一類(lèi)是針對(duì)電子村務(wù)內(nèi)容或基本需求;一類(lèi)是聚焦于電子村務(wù)系統(tǒng)和平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)??偟膩?lái)說(shuō),電子村務(wù)的研究和實(shí)踐主要存在以下問(wèn)題:(1)沒(méi)有以村民為核心,需求調(diào)研不足,從而造成系統(tǒng)實(shí)用性差、使用率低。(2)不適合目前移動(dòng)互聯(lián)網(wǎng)時(shí)代的要求;(3)系統(tǒng)難以擴(kuò)展,一旦業(yè)務(wù)變更系統(tǒng)需要進(jìn)行繁雜的重構(gòu),更沒(méi)有考慮未來(lái)與其他系統(tǒng)的交互。
針對(duì)以上問(wèn)題,本文提出基于REST架構(gòu)的電子村務(wù)平臺(tái),該平臺(tái)具備以下特點(diǎn):(1)以廣州市南沙區(qū)民興村為研究對(duì)象,對(duì)村民和村委會(huì)的核心需求進(jìn)行建模。(2)同時(shí)開(kāi)發(fā)Web網(wǎng)頁(yè)端和Android客戶(hù)端,雙端共享同一后臺(tái);(3)基于REST架構(gòu)設(shè)計(jì)平臺(tái),服務(wù)端滿(mǎn)足HATEOAS約束,使系統(tǒng)具備良好的擴(kuò)展性、可維護(hù)性。這尤其適合于目前農(nóng)村未成熟穩(wěn)定的應(yīng)用環(huán)境。
1.1REST架構(gòu)簡(jiǎn)述
REST是在已有各種Web架構(gòu)規(guī)范的基礎(chǔ)上新增一部分新規(guī)范,從而形成的一種新的Web架構(gòu)風(fēng)格,通常也用REST架構(gòu)指代REST架構(gòu)風(fēng)格。REST架構(gòu)由HTTP設(shè)計(jì)者之一Roy Thomas Fielding博士提出,它包含了客戶(hù)端-服務(wù)器、無(wú)狀態(tài)、緩存、統(tǒng)一接口、分層系統(tǒng)五個(gè)必要架構(gòu)約束和按需代碼一個(gè)可選架構(gòu)約束。REST的出現(xiàn)是為了降低Web應(yīng)用開(kāi)發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性和可維護(hù)性。
1.2Web服務(wù)成熟度模型
2008年,Leonard Richardson提出一個(gè)Web服務(wù)成熟度模型,該模型對(duì)于Web服務(wù)成熟度層級(jí)的劃分是基于Web服務(wù)對(duì)于Web技術(shù)的支持程度,它描述了四個(gè)層級(jí)的Web服務(wù),分別從第0層到第3層。第0層服務(wù)的特點(diǎn)是HTTP只是作為傳輸協(xié)議,基于SOAP 的Web服務(wù)就屬于第0層類(lèi)型的服務(wù)。第1層服務(wù)引入資源的概念,使用符合REST風(fēng)格的URI來(lái)標(biāo)識(shí)系統(tǒng)中的資源。第2層服務(wù)在第1層的基礎(chǔ)上,使用HTTP方法來(lái)作為操作資源的統(tǒng)一接口,通常是HTTP get、post、put、delete四個(gè)方法。同時(shí),屬于該層的服務(wù)還使用不同的狀態(tài)碼(Status Code)來(lái)區(qū)別服務(wù)器響應(yīng)的結(jié)果。第3層是目前Web服務(wù)設(shè)計(jì)的最理想狀態(tài)。這一層級(jí)的服務(wù)應(yīng)用HATEOAS(Hypermedia as the Engine of Application State)設(shè)計(jì)模式,即超媒體作為應(yīng)用狀態(tài)引擎。HATEOAS的運(yùn)用使得客戶(hù)端和服務(wù)器完全解耦,打破了客戶(hù)端和服務(wù)器之間嚴(yán)格的契約,使得客戶(hù)端更加智能和自適應(yīng),也讓服務(wù)的演化和更新更加簡(jiǎn)單方便。
1.3REST開(kāi)發(fā)框架
在眾多REST開(kāi)發(fā)框架中,主要分為兩類(lèi):一類(lèi)是按照J(rèn)AX-RS(Java API for RESTful Web Services)規(guī)范的標(biāo)準(zhǔn)實(shí)現(xiàn)的,例如Jersey、Apache CXF和Apache Wink;另一類(lèi)是按照自定義方式實(shí)現(xiàn)的。例如Spring HATEOAS、Restlet和Django等。
Spring HATEOAS是Spring按照HATEOAS原則設(shè)計(jì)的,它提供了與Spring MVC共同開(kāi)發(fā)時(shí)方便創(chuàng)建REST表述的API,它能幫助開(kāi)發(fā)者更快地開(kāi)發(fā)最高成熟度的REST服務(wù)。由于Spring為各種業(yè)務(wù)領(lǐng)域和技術(shù)場(chǎng)景提供了一站式的解決方案,并與眾多開(kāi)源框架能夠方便整合。因此,鑒于開(kāi)發(fā)的一致性、簡(jiǎn)單性和服務(wù)的兼容性、可維護(hù)性,本平臺(tái)采用Spring進(jìn)行服務(wù)端的開(kāi)發(fā)。
經(jīng)過(guò)對(duì)民興村村民和村委會(huì)的需求調(diào)研,確定平臺(tái)的目標(biāo)是提高村委會(huì)村務(wù)管理效率,為村民提供一站式的公共服務(wù),村民可以通過(guò)PC或手機(jī)就可以足不出戶(hù)地辦理業(yè)務(wù)和獲取資訊。具體地說(shuō),平臺(tái)需求主要包括以下:
(1)對(duì)于村民而言,他們可以通過(guò)網(wǎng)頁(yè)或手機(jī)在線(xiàn)辦理戶(hù)籍證明、申請(qǐng)報(bào)建、醫(yī)保社保等業(yè)務(wù),還可以瀏覽村委會(huì)公開(kāi)的各類(lèi)信息和新聞,此外,還可以向村委會(huì)進(jìn)行意見(jiàn)反饋。
(2)對(duì)于村委會(huì)而言,他們可以通過(guò)平臺(tái)為村民提供戶(hù)籍證明、報(bào)建申請(qǐng)、醫(yī)保社保等各類(lèi)業(yè)務(wù)的在線(xiàn)辦理。此外,村委會(huì)可以通過(guò)平臺(tái)發(fā)布財(cái)務(wù),計(jì)生、宣傳、農(nóng)業(yè)等各類(lèi)信息和熱點(diǎn)新聞,以及推送重要的信息到村民手機(jī)。
(3)村委會(huì)可以發(fā)布公眾投票,從而村民通過(guò)PC和手機(jī)可以進(jìn)行無(wú)記名投票。
平臺(tái)的用例模型如圖1所示。
圖1 用例模型
3.1總體架構(gòu)設(shè)計(jì)
平臺(tái)的客戶(hù)端包括PC(瀏覽器)和Android手機(jī)端,兩類(lèi)客戶(hù)端共享同一個(gè)服務(wù)端,使用HTTP的方法進(jìn)行資源操作的請(qǐng)求。由于REST的應(yīng)用,請(qǐng)求將方法信息和作用域信息封裝在URI里。服務(wù)端的構(gòu)建采用分層體系。平臺(tái)的總體架構(gòu)如圖2所示。
圖2 總體架構(gòu)
3.2基于REST的服務(wù)端設(shè)計(jì)
(1)數(shù)據(jù)集規(guī)劃。平臺(tái)主要有以下數(shù)據(jù):用戶(hù)賬戶(hù)、醫(yī)保賬戶(hù)、社保賬戶(hù)、戶(hù)籍證明、報(bào)建申請(qǐng)、村民反饋、村委信息、熱點(diǎn)新聞、商業(yè)合同、投票等。
(2)資源規(guī)劃。根據(jù)需求信息和數(shù)據(jù)集,設(shè)計(jì)平臺(tái)的資源,并考慮客戶(hù)端在交互過(guò)程中可能的資源轉(zhuǎn)移過(guò)程,從而設(shè)計(jì)狀態(tài)轉(zhuǎn)移圖。表1列出電子村務(wù)平臺(tái)的資源。圖3展示了辦理戶(hù)籍證明的資源狀態(tài)轉(zhuǎn)移的過(guò)程。
(3)接口的設(shè)計(jì)?;赗EST架構(gòu)的Web服務(wù)采用HTTP的統(tǒng)一接口進(jìn)行資源操作。然而,對(duì)于每一個(gè)資源并不一定需要實(shí)現(xiàn)所有的HTTP方法。一般根據(jù)資源狀態(tài)轉(zhuǎn)移圖,將每一次引起資源狀態(tài)轉(zhuǎn)移的事件抽象為一次資源操作。
(4)資源的表述。資源的狀態(tài)在客戶(hù)端和服務(wù)端之間交互時(shí)可以采用多種格式進(jìn)行表述。在本平臺(tái)中,由于網(wǎng)頁(yè)前端采用了AJAX技術(shù)以及Android客戶(hù)端的使用,因此統(tǒng)一采用JSON作為資源表述格式。
(5)服務(wù)端返回狀態(tài)碼設(shè)計(jì)。REST風(fēng)格的Web服務(wù)需要使用不同狀態(tài)碼來(lái)區(qū)分響應(yīng)結(jié)果,從而客戶(hù)端可以通過(guò)狀態(tài)碼清晰地了解響應(yīng)的含義。例如,客戶(hù)端可能會(huì)創(chuàng)建一個(gè)已經(jīng)存在的村民賬戶(hù),從服務(wù)角度來(lái)說(shuō),這是修改已有賬戶(hù)卻未提供任何授權(quán)信息的請(qǐng)求,這時(shí)服務(wù)端應(yīng)該返回狀態(tài)碼409(沖突),而不是表示未授權(quán)的狀態(tài)碼401。這樣客戶(hù)端才能不被響應(yīng)代碼困惑。
表1 電子村務(wù)平臺(tái)資源
圖3 辦理戶(hù)籍證明資源狀態(tài)轉(zhuǎn)移過(guò)程
4.1電子村務(wù)平臺(tái)服務(wù)端的實(shí)現(xiàn)
構(gòu)建HATEOAS約束的REST服務(wù),需要在服務(wù)端的響應(yīng)表述中添加動(dòng)態(tài)鏈接信息,從而客戶(hù)端可以通過(guò)鏈接來(lái)發(fā)現(xiàn)可以觸發(fā)狀態(tài)轉(zhuǎn)換的動(dòng)作。而Spring HATEOAS則提供了簡(jiǎn)便的機(jī)制來(lái)實(shí)現(xiàn)。將資源表述類(lèi)繼承ResourceSupport類(lèi),可以方便地添加資源鏈接以及關(guān)系,這是通過(guò)Link對(duì)象實(shí)現(xiàn)的,它由rel(關(guān)系)屬性和href(超鏈接)屬性構(gòu)成。
Spring MVC中的控制器在創(chuàng)建單個(gè)資源的鏈接時(shí)都是通過(guò)硬編碼的方式實(shí)現(xiàn)的,這是不符合HATEOAS約束的。Spring HATEOAS通過(guò)ControllerLinkBuilder類(lèi)的linkTo方法,先指定Spring MVC控制器的Java類(lèi),再通過(guò)slash方法來(lái)找到下一級(jí)的路徑,最后生成具有rel屬性值(如self)的鏈接。在使用Controller-LinkBuilder生成鏈接時(shí),除了可以使用控制器類(lèi)之外,還可以通過(guò)methodOn方法來(lái)使用控制器類(lèi)中包含的方法。以村民資源表述類(lèi)VillagerResource為例,表2給出了該類(lèi)的代碼。
除了通過(guò)Spring MVC的控制器來(lái)創(chuàng)建資源鏈接,Spring HATEOAS還提供了從模型類(lèi)中創(chuàng)建鏈接的機(jī)制。通過(guò)在控制器類(lèi)中添加@ExposesResourceFor注解聲明需要暴露的模型類(lèi),如使用@ExposesResourceFor (Villager.class)即可暴露村民類(lèi)。之后需要在Spring MVC的配置類(lèi)中添加@EnableEntityLinks注解來(lái)啟用實(shí)體鏈接(EntityLinks)功能。在需要?jiǎng)?chuàng)建鏈接的控制器中,通過(guò)依賴(lài)注入的方式添加對(duì)EntityLinks的引用,就可以使用EntityLinks的linkToSingleResource方法創(chuàng)建指向單個(gè)資源的鏈接。
表2 VillagerResource類(lèi)
Rel("villager");this.add(linkTo(methodOn(VillagerRestController.class,userId).readVillager(userId).withSelfRel();}
4.2電子村務(wù)平臺(tái)客戶(hù)端的實(shí)現(xiàn)
電子村務(wù)平臺(tái)的客戶(hù)端有網(wǎng)頁(yè)端和Android終端。其中,網(wǎng)頁(yè)端采用Bootstrap和jQuery框架進(jìn)行開(kāi)發(fā)。Bootstrap的使用可以讓網(wǎng)頁(yè)適配不同屏幕大小的終端設(shè)備??蛻?hù)端的一些運(yùn)行界面如圖4和圖5所示。
電子村務(wù)平臺(tái)以村民為核心進(jìn)行需求建模,保證平臺(tái)的實(shí)用性。平臺(tái)采用REST式的Web服務(wù)架構(gòu),使不同客戶(hù)端可以共享同一后臺(tái)。平臺(tái)服務(wù)的設(shè)計(jì)滿(mǎn)足HATEOAS約束,使得客戶(hù)端和服務(wù)端之間變成松耦合,業(yè)務(wù)和邏輯相關(guān)的變化將被限制在服務(wù)端內(nèi),從而簡(jiǎn)化客戶(hù)端開(kāi)發(fā)和演化,提高平臺(tái)的擴(kuò)展性、可維護(hù)性。這為目前農(nóng)村不成熟的應(yīng)用場(chǎng)景提供了良好的解決方案。
圖4 戶(hù)籍證明辦理網(wǎng)頁(yè)端界面
圖5 戶(hù)籍證明辦理Android手機(jī)端界面
參考文獻(xiàn):
[1]盧義.重慶市榮昌縣農(nóng)村電子政務(wù)研究[D].重慶大學(xué),2014.
[2]王鳳云.電子村務(wù)系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)[J].山東農(nóng)業(yè)科學(xué),2014,46(5):18-25.
[3]王宏禹.新農(nóng)村電子村務(wù)的構(gòu)建[J].江西農(nóng)業(yè)大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版),2009,8(2):72-75.
[4]夏露.農(nóng)村電子政務(wù)的功能與建設(shè)內(nèi)容[J].湖北農(nóng)業(yè)科學(xué),2013,52(21):5354-5357.
[5]楊倩茹,黃夢(mèng)醒,萬(wàn)兵.基于云計(jì)算的農(nóng)村電子政務(wù)架構(gòu)研究[J].計(jì)算機(jī)與數(shù)字工程,2011,39(10):25-29.
[6]周海瓊.新農(nóng)村電子政務(wù)系統(tǒng)構(gòu)建的研究[D].華中師范大學(xué),2008.
Electronic village not only helps narrow digital gap between urban and rural area,but also benefits the problem-solving of agriculture,countryside and peasants.The proposed E-village platform based on REST models requirements of villagers live in Minxing Village,Guangzhou City.Web service satisfying HATEOAS constraint is adopted to design the server side of platform.In this way,backend can be shared by web page and android,and it breaks the strict contract between client and server,which makes platform more extensible and maintainable.
Keywords:
REST;Electronic Village;Web Service;HATEOAS
Design and Implementation of E-village Platform Based on REST
LI Bin-feng,CHEN Jian-guo,ZHU Ming-min
(College of Mathematics and Informatics,South China Agricultural University,Guangzhou 510642)
Abstract:
電子村務(wù)有利于縮小城鄉(xiāng)數(shù)字鴻溝,幫助解決三農(nóng)問(wèn)題?;赗EST架構(gòu)的電子村務(wù)平臺(tái)對(duì)廣州市民興村的需求進(jìn)行建模。電子村務(wù)平臺(tái)基于REST架構(gòu),服務(wù)端的設(shè)計(jì)滿(mǎn)足HATEOAS約束,不僅使網(wǎng)頁(yè)端和Android端可以共享同一后臺(tái),還打破客戶(hù)端和服務(wù)端之間嚴(yán)格的契約,從而使平臺(tái)具備良好的擴(kuò)展性、可維護(hù)性。
文章編號(hào):1007-1423(2016)15-0061-05
DOI:10.3969/j.issn.1007-1423.2016.15.015
作者簡(jiǎn)介:
李彬峰(1991-),男,廣東梅州人,碩士研究生,中級(jí)工程師,研究方向?yàn)楣芾硇畔⑾到y(tǒng)
陳建國(guó)(1963-),男(漢族),湖南岳陽(yáng)人,教授,研究方向?yàn)楣I(yè)工程
朱明敏(1992-)年11月,男,安徽安慶人,碩士研究生,研究方向?yàn)楣I(yè)工程
收稿日期:2016-03-27修稿日期:2016-05-10