首页>参考读物>计算机科学与技术>计算机网络

服务设计模式:SOAP/WSDL与RESTful Web服务设计解决方案
作者 : (美)Robert Daigneau 著
译者 : 姚军 译
丛书名 : 华章程序员书库
出版日期 : 2013-11-04
ISBN : 978-7-111-44305-6
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 255
开本 : 16
原书名 : Service Design Patterns: Fundamental Design Solutions for SOAP/WSDL and RESTful Web Services
原出版社: Addison Wesley
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书提供了遵循REST架构风格和SOAP/WSDL规范的Web服务设计解决方案,这些解决方案已经过验证,涵盖了Web服务设计的基本主题并列出了每个主题常用的设计模式。这些代码示例能帮助你更好地理解模式的工作原理,并理解这些解决方案如何运用到迥然不同的几种技术中。

图书特色

遵循RESTful体系结构风格或者利用SOAP/WSDL规范已经过验证的Web服务设计解决方案
Web服务已经使用了许多年。现在,开发人员和架构师遇到了许多反复出现并与其使用相关的设计挑战,他们发现,某些服务设计方案在特定问题的解决上优于其他方案。本书揭示了Web服务中的基本主题,并列出了每个主题的常见设计模式。对于所有模式,作者都介绍了可用的环境,解释了组成的要素,并探讨了相对的优势和劣势。书中提供了代码示例,可帮助你理解模式的工作原理,并且保持通用性,以便能够了解这些解决方案如何应用到随着时间推移不断变化的各种技术中。

本书提供了如下问题的答案:
如何创建Web服务API?有哪些常见的API风格?何时应该使用某种特定的风格?
客户端和Web服务如何通信?创建多方长期交换数据的复杂对话的基础是什么?
实现Web服务逻辑有哪些选择?何时应该使用某种特定的方法?
客户端如何减少与服务使用的底层系统之间的耦合?
如何发现Web服务的相关信息?
客户端或者服务如何支持验证、校验、缓存和日志等通用功能?
对服务的哪些更改会破坏客户端?
服务有哪些常见的版本控制方法?Web服务如何设计才能支持业务逻辑的持续演化,同时避免客户端频繁更新?

对企业架构师、解决方案架构师和使用Web服务创建企业IT应用、商业或者开源产品,以及利用新兴的云平台的软件即服务产品的开发人员来说,本书是一本必备参考图书。

作者简介





资深Web技术专家,对Web服务和SOA有深入研究,拥有20多年从业经验。涉及行业很广,涵盖金融服务、制造业、零售业和旅游业等。曾经担任Monster.com的架构主管、Fidelity投资公司的应用开发经理等要职,还曾多次在技术会议上发表演讲。


Web服务设计领域的经典著作,Amazon五星级畅销书,Web服务领域资深专家撰写,Martin Fowler和Ian Robinson等大师级人物亲自作序推荐
详细讲解SOAP、WSDL、RESTful 3种Web服务API的风格和20多种常用的Web服务设计模式,深入阐述每一种模式的原理、适用场景,以及针对各种具体问题的解决方案

图书前言

开始筹划本书时,我不能完全确定SOA和REST到底是什么。我知道自己不是唯一一个有这种感觉的人。大部分关于这些主题的讨论充斥着歧义、夸张、误导和倾向于感情而非理由的争论。作为曾经苦于分布式对象技术的开发人员,我仍然为Web服务深深着迷。我将它们看作是整合不同系统、重用公共业务逻辑的实用手段。
  此后,REST的势头很猛,WS*服务已经建立了一个稳定的立足点,而SOA已经宣布消亡[Manes]。在此期间,我对Web服务的着迷始终没有改变。随着移动、云和软件即服务(SaaS)平台导致软件变得越来越分散,Web服务的重要性只会继续增大。我们确实生活在一个激动人心的时代!
