《資訊技術》 Web Services技術介紹(一) 吳信輝 前言 想像我們處在一個未來的世界裡,您與您的家人打算在一個月後 至美國自助旅行,在這個時候,您告訴了您的手機秘書(CellPhone +PDA),跟它說了有關這一次旅行的一些資訊,例如您想搭幾點的 飛機,幾點可以到美國,抵達美國時要租的車子大概要何種等級與 類型,準備去哪裡住宿,想要的房間等級與價格預算等,然後您的 手機秘書就開始透過網際網路,去幫您安排這一些東西,最後再請 您確定金額,當您確認沒有問題的時候,這一趟旅程就成交了,接 下來您就可以好好準備出國的相關東西了。 的確,這樣子的想像的確是有一點天馬行空,但卻是不折不扣的 未來生活趨勢。但是以今天的現實環境而言,我們可以大部份在網 路上完成個別的手續,例如,我先去航空公司網站訂飛機票,然後 去再去美國的租車網去租車,最後再去飯店的網站訂房,但是想要 一次在網路上完成這一個行程的相關手續,目前來說是不可能的。 所以,資訊科技該如何解決這樣的問題呢?在網路普及的年代中, 漸漸有人需要、利用網路來達成例如上面所舉的例子的事情,愈來 愈多人想要利用網路來達成這一些目的,但是資料又是分散在各地、 各個不同的網站上;相同的例子,發生在企業上,就是企業間的資 料流通問題,從早期的傳真服務(Fax)、EDI(Electronic Data Interchange,詳見【註一】)等,都是為了解決遠端、不同企業間 的資料溝通。為因應這樣的趨勢,其實在資訊科技硬體技術的發展 歷程中,已經考慮到這樣的分散式系統,因此,在軟體技術發展的 過程中,有了我們熟悉的名詞「遠端遙控」的出現,正式的術語應 該稱之為Remote Procedure Call(RPC),為了解決這樣的問題, Web Services在網路熱潮興起的年代與XML發展成熟的時刻誕生了! Web Services,中文可以稱之為網路資訊服務計算技術【註二】, 也有人稱之為網路服務【註三】等等。在Web Services剛開展的年 代,它的標準是百家爭鳴的,直到最近的幾年,各家軟體公司所發 展的產品較為成熟後,標準漸漸趨於一致化,我們才容易看到它的 蹤影。您想要知道目前Web Services在哪一方面應用嗎?簡單的說, 我們可以利用Web Services將股市的資料傳送到自己的電腦,當然 這只是一個很間單的應用而已,筆者會在後面的介紹中,詳細說明 Web Services可以做的事情。 看完了有關於上述Web Services的簡介之後,本篇文章並不是以 介紹Web Services特色為主,而是希望藉由筆者實做的過程,將這 一個逐漸發展完備的未來網路應用趨勢,透過實際的程式碼建立過 程,讓一般想接觸Web Services的程式設計師或是一般使用者等, 可以經由一連串的解說,快速提升自己開發此技術的能力。有關Web Services的相關新聞與介紹,請參考【註四】內所附的相關網址, 即可得到相關資料。 歷史探究 分散式系統的相關技術,從MainFrame(大型主機)的時代後,電 腦的架構漸漸走上分散式的系統架構,由一台Server管理一群Client, 因此,開發程式的人如何部署程式,便成了一個重要的課題!是要 將程式邏輯寫在Client端嗎?如果是,那每一次版本更新的同時, 也就代表系統管理者必須重新至每一台Client安裝新版程式;如果 將邏輯程式碼集中在一台Server中管理,將可以省卻部署的問題。 此時,課題轉移到Server與Client的溝通管道上,如何能夠有一個 好的溝通管道呢?首先有Remote Procedure Call(RPC,詳見【註 五】)、Object Management Group(OMG)這個組織所推出的Common Object Request Broker Architecture(CORBA,詳見【註六】)、 Microsoft所推出的DCOM/COM+/.NET Remoting(請參閱微軟的網站)、 Sun的提出的RMI與EJB,以及Macromedia的Flash Remoting等技術, 而上述這一些技術名詞,簡單的架構都是由RPC衍生而來,如【圖一】 所示。簡單地說,RPC利用網路硬體(Network Layer)與通訊協定 (Transport Protocol)作為技術基礎,透過代理人(Stub)進行 要求與回應的動作,進而完成資訊的傳遞。 但是在實際發展過程中,以上這一些技術紛紛產生一些問題,例 如CORBA的標準太過鬆散,以致於在Server與Client中,會有安裝版 本不易互通之缺點。微軟的標準雖然可以用VB、C#等不同的語言實 作出來,但卻只能在自家的作業系統平台(Win98、Win2000、Win XP 等);昇陽Sun的RMI與EJB雖然可以橫跨不同作業系統平台,但是卻 只能用Java語言溝通。從上面的分析後我們可以發現,現有的分散 式系統技術存在一些問題,第一個就是不同的系統必須透過專有的 通訊協定建立連結關係;第二個是需要不同的資料處理技術交換資 料;第三個就是無法將技術擴展到協定結構鬆散的網際網路上。該 如何解決上面三種問題呢?國際上幾家資訊科技大廠共同推出了Web Services的標準,宣稱可以利用http通訊協定,解決通訊協定複雜 的問題,利用XML的方式來處理資料,當然,利用http通訊協定,自 然而然地就可以遨遊在網際網路上了(有關Web Services的原文定 義請參考【註七】)。 從上述我們可以看到Web Services的概貌,但是Web Services究 竟是什麼?則必須先從網際網路發展的歷程開始說。在B2C的年代, 以往Web的服務對象只是個人而已,現今的服務對象擴展到軟體,也 就是軟體相互溝通的問題,如何解決溝通問題,因此,Web Services 以XML為資料格式,透過網路提供服務,將軟體服務封裝成一堆可以 在遠端呼叫的函數,將資料公佈在網路上(UDDI、ebXML),透過標 準的網路通訊協定(例如HTTP、SMTP、FTP、RMI等),透過XML標準 格式的底層協定(例如SOAP與WSDL)來處理溝通與辨認程式碼的問題。 Web Services的基礎架構 Web Services的基礎包括:XML、WSDL、SOAP、UDDI,其底層運作 架構模式步驟如下:以XML格式為基準將資料轉變為Web Services的 資料,利用WSDL描述將服務的對象做一個描述,使另一端可以特過 這一個描述,解譯所得的資料。以SOAP通訊底層,進行傳送的動作, 向UDDI進行搜尋或是註冊動作。我們可以看到,WSDL、SOAP與UDDI 皆是用XML方法來描述,接下來將詳細說明,這一些基礎的內容。 W3C對Web Services的定義如下: “A Web service is a software system identified by a URI, whose public interfaces and bindings are defined and described using XML. Its definition can be discovered by other software systems. These systems may then interact with the Web service in a manner prescribed by its definition, using XML based messages conveyed by internet protocols.”【註八】 什麼是SOAP(Simple Object Access Protocol) SOAP指的是一種提供給Web Services以XML製作出來的通訊協定, 目前版本是1.2,就像是打電話必須通過電話線或是無線基地台等, 其目的就是讓應用程式與應用程式能相互溝通,但不需要知道彼此 的作業平台是那一種或是各自如何實作等細節資訊。例如:E-mail 是藉由SMTP的標準傳送資料,在一封E-mail中,除了文字以外,也 定義了SMTP的協定內容,如此欲將封包傳送出去時,必須是SMTP協 定看得懂的格式,才能夠傳送。SOAP的概念也是如此,其XML架構如 【圖二】所示,相關參考資料詳見【註九】。 什麼是WSDL(Web Services Description Language) WSDL主要是描述Web Services的細節,也是使用XML格式之語言, 讓Web Services應用程式能以一種標準方法來描述自己擁有哪些能 力,以便讓互動更容易進行。例如:Java匯入一個新的Class,也就 是說我們能否藉由Web Services把遠端執行的程式、函示等當成Local 端的來執行,關鍵就在於WSDL,必須要有WSDL,Web Services才可 以啟動。所以想要瞭解Web Services,第一步就是先好好瞭解WSDL 的定義、目的以及結構等。 如果我們對上述WSDL項目瞭若指掌的話,我們就可以快速地在別 人已經完成的Web Services裡,藉由對WSDL結構的瞭解,快速設計 出我們自己的Web Services,有關分析工具,將在後面的內容中說 明。 什麼是UDDI(Universal Description, Discovery and Integration) UDDI指的是一種有關於Web Services的目錄註冊服務,其架構也 是以XML為基礎,其主要的目的為提供Web Services的提供者,透過 UDDI告知其他人提供者有提供Web Services,因此UDDI的功能也就 類似電話簿,或是稱為黃頁,目的就是要快速告知服務使用者他可 以利用的Web Services有哪些。 上面定義的Web Services四大基礎,一般說來就是將欲提供的Web Services註冊至UDDI,如http://www.xmethods.net中,就列出許多 的Web Services,其中我們可以看到他的WSDL文件。WS-I的最新標 準就是SOAP1.1、WSDL1.1、UDDI 2.0、XML1.0以及XML Schema等。 在簡介與基礎瞭解後,筆者將在接下來的內容中開始實作Web Services,利用Java語言建立Web Services,其相關的處理工具列 舉如下所示: 處理http的Request與Response:Java Servlet或是JavaServer Pages;處理XML:利用JAXP 1.3(可以支援XML Schema);處理 SOAP Messaging:以SAJJ為主,JAXM 1.1.2為輔;與UDDI或ebXML Registry溝通:用JXAR 1.0;處理RPC:JAX-RPC 1.1。 Web Services的挑戰 由上述的說明可以發現,Web Services是一個極具前瞻觀念的技 術,至今也發展兩三年了,為何在業界裡仍未風行,主要有如下四 點原因: (一)付費的問題:小額付費讓消費者的付費方式非常麻煩,以致興 趣不高。 (二)可靠度的問題:例如用手機訂Web Services的火車票,因為只 有單向Request,所以不能確定買得到或買不到,可靠度低。 (三)安全防護的問題:由於XML為一個純文字檔,如何有效加密解密, 避免機密性資料被發現、盜用等,Web Services目前沒有一套 有效的解決方法。 (四)交易處理的問題:沒有銀行的交易確認與故障恢復機制,不能 讓消費者安心使用,尤其是多Web Services同時進行時,需要 有一個仲裁者的機制建立。 分析工具Demo 在開始學習Web Services的階段,我們將介紹學習一些分析工具, 以便於我們可以快速的瞭解Web Services運作的原理以及SOAP、WSDL 的運作流程。首先我們先介紹Online的分析工具StrikeIron Online Web Services Analyzer,其網址為 http://www.strikeiron.com/Analyzer/NewMainForm.aspx,如【圖 三】所示。 【圖三】所示的是一個可以計算數字平均數的WebServices,其WSDL 位於http://www.strikeiron.com/scripts/statistics.asmx?WSDL, 利用http://www.strikeiron.com所提供的WSDL分析器,我們大約可 以瞭解WebServices的運作方式。www.strikeiron.com算是一個發佈 Web Services的地方,也就是UDDI,網址為 http://www.strikeiron.com/search.aspx,如【圖四】所示。 從StrikeIron Online Web Services Analyzer中,我們只要將某 個Web Services的WSDL貼上指定的位置,如【圖五】所示,該分析 器即會自動分析該WSDL文件的的結構,讓我們快速地清楚這一個WSDL 的函數、作用有哪些?結果我們可以往回看【圖三】的例子。 第二種方法是利用網路上已經寫好的Client端分析工具,在此我 們介紹的是:WebServicesStudio 2.0,其下載網址為 http://www.gotdotnet.com/Community/UserSamples,在這一個網 址的搜尋中輸入WebServiceStudio 2.0即可(或直接連結到 http://www.gotdotnet.com/Community/UserSamples/Details.aspx? SampleGuid=65A1D4EA-0F7A-41BD-8494-E916EBC4159C),由於此工 具是利用Microsoft的Visual Studio的C#撰寫的,因此在安裝 WebServiceStudio之前,必須先安裝Microsoft .NET Framework Version 1.1 Redistributable Package,這一個套件的下載網址為 http://wwww.microsoft.com/downloads/details.aspx?FamilyID= 262D25E3-F589-4842-8157-034D1E7CF3A3&displaylang=en(亦可以到 http://msdn.microsoft.com/netframework/尋找),首先,我們先 安裝好.NET Framework Version 1.1 Redistributable Package, 然後再將下載的WebServiceStudio 2.0的壓縮檔解壓縮在C槽下的目 錄,選其資料夾,再在其資料夾中選bin資料夾裡一個.EXE的執行檔, 按兩下後(步驟如【圖六】),即可看到WebServiceStudio 2.0的 執行程式,如【圖七】所示。 我們利用另外一個UDDI的註冊中心:Xmethods(網址為 http://www.xmethods.net)來做實驗,選擇USA Weather Forecast 這一個Web Services做例子(網址 http://www.xmethods.net/ve2/ViewListing.po;jsessionid=PO1m3XoB2LJiv8tOTDIEVXu_ (QHyMHiRM)?key=uuid:DC12A48B-1A20-36B1-4AB5-9D7EEF18193E), 將其WSDL位址貼上後,按下Get按鈕,即可得到如【圖八】所示的結 果。 從【圖八】來看,我們可以分析這一個Web Services的WSDL結構, 而點選WSDL & Proxy,我們可以分析這一個Web Services的WSDL之 XML格式內容,如【圖九】所示。 點選Request/Response按鈕,我們可以看到這一個Web Services 的資訊傳遞狀況,如【圖十】所示。 學習資源 學習Web Services,可以從昇陽的Java網站(http://java.sun.com) 中取得線上版的教學資料(tutorial)。;另外,有關Web Services 技術所需要的相關協定,可以參閱WS-I組織的資料(http://www.ws-i.org)、 SOAP請參閱http://www.w3.org/TR/soap、WSDL請參閱 http://www.w3.org/TR/wsdl、UDDI請參閱http://www.uddi.org。 (待續) 參考資料 註一:有關於Electronic Data Interchange(EDI)的相關資訊, 請參考http://edi.csd.org.tw/ 註二:取自師範大學資訊科學教育學系教授葉耀明對Web Services 之定義。 註三:術語說明:網路服務(Web Services)是分散式系統未來發 展的趨勢,讓應用程式在網路上提供服務,供其他機器上的 程式所使用。網路服務具有強大的互通性和延伸性,讓應用 程式能更簡單的整合網路上的程式,藉由交談的方式達成某 些複雜的運作過程,如企業間的交易等。網路服務的相關標 準包括了SOAP、WSDL、UDDI。詳情請參閱網址 http://www.xml.org.tw/Function/Fglossary1.asp?key=Web%20Services 註四:台灣方面有關於Web Services的說明很多,本文簡單列舉如 下: www.iiiedu.org.tw/knowledge/knowledge20021231_1.htm http://www.nii.org.tw/cnt/info/Report/20030601.htm http://www.21ds.net/article/_3/_5/_4/2004-07/14/347_1.html http://2tigers.net/html/tiger_column/article1.html http://2tigers.net/html/tiger_column/article3.html http://doit.moea.gov.tw/06success/whitepaper/2002ch4-2.htm,產業技術白皮書中的說明; http://www.ccl.itri.org.tw/webbase/CCL3C_preview.asp?sn=0051,有關於Web Services的安全議題。 註五:有關Remote Procedure Call(RPC)的相關資訊,請參考 http://www.cis.nctu.edu.tw/~is83053/NetProg/Problem7.html中之說明 註六:有關Common Object Request Broker Architecture(CORBA) 的相關資訊,請參考 http://www.cis.nctu.edu.tw/~is84086/NetProg/problem9.html 註七:Google Definition中對於Web Services的定義, http://www.google.com.tw/search?hl=zh-TW&lr=&oi=defmore&q=define:web+services 註八:W3C對Web Services的定義,來源網址 http://www.cs.nccu.edu.tw/~jong/TPyramid/WS/ws.html 註九:Simple Object Access Protocol(SOAP) http://www.ccl.itri.org.tw/products/transfer/internet_soft/techinfo/SOAP.htm