Web 服务响应模板模式为异类环境中的服务提供者和客户端提供了对请求响应调用的更多控制和灵活性。WSRT 允许客户端控制服务结果,并根据规范优化数据流。同时,它还允许服务提供者开发自己提供的接口,而不会中断现有客户端的使用。我们将讨论 WSRT 模式规范以及用来改进服务接口的解决方案。

Eoin Lane (eoinlane@us.ibm.com), 高级解决方案工程师, IBM

Eoin LaneEoin Lane 博士是一位高级解决方案工程师,负责对主要 IBM SOA 工作的应用程序开发模式进行收集和开发,并通过 IBM 模式控制流程对这些模式进行处理,以促进其推广应用。Eoin 也是用于帮助 SOA 开发的模型驱动的开发(Model Driven Development,MDD)、基于资产的开发和可重用资产规范(Reusable Asset Specification,RAS)方面的专家。



2006 年 10 月 19 日

环境

Web 服务已迅速成为异构环境中最常用的请求响应调用方式。不过,这些调用的冗长的 ASCII 特性将影响性能,从而使架构师转而考虑别的备选解决方案。

我们将深入了解在处理多个客户端时 Web 服务提供者可能面对的问题,以及如何使用 WS 响应模板模式解决这些问题。


问题

服务接口通常会带来以下问题:

  • 服务接口通常是粗粒度的,但客户端通常希望对其访问的粒度进行更多的控制。
  • 服务提供者需要在不影响现有客户端的情况下对其提供的接口进行改进。

Web 服务提供者在处理多个客户端时有一个常见的问题:WSDL 非常精确地对数据类型、消息和操作的接口进行了规定,从而隐式地限制客户端使用并不一定恰当的模式。服务提供者必须选择其公开的 WSDL,即使客户端知道其使用模式对应的最有效的接口也如此。

服务提供者必须选择是否为多个客户端提供多个接口——这非常难于实现和维护——还是提供单个“全能”折衷接口。

以汽车公司中的车辆数据服务为例。这个车辆服务的创建、读取、更新和删除 (CRUD) 操作需要供多个应用程序访问,因为汽车公司中的大部分应用程序都将需要访问车辆信息。不过,每个应用程序都将对其所需的车辆数据子集具有不同的要求。保修应用程序将需要不同于客户服务应用程序的车辆信息子集。此数据服务的提供者现在就面临着一个进退两难的问题:是提供具有不同车辆数据粒度级的多个接口,还是提供一个并不专门满足某个特定需求的全能接口。

客户端如何才能不再受到使用服务提供者指定的协定的限制?


决定因素

构建 Web 服务时,有多个决定因素。架构师需要能:

  • 在现有 Web 服务标准上进行构建工作
  • 提高 Web 服务接口的灵活性、粒度和易维护性
  • 自定义服务结果并对客户端和服务器之间的数据流进行优化
  • 允许使用者和提供者以抽象的数据和服务模型(而不是预先确定的接口)为基础进行开发。

解决方案

WS 响应模板模式(WS response template pattern,WSRT)允许客户端针对抽象数据和服务模型进行编程(而不直接针对 WSDL 指定的接口),然后指定将该模型中的信息子集作为服务调用结果返回。除了定义响应的结构外,客户端还可以提供其他搜索参数,以确定将要实际返回哪些对象。这样,客户端就能对服务结果进行更大的控制,以便根据自己的规范对数据流进行优化。此外,它还允许服务提供者在不会影响现有客户端的情况下开发其提供的接口。

WS 响应模板模式使服务接口变得更为灵活了。操作签名更改为接收请求模板(和密钥),然后返回响应模板。请求模板是松散类型的图表,其中所有属性都是可选的;响应模板是强类型的图表,其所有属性也是可选的。

例如,服务接口可以包含以下操作:

getValueObject(key:Key):ValueObject

应用模式后,操作签名将更改为下面的内容:

getValueObject(key:Key,requestTemplate:RequestTemplate):ResponseTemplate