本书的内容
  本书是利用SOAP/WSDL或者遵循REST架构风格的Web服务设计解决方案的纵览,目标是提供一本简洁的参考书,将基本的Web服务设计概念收录其中。每种模式都描述了一种对于某个反复出现的设计问题已知的且经过证明的解决方案。但是,这些模式并不一定是可以仿效的秘诀。实际上,某些模式可能不会以完全相同的方式再次实现。这本纵览并没有发明新的解决方案,本书中的模式都是开发人员经过长期的努力识别出来的,这些开发人员注意到,某些问题可以使用类似的设计方法解决。本书总结并规范化了这些思路。
  服务可以用许多不同的技术实现。例如,SOA从业人员往往认为,诸如CORBA、DCOM以及更新的用于REST和SOAP/WSDL开发的软件框架等不同的技术都可以用于创建服务。本书专注于Web服务。遗憾的是,这个术语已经有些使用过度了。有些人用它来表示任何使用WSDL的可调用函数。这一术语也用于描述REST风格的服务(参见[Richardson,Ruby])。本书使用“Web服务”这一术语指软件功能,该软件功能需要利用HTTP作为简单数据传输手段(例如SOAP/WSDL服务)或者使用HTTP作为定义服务行为语义的完整应用协议(例如REST风格服务)。
本书的读者
  本书针对的是目前使用Web服务或者正在考虑使用它们的专业企业架构师、解决方案架构师和开发人员。这些专业人员分为两种不同的类型:第一类人员创建软件产品(例如商业应用和开放源码SaaS应用);第二类人员为企业IT部门创建企业级应用。这种分类对软件专业人员进行了调整,同样也可以用于学术领域。
阅读本书所需的背景知识
  模式作者往往提供代码示例来阐述设计解决方案。大部分条目都不是针对特定平台的,但是作者仍然必须选择例子中使用的语言、框架和平台。虽然近年来出现许多新语言,但我仍然决定使用Java和C#,原因有二。首先,这两种语言有着很大的市场份额(也就是说,有很大的应用安装基础),并且相当成熟。其次,大部分读者可能使用或者曾经使用过这些语言,因此会很熟悉它们的语法。这里假定读者对这些语言和面向对象编程(OOP)的概念有中高级程度的了解。
  本书中的模式大量使用在Java和C#开发人员中很常见的几种框架。这些框架封装了Web服务开发人员最常用的功能。本书不介绍在这些框架中使用的模式,而是说明开发人员利用这些框架构建Web服务时所用的模式。下面是本书中使用的框架:
  SOAP/WSDL框架:
  -用于XML Web服务的Java API(JAX-WS)
  - Apache CXF
  - Microsoft公司的Windows Communication Foundation(WCF)
  REST框架
  -用于REST风格Web服务的Java API(JAX-RS)
  - Microsoft公司的WCF
  数据绑定框架:
  -用于XML绑定的Java体系结构(JAXB)
  - Microsoft的DataContractSerializer和其他序列化器(如XmlSerializer)
  我们假定读者至少熟悉如下技术:
  JavaScript对象标记法(JavaScript Object Notation,JSON)
  可扩展标记语言(Extensible Markup Language,XML)
  XML架构定义语言(XML Schema Definition Language)
  XML路径语言(XML Path Language,XPath)
  可扩展样式表语言转换(Extensible Stylesheet Language Transformation,XSLT)
  Web服务描述语言(Web Services Description Language,WSDL)
