直播中
本文是架構(gòu)Web服務(wù)的系列文章的第四篇,繼探討了Web服務(wù)的商業(yè)需求,技術(shù)定義和技術(shù)規(guī)范以及現(xiàn)有現(xiàn)有的Web服務(wù)實踐之后,通過使用一個具體的案例開始對Web服務(wù)實戰(zhàn)的篇章。在本文中給出了一個實際的具有實用性并且能夠延伸出去的計算機產(chǎn)品交易市場的案例,通過簡要的系統(tǒng)分析、模塊劃分,對松散系統(tǒng)間待交換的數(shù)據(jù)進行了界分,同時為定義基于Web服務(wù)的API的數(shù)據(jù)結(jié)構(gòu)奠定了系統(tǒng)和分析的基礎(chǔ)。
在先前的文章系列里面,我已經(jīng)對Web服務(wù)的商業(yè)需求、Web服務(wù)的技術(shù)實現(xiàn)以及Web服務(wù)當前的應(yīng)用以及開發(fā)工具做了全面的介紹,那么在接下來的文章中,我將結(jié)合一個實例來詳細地描述如何真正地規(guī)劃、設(shè)計和創(chuàng)建一個Web服務(wù)的具體應(yīng)用。
本文所引用的資源主要包括兩類,一類是Web服務(wù)的技術(shù)資源網(wǎng)站,包含了大量Web服務(wù)的技術(shù)信息,另一類是Web服務(wù)“stack"系列技術(shù)規(guī)范,他們是一個整體的技術(shù)體系,包括UDDI、SOAP、WSDL、XML等。本文的最后給出了這些資源的鏈接,有興趣的讀者可以通過這些資源鏈接找到所需的內(nèi)容。
案例需求描述
在這里我們假設(shè)應(yīng)用背景是一個計算機產(chǎn)品銷售市場,其中的角色及其對應(yīng)的行為描述如下:
計算機產(chǎn)品交易市場,該市場是聯(lián)系計算機產(chǎn)品生產(chǎn)商/零售商與消費者之間的營銷平臺。其職責和功能包括:收集并發(fā)布來自各個計算機產(chǎn)品生產(chǎn)商/零售商的產(chǎn)品目錄;接受消費者的購買請求并可靠地遞送給生產(chǎn)商/零售商系統(tǒng)完成購買事務(wù);采集來自消費者的消費反饋,給出商品購買的導(dǎo)引建議,并傳送給生產(chǎn)商/零售商。
生產(chǎn)商/零售商,這是直接銷售計算機產(chǎn)品的商家,他能夠通過自己的Web發(fā)布產(chǎn)品目錄,同時也能將目錄傳送給計算機產(chǎn)品交易市場。他能夠接受訂單(來自自己的Web網(wǎng)站或者來自計算機產(chǎn)品交易市場)并轉(zhuǎn)入內(nèi)部管理系統(tǒng),至于資金流和物流則由離線系統(tǒng)完成。
消費者,計算機產(chǎn)品的購買者(可能是個人,也可能是企業(yè)),他能夠訪問計算機產(chǎn)品目錄,能夠利用在線的定購服務(wù)進行購買。
通過對以上角色及其行為的分析,我們認為在最終的實現(xiàn)系統(tǒng)中應(yīng)該有這樣幾種概要層次上的對象:
產(chǎn)品目錄,產(chǎn)品目錄由生產(chǎn)商/零售商產(chǎn)生,由計算機產(chǎn)品交易市場匯總歸類,由消費者瀏覽使用。
訂單,訂單由消費者生成,由計算機產(chǎn)品交易市場傳遞,由生產(chǎn)商/零售商接受。
反饋信息,由消費者產(chǎn)生,由計算機產(chǎn)品交易市場匯總歸類,由消費者和生產(chǎn)商/零售商使用。
用戶,用戶分兩類,一類是消費者用戶,一類是生產(chǎn)商/零售商用戶,分別用于處理兩類事務(wù)。
應(yīng)用的系統(tǒng)架構(gòu)
綜合上面的分析,我們可以將整個系統(tǒng)按如下架構(gòu)劃分:
Figure 1. 系統(tǒng)劃分概要
大家可能會發(fā)現(xiàn),Marketplace System和Retailer System這兩個系統(tǒng)沒什么大區(qū)別嘛? 的確是這樣,我們在設(shè)計的時候應(yīng)當無時無刻不能忘記"重用"這個概念,重用的組件越多,開發(fā)的代價就越少,維護的代價也越低,可擴展性也就越好,當然重用不能導(dǎo)致功能的異化,這也是我們需要注意的。
下面我花一點篇幅稍微解析一下框架中的三個主要服務(wù):Catalog Service、Order Service和Feedback Service。
Catalog Service
對于這個服務(wù)而言,Retailer System中的Catalog Service應(yīng)當是Marketplace System功能的子集。Retailer System中,Catalog Service應(yīng)當具備如下功能:
類別(Category)管理,包括增加一個Category、刪除一個Category、修改一個Category等;
產(chǎn)品(Product)管理,包括增加一個Product、刪除一個Product、修改一個Product、移動一個Product(從一個Category下移動到另一個Category下)等;
數(shù)據(jù)交換,包括單個類別下所有產(chǎn)品的導(dǎo)入導(dǎo)出(Import/Export),單個產(chǎn)品數(shù)據(jù)的導(dǎo)入導(dǎo)出,整個類別樹的導(dǎo)入導(dǎo)出等;
數(shù)據(jù)備份,整個目錄下所有產(chǎn)品數(shù)據(jù)的備份/恢復(fù)等。
而Marketplace System中,需要增加一個功能:在數(shù)據(jù)交換和數(shù)據(jù)備份模塊應(yīng)當提供對指定數(shù)據(jù)擁有者的相關(guān)數(shù)據(jù)的操作,比如導(dǎo)出某個類別下IBM的所有產(chǎn)品等等。
Order Service
對于這個服務(wù)而言,Retailer System中的Order Service和Marketplace System中的Order Service可以說基本沒有什么本質(zhì)上的差別。他們都將具備如下功能:
接受訂單
向其他接受訂單的服務(wù)發(fā)送訂單
兩者的區(qū)別,僅僅在于Retailer System中的Order Service接受的訂單來自用戶界面,而需要向Marketplace System中的Order Service傳送。Marketplace System中的Order Service接受的訂單來自Retailer System中的Order Service,而需要向自己內(nèi)部的企業(yè)應(yīng)用傳送訂單。
Feedback Service
對于Feedback Service而言,在兩個系統(tǒng)中的地位與Catalog Service是類似的。
反饋信息(Feedback)管理,包括增加一條反饋信息、刪除一條反饋信息、修改一條反饋信息等,反饋信息可以掛在Category下,也可以掛在Product下(有針對一類產(chǎn)品的評測報告,也有針對一個產(chǎn)品的使用評價等);
數(shù)據(jù)交換,包括與單個類別關(guān)聯(lián)或與單個產(chǎn)品關(guān)聯(lián)的反饋信息的導(dǎo)入導(dǎo)出(Import/Export),以及與單個用戶(Retailer用戶,數(shù)據(jù)擁有者)相關(guān)的所有反饋信息的導(dǎo)入導(dǎo)出等;
Feedback可以看作是與整個產(chǎn)品目錄樹的各個結(jié)點相關(guān)聯(lián)的評論文章。不僅在Marketplace系統(tǒng)中由消費者發(fā)布并歸消費者查詢,同時也將在相關(guān)的Retailer系統(tǒng)保存并可供Retailer使用。
交互,交互些什么?
我們將以上功能描述加以總結(jié),去除內(nèi)部實現(xiàn)的部分,我們可以發(fā)現(xiàn)在Internet上需要傳輸?shù)臄?shù)據(jù)的邏輯視圖如下:
Figure 1. 數(shù)據(jù)實體關(guān)系圖
其中黃色的三個實體完全可以看成是一個樹狀的信息目錄,其中有三個層次的結(jié)點:Category,Product和Feedback,Category的子結(jié)點可以是Category、Product和Feedback,而Product的子節(jié)點只能是Feedback,整個目錄樹的根結(jié)點是Category。
而對于每個Product而言,都有一個數(shù)據(jù)擁有者,這個數(shù)據(jù)擁有者應(yīng)當是Marketplace中的一個Retailer帳號。
另一類實體是訂單,對于一張訂單而言,將可以包含多個Product的定購記錄,以及定購對象:某個Retailer。
在系統(tǒng)之間交互數(shù)據(jù)是交互的第一層次:數(shù)據(jù)交換,然而對于Web服務(wù)而言,光光有數(shù)據(jù)交換是不夠的,應(yīng)當提供更高層次:服務(wù)集成的支持。
因此,交互的內(nèi)容不光包括互相交互的數(shù)據(jù),同時應(yīng)當包含對數(shù)據(jù)的操作(比如數(shù)據(jù)請求,數(shù)據(jù)添加,數(shù)據(jù)更新等等)。這些往往會對應(yīng)與服務(wù)端的一個處理模塊。
無論是對數(shù)據(jù)的操作,還是數(shù)據(jù)本身,為了在系統(tǒng)與系統(tǒng)之間進行交互,尤其是異構(gòu)平臺之間,我們需要將所有的操作(服務(wù)調(diào)用)和操作的數(shù)據(jù)(服務(wù)調(diào)用的參數(shù)和返回值)進行規(guī)范化的描述,形成規(guī)范文檔后發(fā)布以供所有需要參與互操作的系統(tǒng)共同遵守。
為什么選擇基于Web服務(wù)的解決方案?
我在前面已經(jīng)就為什么電子商務(wù)需要Web服務(wù)作了初步的論述。電子商務(wù)需要擺脫獨立解決方案的實現(xiàn)模式,需要舍棄復(fù)雜系統(tǒng)連接的實現(xiàn)方法。一個有效的電子商務(wù)應(yīng)用絕對不應(yīng)該是僅僅基于程序員以及那些復(fù)雜的代碼的。對于電子商務(wù)而言,傳統(tǒng)的由程序員主導(dǎo)的由里向外的開發(fā)模式應(yīng)當被由用戶主導(dǎo)的由外向里的開發(fā)模式取代。冗長的串行的開發(fā)循環(huán)應(yīng)當被即時的,快速的應(yīng)用裝配所取代。同時這樣的應(yīng)用應(yīng)當天生就具備高可定制性。如果探究其商業(yè)本質(zhì),這是來自經(jīng)過時間考驗的商業(yè)技術(shù)概念:"即時制造"以及"規(guī)??缮炜s"等概念,我們需要做的就是將傳統(tǒng)的商業(yè)概念延伸到電子商務(wù)中去。
通過使用Web服務(wù),企業(yè)能夠以前所不可能的方式通過抽象和混合將自身的電子商務(wù)組件化。當一個企業(yè)的核心競爭力被組件化之后,那么這些核心競爭力就能夠很方便地在不同的企業(yè)之間共享,同時架構(gòu)跨企業(yè)的電子商務(wù)應(yīng)用,形成商務(wù)Web。
在我們的這個計算機產(chǎn)品銷售網(wǎng)絡(luò)應(yīng)用中,我們可以預(yù)見到不同的銷售商采用的系統(tǒng)很可能是多種多樣的,有基于Windows/IIS的Web應(yīng)用,有基于Java Platform的Web應(yīng)用,也有基于Windows平臺的桌面應(yīng)用,也有可能是基于UNIX的ERP應(yīng)用部分,要兼容那么多種類的應(yīng)用,用一般的集成技術(shù)很難滿足所有場合的需要。即使?jié)M足了,當有其他想加入這個體系的新的Retailer出現(xiàn)的時候,彼此的集成代價也是無法預(yù)知的。而通過公布預(yù)先定義好的可擴展的服務(wù)訪問規(guī)范,使得這些需要集成入體系的Retailer系統(tǒng)都可以以一種方便地標準的方式進入。
大家可能會說Retailer系統(tǒng)不也是我們來開發(fā)的么?是的,一部分,甚至可能是很大一部分Retailer系統(tǒng)可能用的都是與Marketplace系統(tǒng)同構(gòu)的平臺,而且只不過是服務(wù)模塊少了幾塊而已。然而,我們是處在Internet的開放互聯(lián)的時代,對于Marketplace來說,越多的Retailer的進入就代表著更多的商機,Marketplace的運營者一定會想盡辦法招攬,集成更多的Retailer系統(tǒng),那么與其每出現(xiàn)一個異構(gòu)的Retailer系統(tǒng)就要運用人力物力與其進行單點集成的項目開發(fā),不如制定一種規(guī)范,使得這些新加入的Retailer能夠依照這些規(guī)范自主地加入系統(tǒng)。Marketplace同樣具備海納百川的能力,同時又不用指數(shù)倍地投入開發(fā)代價。
同時如果該規(guī)范成為一種公共接受的規(guī)范的話,其他的兼容該標準的Marketplace同樣也可以出現(xiàn),而遵循該規(guī)范的Retailer系統(tǒng)則可以廣泛地以極低的代價接入到所有兼容該規(guī)范的Marketplace中去,獲得更多的銷售機會和渠道。甚至按照規(guī)范來實現(xiàn),Retailer系統(tǒng)之間還能實現(xiàn)低代價的對等互聯(lián)??梢哉f,依據(jù)規(guī)范的基于Web服務(wù)的服務(wù)集成是真正的按照Internet的開放互聯(lián)理念的Internet時代的服務(wù)集成的方式。
什么是需要公開的?
我們已經(jīng)談到我們需要公開的是調(diào)用規(guī)范,那么調(diào)用規(guī)范該如何定義呢,如果大家在本專欄先前的關(guān)于UDDI的文章中跟隨我稍微研究了一下UDDI規(guī)范的話,那么基本可以了解對于Web服務(wù)而言(UDDI Registry就是一種標準的Web服務(wù)),規(guī)范定義可以分為兩部分:
Programmer's API:這是類似傳統(tǒng)含義的API定義,不過承載的介質(zhì)是SOAP Message,也就是說Programmer's API是一組SOAP API,不同的API用于完成不同的服務(wù)調(diào)用,在這部分中需要定義不同的SOAP API的行為和實現(xiàn)的調(diào)用/響應(yīng)的功能描述;
Data Structure:這部分定義了在SOAP消息中傳輸?shù)膮?shù)/數(shù)據(jù)和響應(yīng)數(shù)據(jù)的XML模式,這部分為每個API補充的消息格式,同時為最終的API處理提供了數(shù)據(jù)層解析/包裝的規(guī)范。
在后面的文章中,我將就本文關(guān)注的這個Demo Case,一步一步地講述如何定義Programmer's API和Data Structure。
參考資料
Web Service 技術(shù)/評論網(wǎng)站
UDDI-China.ORG, 以UDDI為主的Web服務(wù)技術(shù)網(wǎng)站。
WebServices.ORG, Web服務(wù)的綜合類技術(shù)網(wǎng)站。
IBM developerWorks/Web Service Zone, IBM的Web服務(wù)技術(shù)資源中心
MSDN Online Web Services Developer Resources, Microsoft的Web服務(wù)的開發(fā)者資源網(wǎng)站
ITPapers/Web Service, ITPapers的Web服務(wù)評論文章
解決B2B電子商務(wù)應(yīng)用交互和集成的InterOP Stack系列技術(shù)標準規(guī)范
UDDI執(zhí)行白皮書, UDDI-China.org, UDDI.org
UDDI技術(shù)白皮書, UDDI-China.org, UDDI.org
UDDI程序員API規(guī)范, UDDI-China.org, UDDI.org
UDDI數(shù)據(jù)結(jié)構(gòu)參考, UDDI-China.org, UDDI.org
Web Service Description Language (WSDL) 1.0, IBM, 25 Sep 2000
SOAP: Simple Object Access Protocol Specification 1.1, IBM, Microsoft, DevelopMentor, 2000
Extensible Markup Language (XML) 1.0 (Second Edition), W3C, 6 Oct 2000
作者簡介
柴曉路: 上海得易電子商務(wù)技術(shù)有限公司(DealEasy)首席系統(tǒng)架構(gòu)師、XML技術(shù)顧問。UDDI-China.org藍色火焰工作室(Blue Blaze Studio)成員。UDDI Advisor Group成員,WSUI Working Group成員。2000年獲復(fù)旦大學計算機科學碩士學位,曾在國際計算機科學學術(shù)會議(ICSC)、亞太區(qū)XML技術(shù)研討會(XML Asia/Pacific'99)、中國XML技術(shù)研討會(北京)、計算機科學期刊等各類國際、國內(nèi)重要會議與期刊上發(fā)表論文多篇。專長于基于XML的系統(tǒng)集成和數(shù)據(jù)交換的技術(shù)研究,同時對數(shù)據(jù)庫、面向?qū)ο蠹夹g(shù)及CSCW等技術(shù)比較擅長。