RequestTemplateResponseTemplate 都基于原来的值对象,但进行了以下修改:

  • RequestTemplate 是松散类型的,其所有属性都是可选的。RequestTemplate 包含对 ResponseTemplate 中应有内容的描述。
  • ResponseTemplate 是强类型的,其所有属性都是可选的。ResponseTemplate 包含来自原始 ValueObject 的信息,但其格式是由 RequestTemplate 中给定的请求者指定的。

UML 2.0 Profile for Software Services 提供了一种描述服务的公共语言(覆盖整个开发周期的语言之一),还可为不同的干系人提供不同的视图。
UML Profile for Software Services 支持对服务、面向服务的体系结构 (SOA) 和面向服务的解决方案进行建模。该概要已在 IBM Rational® Sofware Architect 中实现,并成功地用于对复杂客户场景进行建模,同时可以帮助人们了解开发面向服务的解决方案时的注意事项(请参阅参考资料)。

在此模式的模型驱动开发解决方案中,WS 响应模板模式采用了 UML 服务设计模型,如图 1 中所示。

这是 UML 类关系图,其中的输入为接口和表示数据模型的类图表。此服务模型可以应用 UML 服务概要(请参见侧栏)。输出是一个可识别 WS 响应模板的服务模型。

可以随后使用 UML-to-SDL 和 UML-to-XSD 转换来将此可识别 WS 响应模板的服务模型转换为 WSDL 和 XSD。

最后,可以使用此灵活的 WSDL 来创建实现存根和框架代码(如使用 WSDL-to-Java 生成)。

图 1. WS 响应模板解决方案概况
WS 响应模板解决方案概况

类关系图

图 2 显示了 UML 服务模型,其中的服务接口包括许多 CRUD 之类的操作。这些 CRUD 操作中的数据对象是组合值对象数据对象,特别适合此模式。这意味着,数据值对象可以为叶数据值对象,也可以为包含其他值对象的聚合数据值对象。

由于数据值对象可以包含其他数据值对象的聚合——如包含多个事务数据对象的银行帐户数据对象——WS 响应模板模式的实现应该支持基于某种筛选标准对子聚合数据值对象进行筛选。例如,如果我们只希望了解过去一周的银行帐户交易,则子聚合数据值对象应该使用日期筛选。

图 2. WS 响应模板类关系图
WS 响应模板类关系图

序列关系图

图 3 显示了 WS 响应模板模式的序列关系图。

图 3. WS 响应模板序列关系图
WS 响应模板序列关系图

对于此序列关系图:

  • 客户端将通过使用提供的可识别 WS 响应模板的 WSDL 来调用服务。然后,请求者将使用密钥和请求模板来调用 WS 响应模板实现。
  • 密钥唯一地标识所需的值对象。
  • 请求模板告知服务实现响应中需要哪个(已断开连接的)数据对象图子集。
  • 服务实现查询使用密钥查询提供者,并获得与该密钥关联的对应数据对象。
  • 现在将调用一个称为导航器 的运行时组件。导航器将获取作为输入的请求模板和值对象,并返回响应模板。
  • 响应模板中包含类型安全的值对象信息图子集,这些信息是用户在请求模板中请求的。响应模板返回给请求者。

参与方

以下是相关的参与方及其关联的操作:

  • 信息模型/服务图:定义服务将提供何种信息(以及可以请求这些信息的 CRUD 类的操作)的数据对象模型和服务模型。
  • 请求模板 XSD:定义请求模板可能的格式。此请求模板定义信息模型的松散类型结构,其中所有的元素都是可选的,用于表示请求者可能向提供者发送的请求。
  • 请求模板 XML:在网上作为请求的一部分传递的请求 XSD 模板的实例
  • 响应模板 XSD:定义响应模板可能的格式。此响应模板通常为信息模型的强类型结构,其中所有的元素都是可选的,用于表示提供者可能向请求者发送的响应。
  • 响应模板 XLM:在网上作为响应一部分传递的响应 XSD 模板的实例
  • 导航器: WS 响应模板提供者端引擎,用于分析传入请求模板和据此创建响应模板,从 Web 服务结果对象图中提取信息。

结果