本书的组织
  在第1章的总体介绍之后,本书中的模式分散在第2~7章中。
  第2章,本章主要探索Web服务使用的主要API风格。正确风格的选择带来的影响不可低估,因为一旦选择了某种风格,就很难改变。
  第3章,介绍所有客户-服务交互的基础知识。这些模式可以用于任何服务设计风格。理解了这些模式,你就能设计在短期或者长期内多方交换特定主题数据的复杂通信。
  第4章,软件应用经常由包含逻辑相关实体的层次组成。本章说明了用于管理Web请求和响应的常见服务层[POEAA]实体。这些模式的意图是消除客户和服务使用的底层系统之间的耦合。
  第5章,服务可以用多种方式实现。它们可能对数据库表等资源有详尽的了解,并能协调对象关系映射器(Object Relational Mapper,ORM)的行为或者对遗留API进行直接调用,或者将工作转发给外部实体。本章关注每种方法的实施结果。
  第6章,某些任务是通用的,它们可以反复使用。本章讨论与客户端和服务开发人员相关的最常见的、基本的架构关注点,也研究一些企业SOA基础架构的常用模式。
  第7章,开发人员不断创建服务,并与发展速度不同的客户端保持兼容。然而,这个目标难以实现。本章研究导致客户端中断的因素,并讨论两种常见的版本策略。你还将了解如何扩展服务以符合客户端需求,同时避免软件的重大修改。
  附录、参考书目和词汇表提供了支持信息。
本书使用的模式组成
  介绍模式的方法很多,从经典的Christopher Alexander[Alexander]形式到四人组[GoF]以及面向模式软件架构[Pattern-Oriented Software Architecture,POSA]书籍中的高度结构化形式。本书中使用的惯例受到了Alexander形式和企业集成模式(Enterprise Integration Patterns,EIP)中使用的风格的影响。希望你能够认为这种交流风格会使模式容易理解。书中只使用少数反复出现的标题来区分内容。每种设计模式用如下惯例描述。
  模式名称:模式名称用几个字描述解决方案。这个名称为解决方案提供一个句柄或者标识符,是本书中介绍的更大型的模式语言的一部分,目标是使用容易理解和用于日常对话的助记名。本书中的许多模式名称已经相当常见。
  语境:模式名称之后的语境用几个句子表达。它标识模式适用的一般场景。当然,所有模式都适用于Web服务,但是有些模式只与特定的情况相关。这一部分可能引用其他模式来帮助建立语境。
  问题:模式解决的问题由一个问句表示。你应该可以理解这个问题,并且很快确定这个模式和你所面临的设计挑战有无关系。这一部分用两条水平线区分。
  影响:影响提供问题的更多细节。这一部分在问题定义之后,探索问题难以解决的原因并介绍已经尝试过但无法产生效果的替代方案。其目的是将你自然地带入解决方案。
  解决方案摘要:这一部分用几句话提供设计解决方案的一个简单描述。尽管它很简洁,但是你应该能够很快地理解问题的解决方法。解决方案摘要一般描述组成设计的主要实体、它们的作用和关系以及协作解决问题的方式。这里的解决方案并不是只有一种实现方法的绝对良方,而是应该把它看作可以用许多不同方式实现的通用模板。这个摘要通常附有框图,用于对叙述加以补充说明。本书中使用的主要机制包含序列图和类图。在某些情况下,解决方案的模型通过非标准的图形描述建立。这一部分和问题部分一样用两条水平线区分,意图是帮助读者更快地找到问题和解决方案摘要。
  解决方案详情:这一部分用朴实的风格介绍了解决方案的几个方面。它扩展解决方案摘要,探索解决方案用于解决问题、消除影响的要素。由于每个解决方案都有其优点和缺点,这一部分还评估解决方案实施结果和你需要考虑的其他因素。其中还将指出本书中其他地方或者其他模式书籍中可能找到的相关模式。这样做有几个不同的理由。本书中的一些模式实际上是现有模式的特化,我认为这是感谢原创资源的唯一正确方式。其他模式是对我们所讨论的模式的补充,或者可以看作是替代方案。
  考虑因素:这部分讨论使用模式时需要考虑的其他因素。这些因素包括设计考虑因素、相关技术和许多其他相关主题,使用项目符号标注形式帮助读者浏览这一部分,重点关注感兴趣的特定主题,并非每个模式都有这一部分。
  示例:这部分用于补充前面的几个部分。即使不阅读这一部分,你也应该能够理解模式的精要。有些模式提供多个示例,帮助你理解模式的多种实现方式。其他模式只提供少数帮助理解的示例。
  本书的示例有多种形式。最常用的形式是Java和C#代码。其他示例则使用XML、JSON、XSD和WSDL。所有示例都尽量保持简单,因此有一些细节被略去(例如,异常处理代码块、线程管理、大部分队列和数据库相关逻辑等)。在某些情况下,示例只包含足以表达模式基本思路的代码。在其他情况下,代码示例会提供更多细节,因为我觉得省略这些细节可能给读者留下太多的问题。
  请注意,本书的意图并不是介绍使用特定API的方法,已经有许多很好的书籍描述了这些主题。这些代码示例是为了加深你对抽象的设计解决方案的理解。而且,正如模式描述提供的模板一样,代码示例的目的也在于此。因此,你不应该逐字复制任何代码。
