转自IBM网站,原文地址:http://www.ibm.com/developerworks/cn/webservices/newto/websvc.html?S_TACT=105AGX52&S_CMP=content
本文章为那些想学习 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
服务支持所有这些将多个服务组合到应用程序中的动态功能,但您仍然必须首先构建这些服务。编程语言和计算机科学在不断发展。我们在几十年前就有了函数的想
法,通过给它提供一些参数,由它根据这些参数执行某个操作,然后根据它的计算返回值。最终,这个首先提出来的概念演变成了对象,每个对象不仅有一些它可以
执行的函数,而且还有自己的专用数据变量,而不是依赖于以前所采用的使开发应用程序更为复杂的外部系统范围内的数据变量。当应用程序进入了网络时代,对于
对象,定义通用接口的概念变得更为重要,即使位于其他平台上的对象是用另外的编程语言编写的并且运行在其他操作系统上,也可以使这些对象进行通信。
在
最近的发展中,Web 服务转向了基于 XML 的接口和通信这一概念,只要将 Web
服务设计成相应的接口,最终都可以将任何一种应用程序与另一种应用程序组合在一起,并可以随时间的流逝自由地更改和发展应用程序。XML 的通用性使得
Web
服务不同于前一代组件技术。它允许语法结构(句法)与语法意义(语义)分离,每个服务处理和理解它的方式与它所存在的环境分离。因此,现在可以将对象定义
为服务,它可以与其他采用 XML
定义的语法的服务进行通信,从而每个服务又可以根据其本地实现和环境来转换和分析消息。因而,网络应用程序实际上可以由各种构造和设计的实体组成,只要这
些实体符合它们面向服务的体系结构就可以了。
因此,如果掌握了这一能力,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
服务主要是技术的集成。不过,它本身是独立于形式的。如前所述,组成 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 服务的应用程序。
获得更多相关信息
在
构建应用程序时有很多考虑 Web
服务的方式。在最基本的层次上,高级通信协议允许应用程序相互交谈。在过去几年里,这一层次已经取得了巨大的进展,出现了许多工具,通过使用这些工具,软
件开发人员可以编写交互的 Web 服务并构建复杂的应用程序。通常,这一层次的特点是服务之间的一对一直接交互或比较少的服务相互交互。
然
而,如果只是将 Web 服务作为通信协议就未能实现真正的面向服务的体系结构 (SOA)。 SOA
描述了服务的整个系统如何动态地相互查找,如何聚集在一起执行某些应用程序,以及如何按照多种方式进行组合。该模型鼓励技术和软件的重用,从而发展了设
计、开发和使用应用程序的方式。它使分布式计算更接近于现实。在这一层次上,软件开发人员需要考虑 SOA
模型并通过此模型来设计他们的分布式应用程序。这一层的特点是使用各种技术来支持服务的分布式计算,比如 企业服务总线
(ESB),它是一个通用的分布网络,可以与服务一起协同工作。
而最高的层次是把 SOA
模型和许多组件服务看作是构件,这些构件可以装配成作为一个整体的某些部分并放入完整的应用程序中,而不是用传统的方法来编写一行一行的代码。通过检验连
接接口,我们可以在不曾真正编写一行代码的情况下构建整个应用程序。事实上,按照这种方式,甚至还可能得到直接代码,因为服务可以通过多种不同的语言和平
台进行编写。可以将构件放在一起来组成定义应用程序的执行方式的操作工作流,而且还可以用其他工具来监控每个服务或服务组的工作流的有效性。在这一层次
上,开发人员可以把常规编程语言放在一边,而使用模型驱动的体系结构 (Model-Driven Architecture)
来帮助他们构建设计更精确的应用程序。然后,这样设计的应用程序就可以运行在分布式系统(如 ESB)之上。
获得更多相关信息
跟
上 Web 服务的发展的最好方法就是阅读最新的技术文章和使用各种可用的工具。由于技术本身在不断地发展,所以这些信息和工具提供了对使用 Web
服务的最佳方式的解释。 Emerging Technology Toolkit
之类的工具还跨越了几个阶段,涉及到这些技术的一些前沿知识,通过使用这些工具,您就可以试验专家正在研究的一些技术。我们将在下一部分中描述这些技术。
目
前,Web 服务已经取得了重大的进展,关于这个主题的各种信息也在爆炸式地出现。在 Web Services
专区中,有大量有关开发用于直接交互的 Web 服务的技术内容。甚至像 SOAP
这样已经出现了三年多的协议仍在完善之中。由于这个主题在不断地变化,所以常常回到 Web Services 看看是非常有益的。
另一个提高您的技能的好方法是直接参与专区的讨论论坛。在这里,您可以找到正在这个领域积极开展研究工作的专业人员,甚至直接得到设计这些技术和开发这些产品的研发人员的帮助。
对于高级开发人员,您可以通过参与每月一次的各种专题讨论会来加入到 Web 服务规范本身的制订和发展之中。
获得更多相关信息