本文章為那些想學習 Web 服務但是卻又不知道從何處入手的讀者提供了相關概述
![]() |
我可以用 Web 服務做什么? |
![]() |
構成 Web 服務的技術是什么? |
![]() |
Web 服務與其他技術的關系如何? |
![]() |
我可以如何在應用程序中使用 Web 服務? |
![]() |
我可以如何提高自己的 Web 服務技能? |
使用 Web 服務技術,應用程序可以與平臺和編程語言無關的方式相互通信。Web 服務是一個軟件接口,它描述了一組可以在網絡上通過標準化的 XML 消息傳遞訪問的操作。它使用基于 XML 語言的協議來描述要執行的操作或者要與另一個 Web 服務交換的數據。在面向服務的體系結構(Service-Oriented Architecture,SOA)中,一組以這種方式交互的 Web 服務定義了特定的 Web 服務應用程序。
實際上,Web Service 最基本的組成部分為服務的提供者(Service Provider)和服務的請求者(Service Requester)。這看起來很像 C/S 架構的軟件,與之不同的是,Web Service 兩端的應用是通過基于標準的 XML 格式的協議進行通信的,這種最常用的協議就是 SOAP(Simple Object Access Protocol)。當然,Web Services 不簡單地只是按這種方式進行通信。按照 Web Service 的相關標準描述,服務的提供者應該首先通過 WSDL(Web Service Definition Language)和 UDDI (Universal Description, Discovery, and Integration)發布它所提供的服務到一個統注冊這些服務信息的存儲庫中去。這樣,服務的請求者就也可以通過 WSDL 和 UDDI 發現到服務提供者提供的服務,并可以通過應用的調用方法來使用這個服務了。
軟 件業最終會接受這樣的事實:跨多個操作系統、編程語言和硬件平臺集成軟件應用程序不可能由任何一種專門的環境來解決。傳統上,這個問題一直是一個緊耦合問 題,調用遠程網絡的應用程序通過自己發出的函數調用和請求的參數與遠程網絡緊密地聯系在一起。在 Web 服務出現之前,在大多數系統上,采用的是固定的接口,但對于不斷變化的環境或需求,這樣做缺乏靈活性或適用性
Web 服務所使用的 XML 可以用真正與平臺無關的方式來描述任何(所有)數據,以跨系統交換數據,因此轉向了松耦合應用程序。而且,Web 服務可以在較抽象的層面上工作,較抽象層面可以按照需要動態地重新評估、修改或處理數據類型。所以,從技術層面上講,Web 服務可以更方便地處理數據,并且允許軟件更自由地進行通信。
從更高的概念層面上講,我們可以將 Web 服務視為一些工作單元,每個單元處理特定的功能任務。再往上一步,可以將這些任務組合成面向業務的任務,以處理特定的業務操作任務,從而使非技術人員可以 考慮一些應用程序,這些應用程序能夠在 Web 服務應用程序工作流中一起處理業務問題。因此,一旦由技術人員設計并構建好 Web 服務之后,業務流程架構師就可以聚集這些 Web 服務來解決業務層面上的問題。這里借用汽車引擎來作類比,業務流程架構師考慮將整個汽車引擎與汽車框架、車身、變速器和其他系統組合在一起,而不是研究每 個引擎內的各個部件。而且,動態平臺意味著引擎可以與其他汽車制造商的變速器或部件一起工作。
最后一個方面是,Web 服務有助于在組織內的業務人員和技術人員之間架起一座橋梁。Web 服務使業務人員更容易理解一些技術上的操作。業務人員可以描述一些事件和活動,然后技術人員可以將這些事件和活動與相應的服務相關聯。
有 了通用定義的接口和設計良好的任務,重用這些任務就變得更容易了,因而重用這些任務所代表的應用程序也就變得容易了。應用程序軟件的可重用性意味著在軟件 上的投資有了更好的回報,因為可以從同一資源產生更多收益。可重用性使業務人員可以考慮以一種新的方式來使用現有的應用程序,或者以一種新的方式將應用程 序提供給合作伙伴,因此可能增加合作伙伴間的業務交易。
所以,Web 服務試圖解決的主要問題是數據和應用程序集成的問題,以及將技術性的功能轉換為面向業務的計算任務的問題。這兩個方面使企業可以就流程或應用程序層面與他們的合作伙伴進行交流,同時為適應新形勢或按照需要與不同合作伙伴進行合作留有動態的余地。
- 要了解 Web 服務,您應該首先知道可擴展標記語言(Extensible Markup Languageservices,XML)的工作原理。XML and how it will change the Web 和 Introduction to XML 是兩篇很好的文章,您可以從這兩篇文章開始了解 XML。雖然 Web 服務技術本身是語言無關的,但是在 Java 技術中還可以獲得許多工具和軟件實現。
- 如果您是一位想要了解 Web 服務的軟件架構師或業務人員,An Executive's Guide to Web Services 提供了許多關于 Web 服務的商業價值方面的有用想法。
![]()
|
我可以用 Web 服務做什么? |
雖 然 Web 服務支持所有這些將多個服務組合到應用程序中的動態功能,但您仍然必須首先構建這些服務。編程語言和計算機科學在不斷發展。我們在幾十年前就有了函數的想 法,通過給它提供一些參數,由它根據這些參數執行某個操作,然后根據它的計算返回值。最終,這個首先提出來的概念演變成了對象,每個對象不僅有一些它可以 執行的函數,而且還有自己的專用數據變量,而不是依賴于以前所采用的使開發應用程序更為復雜的外部系統范圍內的數據變量。當應用程序進入了網絡時代,對于 對象,定義通用接口的概念變得更為重要,即使位于其他平臺上的對象是用另外的編程語言編寫的并且運行在其他操作系統上,也可以使這些對象進行通信。
在 最近的發展中,Web 服務轉向了基于 XML 的接口和通信這一概念,只要將 Web 服務設計成相應的接口,最終都可以將任何一種應用程序與另一種應用程序組合在一起,并可以隨時間的流逝自由地更改和發展應用程序。XML 的通用性使得 Web 服務不同于前一代組件技術。它允許語法結構(句法)與語法意義(語義)分離,每個服務處理和理解它的方式與它所存在的環境分離。因此,現在可以將對象定義 為服務,它可以與其他采用 XML 定義的語法的服務進行通信,從而每個服務又可以根據其本地實現和環境來轉換和分析消息。因而,網絡應用程序實際上可以由各種構造和設計的實體組成,只要這 些實體符合它們面向服務的體系結構就可以了。
因此,如果掌握了這一能力,Web 服務將使您能夠:
- 讓任何平臺上的用任何語言編寫的服務進行交互。
- 將應用程序功能概念化成任務,從而形成面向任務的開發和工作流。這使得更抽象的軟件能夠為工作在業務層面具有較少軟件分析技術的用戶所用。
- 允許松耦合,這意味著,每當其中某個或多個服務在設計或實現中發生改變時,服務應用程序之間的交互不會因此而中斷。
- 使現有的應用程序能適應不斷變化的業務條件和客戶需求。
- 向現有或遺留軟件應用程序提供服務接口,而無需改變原來的應用程序,從而使這些應用程序完全可以運行在這種服務環境下。
- 引入其他一些與原有功能無關的管理或操作管理功能,比如可靠性、責任性和安全性等等,從而在業務計算環境中增加其通用性和實用性。
- 在 Web 服務世界中的業務流程 解釋了如何用 Web 表示工作流和業務流程。
- Security in a Web services world 探究了 Web 服務中安全模式是如何發展演變的。
- 網格與 Web 服務的結合 討論了網格計算如何在一個內聚的分布式面向服務的體系結構中使用 Web 服務。
- An e-mail user interface to Web services 描述了移動設備如何通過簡單的協議(比如 email)與企業 Web 服務進行交互。
- 學習 Web 服務如何在 J2EE 模型中工作(請參見 用 Web 服務和 J2EE 集成企業應用程序)和了解不同的通信機制(請參見 為 EAI 選擇 JCA、JMS 或 Web 服務 )。
![]()
|
構成 Web 服務的技術是什么? |
Web 服務采用一系列相關協議來描述、傳遞服務和與服務交互。根據其通常的功能和使用,可以將這一系列協議進一步劃分為組。第一組處理消息傳遞、接口描述、尋址 和交付的問題。最有名的是消息傳遞協議,稱為簡單對象訪問協議(Simple Object Access Protocol,SOAP)。此協議對消息進行了編碼,這樣就可以通過傳輸協議(如 HTTP、IIOP、SMTP 或其他協議)在網絡上傳遞它們。
Web 服務描述語言(Web Services Description Language,WSDL)表示為一系列 XML 語句,這些語句組成了每個服務的接口的定義。另一個正在制訂的規范是 Web 服務尋址 (WS-Addressing),它定義了如何在分布式體系結構中唯一地進行 Web 服務尋址和標識 Web 服務。另一個流行的規范是 Web 服務調用框架(Web Services Invocation Framework),在這種框架中,您可以定義任何類型的組件的 WSDL 接口,即使它們沒有使用相同的消息傳遞協議。
下一組協議和規范定義了服務如何公開它們自己以及如何在網絡上相互發現。對于 要相互查找的服務,統一描述、發現和集成(Universal Description, Discovery and Integration,UDDI)為查找和訪問服務定義了注冊中心和相關協議。Web 服務檢查語言(Web Services Inspection Language)是 UDDI 在不使用注冊中心的情況下采用的一種可選機制。
用于 Web 服務的安全性協議是從 Web 服務安全性 (WS-Security) 規范開始的,該規范為安全通信定義了基于令牌的體系結構。以此為基礎,有六個主要的組成規范:
- Web 服務策略 (WS-Policy) 和相關的規范,定義了關于服務交互方式的策略規則。
- Web 服務信任(WS-Trust),定義了安全交換的信任模型。
- Web 服務隱私 (WS-Privacy),定義了如何維護信息的隱私。
- Web 服務安全會話 (WS-Secure Conversation),定義了如何使用在Web 服務策略 (WS-Policy)、Web 服務信任 (WS-Trust) 和 Web 服務隱私 (WS-Privacy) 中定義的規則,以在用于交換數據的服務之間建立安全會話。
- Web 服務聯盟 (WS-Federation),定義了分布式標識的規則以及如何對其進行管理。
- Web 服務授權 (WS-Authorization),定義了如何處理對訪問和交換數據的授權。
除 了安全性模型之外,還有特定于應用程序的規范,其中包括 Web 服務的業務流程執行語言(Business Process Execution Language for Web Services,BPEL4WS),它定義了一起進行分布式事務處理的工作流操作、Web 服務事務 (WS-Transaction)、Web 服務協調 (WS-Coordination)。
目前計劃制訂的規范是 Web 服務分布式管理 (Web Services Distributed Management),用于對所有的服務和面向服務的體系結構進行軟件管理。最后,還有一些用于用戶界面(Web 服務交互應用程序 (WS-InteractiveApplications))和 Web 服務的遠程訪問(Web 服務遠程門戶 (WS-RemotePortals))的規范。
在撰寫本文時,用于 Web 服務的規范還處在不斷制訂的過程中,而且它們僅僅是開始解釋服務之間應該如何交互。然而,它們無法包括每一種方案和這些方案的可能組合。因此,Web 服務互操作性組(Web Services Interoperability Group,WS-I)的組成成員幾乎來自所有從事 Web 服務開發的大大小小的供應商,它已經肩負起開發案例研究、示例應用程序、實現方案和測試工具的重任,目的是確保這些標準和規范能夠真正地協同工作,而不考 慮供應商的產品實現。
WS-I 已經定義了第一個用于 Web 服務的基本概要 (Basic Profile 1.0),并且還發布了方案、示例應用程序和測試工具,以便根據方案評估和比較各種實現的結果。
除 了 WS-I 之外,Organization for the Advancement of Structured Information Standards (OASIS) 、World Wide Web Consortium (W3C) 和 Internet Engineering Task Force (IETF) 也在進行大量的標準制訂工作。
- Web Services Conceptual Architecture——解釋了 Web 服務背后的技術思想及其工作方式。 (英文原文)
- 在 developerWorks Web Services 標準 頁面中可以找到許多重要的 Web 服務規范和協議標準。
- 有關規范和標準的詳細信息,請訪問 W3C 站點和 OASIS 站點。
- 通過閱讀 初識 WS-I 基本概要 1.0 和 了解 WS-I 測試工具,您可以了解 WS-I 所做的工作。
![]()
|
Web 服務與其他技術的關系如何? |
Web 服務主要是技術的集成。不過,它本身是獨立于形式的。如前所述,組成 Web 服務的技術通常是用 XML 進行定義和交互的。然而,由于 XML 本身是一種獨立的語言,所以 Web 服務也是獨立的。因此,可以用許多編程語言(其中包括 Java、Python、Perl、C#、Basic 等等)來開發 Web 服務。
Web 服務的初衷是努力為 Internet 和 Web 應用程序的體系結構找到一種更好的方法,以便更好地進行通信和相互交互。因而,當今的大多數 Web 服務是基于在應用程序服務器環境(如 WebSphere、Apache 及其他)中運行的程序的。雖然它們不是必需的,但是一些最優秀的 Web 服務工具是為這樣的環境而設計的。
通過提供更簡單的統一接口,Web 服務還有助于改進用于移動環境和可移植環境的普及計算模型的工作方式。移動計算軟件將很快采用 Web 服務通信模型,而這有助于改進可視化 Web 服務的接口問題。
網格計算已經采用 Web 服務作為開放網格服務體系結構 (Open Grid Services Architecture) 的一部分。開放網格服務體系結構是用于這種類型的分布式計算的新模型,它使用 Web 服務傳遞網格服務操作的方式。
自主計算是一種很有意義的新方法,通過這種計算方法,計算機可以維護和管理自己,它有一些用于 Web 服務的應用程序。
- Java 是 Web 服務的基石,而實際上,developerWorks 站點上的 Web Services 專區中的大部分文章都側重于基于 java 的開發。例如,開發者關于 JAX-RPC 的介紹,第 1 部分: 了解 JAX-RPC 類型映射系統的各個方面 和 開發者關于 JAX-RPC 的介紹,第 2 部分: 研究 JAX-RPC 的規范提高 Web 服務互操作性 專門討論與 Web 服務開發有關的 J2EE API。
- 開發一個用于與 WebSphere Web 服務交互的 .Net 客戶端 和 A Demonstration of Web Services Interoperability Between the WebSphere and .Net 提供了關于 Web 服務如何在不同的 Web 體系結構中跨平臺工作的示例。
- 開放網格服務架構之旅 解釋了現在網格計算是如何以 Web 服務為基礎進行設計的。
- Cross-platform programming with the WSTK for Mobile Devices 介紹了一些用于移動計算的 Web 服務編程工具。
- ETTK 自愈合和自優化演示 展示了自主計算如何與 Web 服務協同工作。
![]()
|
我可以如何在應用程序中使用 Web 服務? |
在 構建應用程序時有很多考慮 Web 服務的方式。在最基本的層次上,高級通信協議允許應用程序相互交談。在過去幾年里,這一層次已經取得了巨大的進展,出現了許多工具,通過使用這些工具,軟 件開發人員可以編寫交互的 Web 服務并構建復雜的應用程序。通常,這一層次的特點是服務之間的一對一直接交互或比較少的服務相互交互。
然 而,如果只是將 Web 服務作為通信協議就未能實現真正的面向服務的體系結構 (SOA)。 SOA 描述了服務的整個系統如何動態地相互查找,如何聚集在一起執行某些應用程序,以及如何按照多種方式進行組合。該模型鼓勵技術和軟件的重用,從而發展了設 計、開發和使用應用程序的方式。它使分布式計算更接近于現實。在這一層次上,軟件開發人員需要考慮 SOA 模型并通過此模型來設計他們的分布式應用程序。這一層的特點是使用各種技術來支持服務的分布式計算,比如 企業服務總線 (ESB),它是一個通用的分布網絡,可以與服務一起協同工作。
而最高的層次是把 SOA 模型和許多組件服務看作是構件,這些構件可以裝配成作為一個整體的某些部分并放入完整的應用程序中,而不是用傳統的方法來編寫一行一行的代碼。通過檢驗連 接接口,我們可以在不曾真正編寫一行代碼的情況下構建整個應用程序。事實上,按照這種方式,甚至還可能得到直接代碼,因為服務可以通過多種不同的語言和平 臺進行編寫??梢詫嫾旁谝黄饋斫M成定義應用程序的執行方式的操作工作流,而且還可以用其他工具來監控每個服務或服務組的工作流的有效性。在這一層次 上,開發人員可以把常規編程語言放在一邊,而使用模型驅動的體系結構 (Model-Driven Architecture) 來幫助他們構建設計更精確的應用程序。然后,這樣設計的應用程序就可以運行在分布式系統(如 ESB)之上。
- Java® 2 Enterprise Edition (J2EE) 是用 Java 編程語言開發 Web 服務的主流模型。您應該閱讀關于 J2EE 的文章并且了解它的工作方式,從而理解 Web 服務開發的第一層次。
- Building a Web service from SOAP to nuts 和 創建、部署、發布和使用一個簡單的 Web 服務 是兩篇關于構建交互 Web 服務的入門文章。
- 用 Web 服務來訪問 DB2:在 Windows 上創建 Web 服務以訪問 DB2 和 用 SQL 調用 Web 服務:將關系數據和 Web 服務集成在一起提供了關于構建數據庫 Web 服務的見解。
- Business processes and workflow in the Web services world 描述了業務流程如何在面向服務的體系結構中工作。
- 要獲得更多關于使用 Web 服務的工作流和業務流程的信息,您應該閱讀 BPEL4WS 專欄。
- 從UML到BPEL : Web服務世界中的模型驅動體系結構 解釋了 Web 服務可以如何融入模型驅動的體系結構 (Model-Driven Architecture) 之中。
![]()
|
我可以如何提高自己的 Web 服務技能? |
跟 上 Web 服務的發展的最好方法就是閱讀最新的技術文章和使用各種可用的工具。由于技術本身在不斷地發展,所以這些信息和工具提供了對使用 Web 服務的最佳方式的解釋。 Emerging Technology Toolkit 之類的工具還跨越了幾個階段,涉及到這些技術的一些前沿知識,通過使用這些工具,您就可以試驗專家正在研究的一些技術。我們將在下一部分中描述這些技術。
目 前,Web 服務已經取得了重大的進展,關于這個主題的各種信息也在爆炸式地出現。在 Web Services 專區中,有大量有關開發用于直接交互的 Web 服務的技術內容。甚至像 SOAP 這樣已經出現了三年多的協議仍在完善之中。由于這個主題在不斷地變化,所以常常回到 Web Services 看看是非常有益的。
另一個提高您的技能的好方法是直接參與專區的討論論壇。在這里,您可以找到正在這個領域積極開展研究工作的專業人員,甚至直接得到設計這些技術和開發這些產品的研發人員的幫助。
對于高級開發人員,您可以通過參與每月一次的各種專題討論會來加入到 Web 服務規范本身的制訂和發展之中。
- Web 服務專區經常增加一些新的教程,這些教程詳細解釋了如何在 Web 服務中執行有用的任務。
- Web Services Specification Workshops 是一個多方參與的事件,您可以從中獲得更多的信息并提供關于 Web 服務規范的反饋。
- developerWorks 站點上 Web 服務的最佳實踐調查了 IBM JStart 項目組成員在走向成功道路上遭遇的真實情景,這個項目是針對早期技術實現的。學習這些最佳實踐可以幫助您評估和適應您自己的項目的情況