本书不涵盖的模式类型
  服务设计这一术语包含了大量的主题,然而,其中许多主题相当深入,并已经在其他书籍中得到了广泛的介绍。因此,本书的内容只包含与Web服务相关的、最基本的解决方案,避开了下列主题,或者只做了简略的介绍。
  企业集成模式:虽然Web服务提供了整合不同应用的极佳手段,但集成主题过于深入。Hohpe和Woolf所著的《Enterprise Integration Patterns:Designing,Building,and Deploying Messaging Solutions》[EIP]一书很好地阐述了通过中间件解决方案(主要利用队列技术)进行集成的方法。本书中的许多模式以该书的模式作为基础或者引自它们。
  工作流/编排:工作流技术提供了通过一组由中央控制器管理的相关活动来定义执行流程的方法。工作流经常由Web服务触发,往往与外部Web服务交互以发送或者接收数据。工作流持续时间可能相对较短(例如几秒),也可能持续数天、数周甚至数月。工作流的主题远远超出了本书的范围,可以参见http://workflowpatterns.com[van der Aalst等人]之类的资源。
  事件驱动架构:以工作流为例的“命令和控制”架构风格的替代品是事件驱动架构(Event-Driven Architecture,EDA)。在EDA架构中没有中央控制器,相反,当客户端和服务在各自领域中发生特定事件时,它们将以更加灵活、动态、不可预测的方式相互通信。有时候,EDA的规则通过服务编排模式(Choreography)描绘,更多相关的知识建议参见:www.complexevents.com/category/applications/eda/。
  服务编排:服务编排和EDA类似,不是“命令和控制”风格的架构,而是通信各方采用基于规则的方法,声明各方之间允许交换数据的顺序,正如外部观察员所见到的那样。这种概念已经广为采用。
  安全:对认证、授权、数据机密性、数据完整性、防抵赖、用于加强网络基础架构的技术以及其他安全关注点不做详细讨论,因为这些主题相当深奥,在其他书籍中已经有广泛的介绍。