在此过程中,必须注意可能的结果,如:

  • 自定义结果:WS 响应模板服务的客户端可以对从服务调用获得的结果进行调整:服务器将不发送不需要的数据,客户端也不应收到任何占位符数据(甚至 Nil 或空值也不行)。
  • 优化的数据流:服务调用包含两个部分(通常为两台计算机)间的数据交换。Web 服务模板解决方案必须尽可能地减少这两个部分间的数据流。必须注意数据流的表达式,以尽可能缩小其规模。例如,当使用 XML 时,请留意数据流的名称空间声明、元素前缀、层次结构等。
  • 服务实现的优化:WS 响应模板解决方案将允许服务提供者开发人员采用只调用构造客户端定义的结果所需的方法或仅检索相关的数据方式,从而对流程进行优化。
  • 基于标准:WS 响应模板的设计遵循各项 Web 服务标准:
    • SOAP 通信协议:Web 服务模板必须使用 SOAP 实现。我们将使用符合 JAX-RPC 要求的引擎作为供选择的服务实现平台(服务器端)。虽然此类实现主要是为 HTTP 传输协议而存在,但这并不意味着 Web 服务模板必须只能绑定到特定的协议(可以与 JMS 等其他机制一起使用)。
    • 服务将使用 WSDL 定义,而 XML 模式则用于定义交换对象的格式。
    • 操作采用文档样式和文本用法 (Doc/literal) 以符合 WS-I 的要求。
  • 参数化导航路径:信息模型层次结构的导航路径可以定义其他的参数来筛选特定的关系。另外,此参数化的路径也可以在相同的服务调用中重复,以扩展服务的潜能(对于参数化更是如此)。
    • 注意:这并不意味着可以在同一个调用中多次调用 Web 服务操作。只能对返回的对象图进行比普通 Web 服务设计模式更大程度的控制。
  • 服务的粒度级别:WS 响应模板模式将降低 Web 服务的粒度级别。现在,服务提供者不会为不同的客户端用例定义不同的服务,而将定义更为抽象的单一服务,客户端可以根据各自的需要对其进行调整。
  • UML 作为描述服务的一种可能方式:UML 概念(在本文档中使用)可以用于表示信息模型。尽管建模服务和数据对象时并不要求使用 UML(用户可以根据 WS 响应模板规范直接编码自己的 WSDL 和 XSD),但是有大量的工具可用于将 UML 转换为相应的 WSDL、XSD 和 WS 响应模板实现,以自动创建更为灵活的可识别 WS 响应模板的 WSDL。
  • 更易于维护,兼容性更好:服务提供者可以扩展其现有的 WS 响应模板服务,而不会对现有客户端造成影响。我们所说的扩展是指在数据结构中添加新属性:这样,现有客户端在请求中不会请求此属性,因此不会从新实现的响应中获得此属性;只有要求此新属性的客户端(特别是新客户端)才会在结果中获得此属性。
  • 额外系统开销:WS 响应模板解决方案不会带来额外的系统开销。请求可比普通 Web 服务解决方案传输更多的数据,因为响应中所需的每个项必须在请求中指定,故而其他信息需要对结果对象图进行裁剪和筛选。此外,将在服务器上执行额外的代码,以处理 WS 响应模板请求。此系统开销并不太大,但 WS 响应模板显然并不是在所有情况下都有效。

相关模式

以下是与 WS 响应模板模式相关的模式。

  • 请求者端缓存模式(requester sde caching pattern,RSPC):对于在指定服务时不知道客户端数据要求的多个客户端,WS 响应模板是最理想的。存在类似使用场景,即在请求者进行了初始调用后,一再重复进行相同的请求。此 WS 响应模板模式并不支持这种情况,因为这将涉及到保持请求者和提供者间的状态,不过,可以将其与请求者端缓存模式(请参阅参考资料部分)结合使用,以满足服务约束的性能质量要求。

结束语

我们在本文中对 WS 响应模板模式规范进行了详细的分析。此模式规范遵从了 Gamma 等人在其著作《设计模式》中指定的模式结构。在以后的文章中,我们将再次讨论此模式规范,并使用 IBM 旗舰型开发产品 Rational Software Architect 的模式驱动开发环境提供此模式规范的一个实现。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=169514
ArticleTitle=Web 服务响应模板模式:规范
publish-date=10192006