段玉龍



摘 要:本文基于OAUTH、OPENAPI、REST等技術(shù)設(shè)計(jì)了一個(gè)快速開(kāi)發(fā)平臺(tái)框架,框架具有松耦合、高可擴(kuò)展性、開(kāi)發(fā)快速等特點(diǎn)。本平臺(tái)的主要優(yōu)勢(shì)在于:1.大規(guī)模系統(tǒng)拆分;2.OpenAPI在控制器層進(jìn)行設(shè)計(jì),同時(shí)采用REST風(fēng)格;3.界面調(diào)用OpenAPI采用JQuery的Ajax調(diào)用方式;4.可重用組件。
關(guān)鍵詞:OAUTH;OPENAPI;REST;開(kāi)放平臺(tái)
伴隨互聯(lián)網(wǎng)、智能手機(jī)技術(shù)的飛速發(fā)展,軟件行業(yè)也面臨著新的挑戰(zhàn)。傳統(tǒng)企業(yè)級(jí)軟件已經(jīng)轉(zhuǎn)變?yōu)樾∠到y(tǒng)集成的大規(guī)模軟件,傳統(tǒng)的先充分論證需求分析,然后按軟件工程的理論一步步按部就班的開(kāi)發(fā)模式已經(jīng)不適應(yīng)當(dāng)今軟件行業(yè)發(fā)展的速度了。另外,現(xiàn)今的軟件需求也變的越來(lái)越專業(yè)化、精細(xì)化,一個(gè)應(yīng)用或App只關(guān)注一個(gè)細(xì)節(jié)一個(gè)點(diǎn),一旦需求確認(rèn),需要在盡可能短的時(shí)間研發(fā)出來(lái)并上線,這樣才能更快的占有市場(chǎng),同時(shí)注意和使用用戶互動(dòng)、促進(jìn)用戶反饋意見(jiàn),然后在使用中迭代更新升級(jí)系統(tǒng),積累了一定用戶量后再逐步擴(kuò)展其他附帶功能。
這就要求我們開(kāi)發(fā)軟件模式需要從傳統(tǒng)軟件按部就班的開(kāi)發(fā)模式轉(zhuǎn)變?yōu)槊艚荨⒖焖俚牡_(kāi)發(fā)模式,敏捷快速不是單純的圖快,同時(shí)要兼顧系統(tǒng)的穩(wěn)定性、可擴(kuò)展性、魯棒性等各方面的性能的考慮,以便將來(lái)更好的迭代和擴(kuò)展。本文借鑒敏捷開(kāi)發(fā)、開(kāi)放平臺(tái)、OAUTH,REST等技術(shù),設(shè)計(jì)了一個(gè)快速開(kāi)發(fā)平臺(tái)框架:每個(gè)待開(kāi)發(fā)系統(tǒng)作為獨(dú)立子系統(tǒng)開(kāi)發(fā),最后集成到平臺(tái)中,提倡子系統(tǒng)專一化,一個(gè)子系統(tǒng)只干一件事,如果業(yè)務(wù)比較復(fù)雜則拆分為多個(gè)子系統(tǒng)開(kāi)發(fā);子系統(tǒng)直接通過(guò)開(kāi)發(fā)平臺(tái)技術(shù)通過(guò)OPENAPI相互調(diào)用,OPENAPI設(shè)計(jì)遵從RESTFUL風(fēng)格設(shè)計(jì),每個(gè)OPENAPI作為一個(gè)資源存在,調(diào)用使用HTTP協(xié)議,采用JSON格式傳遞數(shù)據(jù),這樣各子系統(tǒng)之間更具獨(dú)立性,耦合度更低,可擴(kuò)展性更強(qiáng);平臺(tái)本身已經(jīng)集成了基礎(chǔ)服務(wù)組件、日志組件、權(quán)限組件、認(rèn)證組件、調(diào)度組件、事務(wù)組件,待開(kāi)發(fā)系統(tǒng)只需要引入相應(yīng)的包并做簡(jiǎn)單的配置即可使用這些基礎(chǔ)組件,使開(kāi)發(fā)人員把主要精力集中在具體業(yè)務(wù)邏輯上。
1開(kāi)發(fā)平臺(tái)框架設(shè)計(jì)
本平臺(tái)的框架設(shè)計(jì)圖如圖1。
本文設(shè)計(jì)的快速開(kāi)發(fā)平臺(tái)以各子系統(tǒng)作為云服務(wù)單元,即系統(tǒng)開(kāi)發(fā)過(guò)程中的一個(gè)獨(dú)立項(xiàng)目,下面本文以一個(gè)類似淘寶網(wǎng)的小型購(gòu)物網(wǎng)站為例介紹下本平臺(tái)的具體設(shè)計(jì)和研發(fā)過(guò)程。
1.1 系統(tǒng)拆分
子系統(tǒng)的規(guī)模要適當(dāng),不要太大,如果待開(kāi)發(fā)的系統(tǒng)較大,對(duì)系統(tǒng)進(jìn)行拆分,使每個(gè)子系統(tǒng)只專注一項(xiàng)業(yè)務(wù),粒度要適中,保證每個(gè)子系統(tǒng)開(kāi)發(fā)簡(jiǎn)單高效。
本例中購(gòu)物網(wǎng)站系統(tǒng)規(guī)模較大,根據(jù)具體業(yè)務(wù),我們拆分為會(huì)員管理子系統(tǒng)、商品管理子系統(tǒng)、訂單子系統(tǒng)三個(gè)子系統(tǒng),其中支付和物流部分使用第三方平臺(tái)的Open API,每個(gè)子系統(tǒng)作為獨(dú)立工程研發(fā),可以分配不同研發(fā)人員進(jìn)行獨(dú)立研發(fā),而且每個(gè)子系統(tǒng)相對(duì)簡(jiǎn)單, 研發(fā)人員不必陷入復(fù)雜的業(yè)務(wù)邏輯上,大大提高了研發(fā)效率。如果需要調(diào)用其他子系統(tǒng)接口時(shí),使用Open API調(diào)用,如2.2節(jié)所述。
圖1 開(kāi)發(fā)平臺(tái)框架
1.2 子系統(tǒng)Open API設(shè)計(jì)與調(diào)用
每個(gè)子系統(tǒng)采用OPEN API為其他子系統(tǒng)或第三方系統(tǒng)提供接口,每個(gè)OPEN API使用RESTful風(fēng)格設(shè)計(jì),調(diào)用時(shí)使用HTTP協(xié)議調(diào)用,數(shù)據(jù)交換格式采用JSON格式。
下面以購(gòu)買商品為例說(shuō)明各子系統(tǒng)Open API的設(shè)計(jì)和調(diào)用過(guò)程,如圖2所示。首先調(diào)用認(rèn)證子系統(tǒng)登錄認(rèn)證(2.3節(jié)詳細(xì)介紹),然后調(diào)用商品管理子系統(tǒng)查詢商品API,選中要購(gòu)買的商品后,調(diào)用訂單子系統(tǒng)的購(gòu)買API,系統(tǒng)自動(dòng)調(diào)用會(huì)員管理子系統(tǒng)的獲得會(huì)員郵件地址信息API獲得郵寄地址信息,用戶選中或填寫(xiě)郵寄地址,調(diào)用訂單子系統(tǒng)的生成訂單API生成訂單,并置訂單狀態(tài)為未支付。用戶點(diǎn)擊支付按鈕,調(diào)用第三方支付系統(tǒng)如支付寶、網(wǎng)上銀行等,等待第三方系統(tǒng)返回結(jié)果,接收到支付成功結(jié)果后調(diào)用訂單子系統(tǒng)的修改訂單狀態(tài)API把訂單狀態(tài)置為已支付狀態(tài)。然后系統(tǒng)物流人員根據(jù)訂單調(diào)用第三方物流系統(tǒng)發(fā)貨,系統(tǒng)等待物流返回結(jié)果,接收到物流返回成功結(jié)果后調(diào)用訂單子系統(tǒng)的修改訂單狀態(tài)API把訂單狀態(tài)置為成功狀態(tài)。
圖2 購(gòu)買商品各子系統(tǒng)Open API調(diào)用流程
1.3 認(rèn)證子系統(tǒng)
認(rèn)證子系統(tǒng)已集成到框架中,為其他子系統(tǒng)或第三方系統(tǒng)提供認(rèn)證服務(wù),采用OAUTH技術(shù)實(shí)現(xiàn),如圖3為用戶訪問(wèn)會(huì)員管理子系統(tǒng)的認(rèn)證過(guò)程。
用戶訪問(wèn)會(huì)員管理子系統(tǒng),如查看個(gè)人資料等;系統(tǒng)自動(dòng)跳轉(zhuǎn)到認(rèn)證子系統(tǒng)的登錄頁(yè)面,提示用戶輸入用戶名密碼進(jìn)行授權(quán);用戶輸入用戶名密碼,由認(rèn)證子系統(tǒng)進(jìn)行密碼驗(yàn)證;驗(yàn)證成功后,認(rèn)證子系統(tǒng)會(huì)返回給會(huì)員管理子系統(tǒng)一個(gè)授權(quán)的令牌(Access Token),會(huì)員管理子系統(tǒng)或其他系統(tǒng)通過(guò)此令牌通過(guò)認(rèn)證子系統(tǒng)的Open API即可獲得用戶的基本信息。
圖3 獲取會(huì)員物流信息
1.4 權(quán)限子系統(tǒng)
權(quán)限子系統(tǒng)也已集成到框架中,為其他子系統(tǒng)或第三方系統(tǒng)提供權(quán)限管理服務(wù),采取RBAC模型(基于角色的訪問(wèn)控制)實(shí)現(xiàn),使用角色實(shí)現(xiàn)用戶和權(quán)限的邏輯分離。
各個(gè)子系統(tǒng)以O(shè)pen API的形式為其他系統(tǒng)提供調(diào)用,但不是任何系統(tǒng)或角色都可以隨便調(diào)用這些API的,需要具有一定的權(quán)限控制。如修改圖2中的修改訂單狀態(tài)接口對(duì)于普通會(huì)員是不開(kāi)放的,只針對(duì)后臺(tái)管理員有效。權(quán)限子系統(tǒng)已經(jīng)實(shí)現(xiàn)本功能,開(kāi)發(fā)人員只需在權(quán)限配置界面配置相應(yīng)的角色,及該角色受限訪問(wèn)的資源。
1.5 可重用基礎(chǔ)組件
基礎(chǔ)組件為子系統(tǒng)開(kāi)發(fā)提供一些常用的組件支持,子系統(tǒng)開(kāi)發(fā)時(shí)首先引入組件的jar包,然后在web.xml或Spring配置文件中引入相應(yīng)的配置即可使用組件,使用非常方便。
其中基礎(chǔ)服務(wù)組件提供對(duì)某數(shù)據(jù)模型的增刪改查操作的支持,和RESTFUL風(fēng)格中的四個(gè)HTTP動(dòng)作一一對(duì)應(yīng),開(kāi)發(fā)人員不需要再關(guān)心單個(gè)數(shù)據(jù)模型的增刪改查邏輯,只需要關(guān)心自己業(yè)務(wù)系統(tǒng)的復(fù)雜業(yè)務(wù)邏輯。日志組件提供系統(tǒng)對(duì)日志的支持等。
2 結(jié)語(yǔ)
本文基于OAUTH、OPENAPI等技術(shù)設(shè)計(jì)了一個(gè)快速開(kāi)發(fā)平臺(tái)框架,框架具有松耦合、高可擴(kuò)展性、開(kāi)發(fā)快速等特點(diǎn)。同時(shí)介紹了本平臺(tái)中的一些設(shè)計(jì)原則:大規(guī)模系統(tǒng)拆分;OpenAPI在控制器層進(jìn)行設(shè)計(jì),同時(shí)采用REST風(fēng)格;界面調(diào)用OpenAPI采用JQuery的Ajax調(diào)用方式;可重用組件。
參考文獻(xiàn):
[1] 朱蔚恒,周偉,龍舜.開(kāi)放平臺(tái)解決方案及其安全策略研究[J].計(jì)算機(jī)工程.2012(12):265-267.
[2] 時(shí)子慶,劉金蘭,譚曉華.基于OAuth2.0的認(rèn)證授權(quán)技術(shù)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用.2012(03):260-264.
[3] 丁波,晁愛(ài)農(nóng).基于Struts2框架的AJAX開(kāi)發(fā)研究[J].計(jì)算機(jī)工程與設(shè)計(jì).2009(16):3910-3913.
[4] 相方莉.云計(jì)算基礎(chǔ)設(shè)施中的性能瓶頸的識(shí)別和優(yōu)化[J].計(jì)算機(jī)系統(tǒng)應(yīng)用.2013(12):168-172.
[5] 李淑芝,劉鋒,楊書(shū)新.基于云仿真的Web服務(wù)選擇研究[J].計(jì)算機(jī)應(yīng)用研究.2013(04):1069-1071.
[6] 李小寧,李磊,金連文,等.基于OpenStack構(gòu)建私有云計(jì)算平臺(tái)[J].電信科學(xué).2012(09):1-8.
[7] 胡曉玲,強(qiáng)桂.基于云計(jì)算的教育技術(shù)實(shí)驗(yàn)平臺(tái)構(gòu)建——以3D MAX課程為例[J].實(shí)驗(yàn)技術(shù)與管理.2012(08):88-91.
[8] 羅國(guó)瑋,蘭瑞樂(lè).基于云計(jì)算的高校科研實(shí)驗(yàn)平臺(tái)構(gòu)建研究[J].實(shí)驗(yàn)技術(shù)與管理.2012(04):115-117.
[9] 馬少兵,馬自衛(wèi).數(shù)字圖書(shū)館私有云平臺(tái)的構(gòu)建研究和應(yīng)用開(kāi)發(fā)[J].現(xiàn)代圖書(shū)情報(bào)技術(shù).2011(04):9-16.