致  谢
  我要感谢每个对这个项目提供过帮助的人,没有你们,我就无法完成这个项目。
  我很感激2008年举行的模式编程语言大会(Pattern Languages of Programming Conference,PLoP)上的许多人。Kyle Brown为我指出了通往有效的模式形式的道路,令我受益良多。他向我灌输了建立问题、影响和约束的策略。我还要感谢2008年PLoP会议上的工作伙伴对本书中几个模式的早期版本以及写作风格方面的反馈。这些人包括Paul Austrem、Philipp Bachmann、Geert Monsieur、Mark Mahoney、Lise Hvatum、Bobby Woolf和John Liebenau。
  Bobby Woolf、 Rebecca Wirfs-Brock和Michael Stiefel自愿审阅了几章的早期版本。你们的反馈帮助我找到了正确的方向。在写作的早期,John Liebenau和Uwe Zdun也为我提供了帮助。
  我要将最诚挚的谢意献给本书的官方技术评审团队。Jim Webber慷慨地奉献了他的时间,向我提供了可靠的REST资源。Eric Newcomer为微调本书的范围提供了思路。Marc Hadley使我在几个Java规范请求(Java Specification Request,JSR)上避免了错误,并且对其他多个领域都提出了中肯的意见。Scott Ambler提供了多个有助于模式理解的建议。Elliotte Rusty Harold的经验举世闻名,他的评论是发人深省的。Ian Robinson提供了一个非常重要的模式,为本书做出了巨大的贡献。Rebecca Wirfs-Brock比任何人都更加了解我的长处和弱点,她的反馈是无价之宝。当然,我非常感谢Martin Fowler接纳我进入这个Martin Fowler大师签名系列,并且和我一起改进本书的内容。
  最后(但并非不重要),我必须感谢我的编辑团队:Chris Guzikowski、Raina Chrobak、Chris Zahn、Julie Nahil和Audrey Doyle。没有你们的耐心、支持和激励,我永远无法到达终点。

上架指导

计算机\Web设计

封底文字

遵循REST体系结构风格或者利用SOAP/WSDL规范的Web服务已经过验证的设计解决方案。
Web服务已经使用了许多年。现在,开发人员和架构师们遇到了许多反复出现的与其使用相关的设计挑战,并且已经发现,某些服务设计方法在特定问题的解决上优于其他方案。本书找出了Web服务中的基本主题,并列出了每个主题的常见设计模式。所有模式都介绍了可用的环境,解释组成的要素,并探索了相对的优势和不足。书中提供了代码示例,可帮助你理解模式的工作原理,并且保持通用性,以便你能够了解这些解决方案如何应用到随着时间推移不断变化的各种技术。
本书提供了如下问题的答案:
• 如何创建一个Web服务API,有哪些常见的API风格,何时应该使用某种特定的风格?
• 客户端和Web服务如何通信,创建多方长期交换数据的复杂对话的基础是什么?
• 实现Web服务逻辑有哪些选择,何时应该使用某种特定的方法?
• 客户端如何减少与服务使用的底层系统之间的耦合?
• 如何发现Web服务的相关信息?
• 客户端或者服务如何支持验证、校验、缓存和日志等通用功能?
• 对服务的哪些更改会导致客户端破坏?
• 服务有哪些常见的版本控制方法?Web服务如何设计,才能支持业务逻辑的持续演化,而又无须迫使客户端频繁更新?

对企业架构师、解决方案架构师和使用Web服务创建企业IT应用、商业或者开源产品以及利用新兴的云平台的软件即服务产品的开发人员来说,本书是一本必备参考图书。

作者简介

(美)Robert Daigneau 著:暂无简介

译者简介

姚军 译:暂无简介

译者序

