胡彥婷
摘 要:為了改善傳統(tǒng)Web系統(tǒng)存在的問題,研究了基于表述性狀態(tài)轉(zhuǎn)移(representational state transfer,REST)的Web系統(tǒng)設(shè)計,對其如何應用于棉花交易平臺的構(gòu)建進行了介紹。實踐表明,基于REST的棉花Web交易系統(tǒng)不僅能滿足目前棉花電商交易需求,而且具有良好的擴展性和可維護性。
關(guān)鍵詞關(guān)鍵詞:REST;Web系統(tǒng);JSON;HTTP;資源表示;電商平臺設(shè)計
DOIDOI:10.11907/rjdk.161405
中圖分類號:TP319
文獻標識碼:A 文章編號:1672-7800(2016)008-0122-02
0 引言
互聯(lián)網(wǎng)的迅速發(fā)展,對Web系統(tǒng)設(shè)計提出了新的要求。傳統(tǒng)Web系統(tǒng)存在設(shè)計不規(guī)范、接口不統(tǒng)一、擴展困難、難于集成等問題。為了改善此狀況,Roy Thomas Fielding[1]提出了表述性狀態(tài)轉(zhuǎn)移(Representational State Transfer,REST) 的設(shè)計風格,并將其用于規(guī)范Web系統(tǒng)設(shè)計。REST具有輕量級、平臺無關(guān)性、高擴展性、便于緩存等優(yōu)點[2],已被Google、Amazon、yahoo、騰訊、新浪、阿里巴巴等國內(nèi)外多家企業(yè)采用[3]。
本文將以一個大宗農(nóng)產(chǎn)品電商平臺——大淵博棉花交易中心(www.dybcotton.com)為例,對REST在Web系統(tǒng)設(shè)計中的應用進行分析和討論。
1 REST風格
REST包含了4個方面的核心內(nèi)容:①資源(Resource);②資源表述(Representation);③狀態(tài)轉(zhuǎn)移(State Transfer);④統(tǒng)一接口(Uniform Interface)。資源是系統(tǒng)中業(yè)務實體的抽象,可以由一個或一組統(tǒng)一資源定位符URI(Uniform Resource Identifier)進行標識。URI既是資源的名稱,也是資源在系統(tǒng)中的地址,用戶通過資源的URI與資源進行交互。資源表述是指資源在特定時刻的狀態(tài),可以在用戶和系統(tǒng)間傳遞,其有多種形式,如HTML、XML、JSON、文本等。狀態(tài)轉(zhuǎn)移指資源表述在客戶端和服務器端之間的傳遞,通過這種傳遞,實現(xiàn)對資源的操作。統(tǒng)一接口是REST對資源操作方式的規(guī)范,要求對每種資源都以統(tǒng)一的方式操作。用戶通過請求URI訪問資源,也可在請求中附加元數(shù)據(jù)Metadata來決定資源的表現(xiàn)形式,然后通過HTTP協(xié)議的GET、PUT、POST和DELETE方法[4]實現(xiàn)對資源的操作。
2 大淵博平臺系統(tǒng)設(shè)計
棉花是重要的大宗農(nóng)產(chǎn)品,目前全國每年生產(chǎn)皮棉400多萬噸,其中70%~80%產(chǎn)自新疆,距離遙遠,種植和加工分散,信息獲取不易,造成交易不便。在傳統(tǒng)貿(mào)易模式中人們要獲取貨源信息,只能通過電話、傳真或派專人出差到產(chǎn)地企業(yè),成本高、效率低,信息滯后嚴重。為了解決傳統(tǒng)貿(mào)易存在的問題,有必要利用互聯(lián)網(wǎng)高效便捷的優(yōu)點,建立統(tǒng)一規(guī)范的電商交易平臺。鑒于此,本系統(tǒng)的目標是建立包含棉花加工信息、質(zhì)量信息、倉儲物流信息及交易信息的棉花電商平臺,降低交易成本、提高貿(mào)易效率。
本系統(tǒng)從邏輯上分為業(yè)務功能、支撐模塊、底層服務3部分,如圖1所示。
(1)業(yè)務功能模塊主要負責與用戶交互,根據(jù)用戶請求將數(shù)據(jù)以不同的形式展現(xiàn)出來。目前數(shù)據(jù)展示的方式有兩種,一種是用于桌面系統(tǒng)的Web網(wǎng)頁形式,數(shù)據(jù)以HTML+AJAX+JSON的形式展現(xiàn)。另一種是用于Android和IOS系統(tǒng)手機端的APP,數(shù)據(jù)以JSON的形式展現(xiàn)。兩種方式均通過REST接口從服務器端獲取數(shù)據(jù)。
(2)支撐模塊為業(yè)務功能提供服務支撐,完成用戶管理、訂單消息分發(fā)、系統(tǒng)事件記錄、數(shù)據(jù)抓取及統(tǒng)計挖掘等功能。
(3)底層服務包含數(shù)據(jù)存儲、數(shù)據(jù)緩存、支付接口和均衡負載4部分。本系統(tǒng)使用MySQL作為數(shù)據(jù)存儲,用Memcache作為數(shù)據(jù)緩存,集成了支付寶和銀聯(lián)支付接口,使用Apache反向代理實現(xiàn)均衡負載。
3 REST在系統(tǒng)中的應用
3.1 系統(tǒng)框架結(jié)構(gòu)
本系統(tǒng)使用PHP語言實現(xiàn)的REST風格框架,該框架結(jié)構(gòu)如圖2所示。在框架中,URL映射由Apache mod_rewrite[5]實現(xiàn),前端控制器由設(shè)計模式中的Front Controller模式[6]實現(xiàn),資源以HTML或JSON格式展現(xiàn)??蚣艿幕緢?zhí)行步驟為:①用戶請求通過URL映射轉(zhuǎn)發(fā)至前端控制器;②前端控制器對請求進行解析,識別所需要的服務;③框架調(diào)用對應的資源完成業(yè)務操作。
根據(jù)REST設(shè)計規(guī)范,在進行系統(tǒng)設(shè)計時,首先是確定系統(tǒng)中的實體,即資源,并為資源指定唯一的URI;然后,根據(jù)業(yè)務邏輯確定資源的操作方式;最后,根據(jù)用戶需求確定資源的表現(xiàn)形式。下面以棉花在線購買業(yè)務為例進行討論。
3.2 資源劃分與命名
構(gòu)建REST風格的系統(tǒng)最重要的一步就是識別系統(tǒng)中的資源。本系統(tǒng)包含的主要資源為:①棉花批次(Batch),其為棉花加工、交易的基本單位,具有國家統(tǒng)一分配的批次編碼;②軋花廠(Producer),即為棉花生產(chǎn)加工企業(yè),具有國家統(tǒng)一分配的企業(yè)代碼。該代碼與棉花批次編碼為一對多關(guān)系;③監(jiān)管倉庫(Entrepot),其為國家統(tǒng)一認證的棉花專用監(jiān)管庫,主要對棉花進行第三方監(jiān)管及對棉花質(zhì)量的公檢。很多情況下,倉庫也作為軋花廠的代理人,進行棉花貿(mào)易;④買家(Buyer),即棉花購買者,通常為紡織企業(yè)或貿(mào)易商;⑤交易訂單(Order),其包含購買批次列表,買方、賣方、支付方式等信息,由買家建立并提交給賣家。
確定了資源之后,即可為資源指定URI,其規(guī)則為“http://服務器根目錄/資源類別/資源標識”。根據(jù)REST規(guī)范,系統(tǒng)中每個URI只能指向一個資源,同時URI只表示資源,不包含對資源的操作。在本系統(tǒng)中,以“http://www.dybcotton.com/”作為系統(tǒng)的根目錄,用URI模板來表示資源。URI模板定義了URI的格式,其中包含一系列變量,這些變量在運行時會被實際參數(shù)所取代。例如,http://www.dybcotton.com/batch/{batchId},該模板定義了棉花批次的訪問方式,變量{batchId}用來表示棉花批次編碼,在運行時{batchId}被實際的批次編號所取代。根據(jù)這種方法,本系統(tǒng)為每個資源設(shè)定的URI模板如表1所示。
3.3 資源統(tǒng)一接口定義
完成資源的劃分與命名之后,下一步為資源定義相應的操作接口。在REST規(guī)范中,用HTTP協(xié)議的GET、PUT、POST、DELETE方法對資源分別進行創(chuàng)建(Create)、讀?。≧ead)、更新(Update)及刪除(Delete)操作。
雖然HTTP協(xié)議定義了4種方法,但目前主流瀏覽器對4種HTTP方法的支持并不統(tǒng)一,只有GET和POST方法得到了廣泛的支持,而PUT和DELETE方法在很多瀏覽器上沒有支持或只部分支持。為了保持瀏覽器兼容性,當前通常用POST方法替代PUT和DELETE方法,完成資源的添加、更新及刪除操作。鑒于此,本系統(tǒng)設(shè)計的資源操作接口如表2所示。
3.4 資源表現(xiàn)形式
在對資源命名并為其定義了統(tǒng)一的操作接口后,需要考慮通過URI對資源進行操作時,客戶端和服務器端應采用哪種數(shù)據(jù)格式進行交互。REST規(guī)范并未限定數(shù)據(jù)交互的格式,允許純文本、HTML、二進制數(shù)據(jù)、XML、JSON等多種格式,其中XML和JSON是目前應用最為廣泛的格式。本系統(tǒng)采用JSON作為數(shù)據(jù)交互格式。JSON是一種輕量、冗余少、結(jié)構(gòu)簡單、與平臺無關(guān)、方便程序解析的數(shù)據(jù)格式[7]。
下面以客戶端請求加工企業(yè)代碼為65551的軋花廠信息為例,來說明本系統(tǒng)如何根據(jù)請求返回JSON格式的軋花廠資源信息。
根據(jù)表2,要獲取軋花廠信息,客戶端向http://www.dybcotton.com/producer/65233發(fā)送GET請求,為保證服務器端正確返回JSON格式響應,還需要在HTTP請求的Header中增加元數(shù)據(jù)“Accept=application/json”。當服務器端接收到請求后,將返回如下JSON數(shù)據(jù):
{
“producerID”:”65551”,
“producerName”:” 奎屯康泰棉麻有限公司”,
“address”: “奎屯市獨山子經(jīng)濟技術(shù)開發(fā)區(qū)”,
……
}
通過上述步驟完成對資源的訪問。類似地,可以使用HTTP的POST方法向資源URI發(fā)送JSON格式的數(shù)據(jù),以進行資源的創(chuàng)建、更新和刪除操作。
4 結(jié)語
本文研究了REST規(guī)范對Web系統(tǒng)設(shè)計的指導作用,并將其應用于大淵博棉花交易系統(tǒng)的設(shè)計與開發(fā)。該系統(tǒng)滿足了目前棉花業(yè)務需求,具有良好的擴展性和可維護性,能很好地服務于棉花產(chǎn)業(yè)鏈的生產(chǎn)和銷售環(huán)節(jié),成為國內(nèi)有一定影響力的農(nóng)產(chǎn)品電商平臺。
參考文獻:
[1] R T FIELDING.Architectural styles and the design of network-based software architectures[D].Irvine:University of California,2000.
[2] 盛偉翔,王昊,董曉睿,等.基于REST架構(gòu)風格的精品課程平臺建設(shè)[J].南昌大學學報:理科版,2015,39(3): 251-254.
[3] 陳彥名.REST API技術(shù)及在移動通信網(wǎng)絡管理中的應用[J].電信工程技術(shù)與標準化, 2015(5): 81-85.
[4] Hypertext transfer protocol——HTTP/1.1 [EB/OL] .https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html.
[5] Apache module mod_rewrite[EB/OL].http://httpd.apache.org/docs/current/mod/mod_rewrite.html.
[6] MARTIN FOWLER.Patterns of enterprise application architecture[M].Boston: Addison-Wesley,2002.
[7] 張滬寅,屈乾松,胡瑞蕓.基于JSON的數(shù)據(jù)交換模型[J].計算機工程與設(shè)計,2015,36(12): 3381-3384.
(責任編輯:杜能鋼)