白忠軍 孔廣黔 吳云
摘 要:針對(duì)傳統(tǒng)校園二手商品交易的不足,結(jié)合高校特定區(qū)域的優(yōu)勢(shì)以及RESTful架構(gòu)風(fēng)格的特性,提出基于RESTful的校園二手商品交易系統(tǒng)。對(duì)系統(tǒng)進(jìn)行總體架構(gòu)、功能模塊、數(shù)據(jù)庫(kù)以及RESTfulAPI設(shè)計(jì),運(yùn)用Python語(yǔ)言、ORM技術(shù)以及Flask框架,實(shí)現(xiàn)了系統(tǒng)的商品發(fā)布、商品分類展示、商品搜索、商品交易等主要功能。實(shí)際測(cè)試與應(yīng)用結(jié)果表明,該系統(tǒng)運(yùn)行比較穩(wěn)定,具有較強(qiáng)的擴(kuò)展性,能夠較好地滿足大學(xué)生進(jìn)行閑置物品交易的需求。
關(guān)鍵詞:校園二手商品;RESTful;Python語(yǔ)言;ORM技術(shù);Flask框架
中圖分類號(hào):TP311.5
文獻(xiàn)標(biāo)志碼:A
0 引言
隨著學(xué)生購(gòu)買能力的提高以及每年升學(xué)和畢業(yè),在大學(xué)校園里存在著各種各樣的二手物品。這些物品食之無(wú)味,棄之可惜,于是出現(xiàn)了校園二手商品買賣,從張貼小廣告到沿路擺攤設(shè)點(diǎn),這種經(jīng)營(yíng)方式不但破壞校園的環(huán)境衛(wèi)生,而且不能滿足校園二手商品暢通交易。隨著近年來(lái)因特網(wǎng)在高校的迅速普及,加之二手商品交易需求的日益增長(zhǎng),各大高校紛紛建立起自己的二手商品交易平臺(tái),其開(kāi)發(fā)技術(shù)由本地服務(wù)發(fā)展到網(wǎng)絡(luò)服務(wù)(Web Serv-ice)。
Web Service的本質(zhì)是通過(guò)網(wǎng)絡(luò)調(diào)用其他網(wǎng)站的資源,與本地服務(wù)相比,它具有平臺(tái)無(wú)關(guān)性、跨越防火墻以及編程語(yǔ)言無(wú)關(guān)性等優(yōu)勢(shì)[1-2]。WebService的兩種主要方式是SOAPc3](英文全稱:Simple Object Access Protocol)和RESTful[4-6](英文全稱:Representational State Transfer),SOAP是一種基于XML的數(shù)據(jù)交換協(xié)議規(guī)范;RESTful是一種軟件架構(gòu)風(fēng)格,提供了設(shè)計(jì)原則和約束條件。與SOAP相比,RESTful有三個(gè)重要特性[7-8]:一是充分利用HTTP協(xié)議本身語(yǔ)義,規(guī)范了請(qǐng)求動(dòng)作的使用;二是暴露資源存在,URI透明地顯示了請(qǐng)求的資源;三是無(wú)狀態(tài)性,不用考慮上下文以及當(dāng)前狀態(tài),極大的降低了復(fù)雜度。
針對(duì)傳統(tǒng)校園二手商品交易的不足,以及RESTful的特性,提出基于RESTful的校園二手商品交易系統(tǒng),充分利用網(wǎng)絡(luò)設(shè)備資源,對(duì)高校的二手商品交易市場(chǎng)進(jìn)行系統(tǒng)管理,創(chuàng)建節(jié)約型校園。
1 相關(guān)技術(shù)介紹
本系統(tǒng)基于RESTful API設(shè)計(jì)風(fēng)格進(jìn)行API設(shè)計(jì),同時(shí)運(yùn)用Python語(yǔ)言以及ORM、Flask等技術(shù),實(shí)現(xiàn)了系統(tǒng)功能。
(1) RESTful API:API是系統(tǒng)前后端交互數(shù)據(jù)的接口,RESTful API設(shè)計(jì)風(fēng)格一般滿足三個(gè)約束[9-11]:第一,把網(wǎng)絡(luò)上的所有事物抽象成資源,每一個(gè)資源都有唯一的資源標(biāo)識(shí)符URI;第二,RESTful使用的是標(biāo)準(zhǔn)的HTTP方法,常用的有四種方法:GET(獲取資源)、POST(新建資源)、PUT(更新資源)、DELETE(刪除資源);第三,系統(tǒng)前后端進(jìn)行數(shù)據(jù)傳輸一般采用JSON格式。
(2) Python語(yǔ)言:Python是一種面向?qū)ο蟮慕忉屝驼Z(yǔ)言,具有豐富和強(qiáng)大的庫(kù),常被稱作膠水語(yǔ)言,它具有免費(fèi)開(kāi)源、可移植性、運(yùn)行速度快等特性[12]。
(3) ORM技術(shù):對(duì)象關(guān)系映射(ObjectRelation Mapping,簡(jiǎn)稱ORM)是指在操縱數(shù)據(jù)庫(kù)表的時(shí)候,不需要用復(fù)雜的soL語(yǔ)句,而是簡(jiǎn)單的操作實(shí)體對(duì)象的屬性和方法[13-14]。ORM的一個(gè)重要目標(biāo)是提供能兼容眾多數(shù)據(jù)庫(kù)(如soLite、MysoL、 Postgres、 Oracle、 Ms-soL 以及soLServer)的企業(yè)級(jí)持久性模型。
(4) Flask框架:Flask是一個(gè)使用Python語(yǔ)言編寫的輕量級(jí)Web應(yīng)用框架,它使用簡(jiǎn)單的核心[15],用extension增加其他功能,比如用Flask-extension加入ORM這個(gè)功能。
2 系統(tǒng)設(shè)計(jì)
2.1 總體架構(gòu)設(shè)計(jì)
由于考慮到系統(tǒng)的穩(wěn)定性、安全性及可維護(hù)性等特點(diǎn),本系統(tǒng)采用分層架構(gòu)開(kāi)發(fā),分層架構(gòu)可以使得層與層之間的耦合度盡可能降低,以保證開(kāi)發(fā)過(guò)程中不會(huì)相互干擾,提高工作效率。如圖1所示,系統(tǒng)架構(gòu)分為數(shù)據(jù)層(Data Layer)和應(yīng)用層(Application Layer)。
(1)數(shù)據(jù)層:即系統(tǒng)后端,用MysoL數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù);與數(shù)據(jù)庫(kù)交互采用Python第三方庫(kù)SQ—LAlchemy對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查,實(shí)現(xiàn)ORM技術(shù);DBmodel是系統(tǒng)創(chuàng)建的所有映射類;后端服務(wù)用Python的Web應(yīng)用框架Flask;后端的單元測(cè)試用Python第三方庫(kù)Nose,為前端提供可驗(yàn)證的交付產(chǎn)品。
(2)應(yīng)用層:即系統(tǒng)前端,采用HTML5和CSS3來(lái)實(shí)現(xiàn)靜態(tài)頁(yè)面設(shè)計(jì)與布局;前端框架用目前很受歡迎的Bootstrap;采用JavaScript和AJAX創(chuàng)建動(dòng)態(tài)頁(yè)面效果并且與后端進(jìn)行數(shù)據(jù)交互。系統(tǒng)前端文件主要分為頁(yè)面文件( pages)和靜態(tài)文件( static),其中每個(gè)頁(yè)面有對(duì)應(yīng)的css樣式和js交互代碼,另外將頁(yè)面中的圖片存放于images文件。
系統(tǒng)前后端數(shù)據(jù)交互通過(guò)RESTful API實(shí)現(xiàn),API將前端請(qǐng)求參數(shù)通過(guò)AJAX對(duì)象發(fā)送到系統(tǒng)后端,后端根據(jù)API中的URI找到處理函數(shù),進(jìn)行邏輯處理之后將結(jié)果以JSON格式返回給前端。
2.2 功能模塊設(shè)計(jì)
本系統(tǒng)主要實(shí)現(xiàn)商品管理和用戶管理兩大功能模塊:
(1)商品管理:商品管理分為商品發(fā)布、商品搜索、商品推薦、商品分類展示、訂單處理、購(gòu)物車等模塊。商品發(fā)布模塊可以輸入主題、價(jià)格、描述以及上傳多張圖片;商品搜索模塊是通過(guò)關(guān)鍵詞快速找到用戶所需要的商品;商品推薦模塊是根據(jù)用戶的歷史數(shù)據(jù)把商品個(gè)性化推薦給用戶;商品分類展示模塊是在系統(tǒng)主界面,以“最新”、“最熱”和“推薦”三個(gè)類別把商品展示給用戶;訂單處理是用戶下單后,進(jìn)行支付的過(guò)程;購(gòu)物車是用戶暫時(shí)選中的商品列表,可以靈活的刪除增加商品,修改商品數(shù)量等。