互联网的出现使企业计算平台不再是孤岛,人们可以跨越地域进行数据交换、商业交易,所有主流企业纷纷推出大量的网上服务,客户可以通过传统的桌面电脑和时尚的平板电脑、灵活的智能手机等获得信息和服务,而实现这一切的核心就是Web服务。
  Web服务的开发、设计与传统的程序设计有着很大的不同,由于互联网是个异构系统组成的网络,服务端和客户端不仅在地域上不同,在所属组织、使用平台上也往往不同,这就使两者之间的接口提供以及接口耦合度成为关键性问题。良好的接口使得不同组织可以自由开发客户端,而低耦合度则可使双方进行的更改的影响降到最低,从而使服务和客户端有更好的适应性。
  为了达到上述目标,Web服务架构师和开发人员经过不懈努力,推出了不同的服务API风格和大量的服务设计模式,这些模式来源于设计开发实践并且经受了时间的检验。进入这一领域的新手们,无不热切地盼望有一本这方面的书籍——能够涵盖各种设计模式,详细地介绍它们的特点、适用场合以及实现方法,本书就是这样一个宝贵的资源。
  作者Robert Daigneau在服务的设计和实现方面有着丰富的经验,在这本力作中,他收集了最为经典的3种Web服务API风格和20多种常用设计模式,并精心加以分类,从服务解决的问题、适用场合、优缺点,到详尽的示例均有涉及。本书既可以作为入门者的学习教材,也可以作为高级Web服务/客户端设计人员的案头参考,即使对于一般的软件开发和设计人员,书中介绍的思路也大有裨益。
  在本书翻译期间,我们从书中获益良多,因此我们诚挚地将本书介绍给广大读者,希望它能成为读者手中通向优秀设计大门的钥匙。
  本书的翻译工作主要由姚军完成,徐锋、陈绍继、郑端、吴兰陟、施游、林起浪、陈志勇、刘建林、宁懿等人也为本书的翻译工作做出了贡献,在此也要感谢机械工业出版社华章分社的编辑们对翻译工作提出的许多中肯的意见,同时期待着广大读者朋友的批评指正。

译 者

图书目录

译者序
Martin Fowler所作的序
Ian Robinson所作的序
前言
致谢
第1章 从对象到Web服务 / 1
1.1 Web服务是什么 / 2
1.2 从本地对象到分布式对象 / 3
1.3 为什么使用Web服务 / 5
1.4 Web服务的考虑因素和替代方案 / 6
1.5 服务和松散耦合的承诺 / 8
1.6 SOA是什么 / 9
1.7 总结 / 9
第2章 Web服务API风格 / 10
2.1 引言 / 10
2.2 设计Web服务API的考虑因素 / 11
2.3 RPC API / 13
2.4 消息API / 21
2.5 资源API / 30
第3章 客户端与服务之间的交互 / 41
3.1 引言 / 41
3.2 请求/响应模式 / 43
3.3 请求/确认模式 / 46
3.4 媒体类型协商模式 / 56
3.5 链接服务 / 62
第4章 请求和响应管理 / 67
4.1 引言 / 67
4.2 服务控制器 / 68
4.3 数据传输对象 / 75
4.3.1 数据绑定考虑因素 / 79
4.3.2 总体考虑因素 / 80
4.4 请求映射器 / 88
4.5 响应映射器 / 99
第5章 Web服务实现风格 / 106
5.1 引言 / 106
5.2 Web服务实现的设计考虑因素 / 107
5.3 事务脚本 / 108
5.4 数据源适配器 / 111
5.5 操作脚本 / 117
5.6 命令调用器 / 121
5.7 工作流连接器 / 127
第6章 Web服务基础结构 / 134
6.1 引言 / 134
6.2 服务连接器 / 136
6.3 服务描述符 / 141
6.4 异步响应处理器 / 148
6.5 服务拦截器 / 157
6.6 幂等重试 / 166
6.7 SOA基础结构模式简述 / 178
6.7.1 服务注册表 / 178
6.7.2 企业服务总线 / 179
6.7.3 编排引擎 / 181
第7章 Web服务的演化 / 183
7.1 导言 / 183
7.2 导致破坏性变化的因素 / 184
7.2.1 对媒体类型或者消息的结构性修改 / 184
7.2.2 服务描述符变化 / 186
7.3 常见版本控制策略 / 187
7.4 单消息参数 / 188
7.5 数据集修改 / 190
7.6 宽容阅读器 / 195
7.7 消费者驱动契约 / 201
7.8 模式对服务演化的促进或者妨碍 / 213
附录 对外部模式的引用 / 217
词汇表 / 222
参考书目 / 233

教学资源推荐
作者: 龚玲 张云涛
作者: 常晋义 何世明 赵秀兰
作者: Michaet J.Palmer
参考读物推荐
作者: 费杰 著
作者: Metzler,J. DeNoia,L.