`

REST与Web services

阅读更多
问题:你如何看待一个房间中两个或多个架构师?回答:是争论。既然SOA是如今企业中很多这样的房间中谈论的主题,那么最激烈的争论就是Representational State Transfer (REST)与Web services的关系。很多类似的讨论演变成讨论哪种方法更好,但如同SOA领域的很多争论一样,实际结果是非常微妙的。直到现在,ZapThink还是很乐意在一旁观战,但我们是时候权衡他对REST与Web services的看法了。

  REST与Web services的上下文

  这个持久的争论是SOA的核心挑战:创建松耦合服务接口的最好办法是什么?一种方法是称为REST的分布式计算。REST依赖于HTTP协议作为无状态的客户端/服务器协议来交换信息,它使用简单的良定义操作集:POST, GET, PUT,DELETE进行请求和响应。在REST中,资源用与Web的URL类似的URI暴露。REST的思想是改变资源的某个状态,而不是像传统分布式计算中的RPC那样调用远程系统上的某个进程

  为了说明这一点,REST可以调用包含上百个URI的资源类型的客户。例如,http://mysite/customers/insurance/rschmelzer可以引用到某个保险应用上的我的客户的记录。为了修改该记录,用户可以POST或PUT一个XML文件到这个URI上,然后调用该URI以GET该信息。关键是REST使用的是名词,而不是动词。它没有调用某个getcustomer方法来传送customerID,而是让用户调用叫做customerID的资源,并对它抛出一个XML。

  按照REST的观点,我们不用关心底层解决方案的架构。我们可以在n层应用或客户端/服务器解决方案中利用REST,与面向服务的方法一样简单。实际上,任何应用都可以利用REST,只要它用GET通过HTTP暴露一些功能即可。它的主要挑战在于明确并定位个体资源以及构建异步的,事件驱动风格的交互。HTTP和XML之外的REST本身的缺点也是厂商和IT公司的挑战。此外,我们还需要明确词汇的语义,即在客户端和服务器之间交换的XML的准确涵义是什么。

  然而,在SOA中,服务并不需要映射到资源上,而是一套操作或一组业务过程。实际上,服务与功能和过程的概念映射得更紧密,所以这些功能和过程更重要。因此,服务可以暴露成资源,而资源也可以暴露成服务,而且服务和资源之间并没有谁是优先的。

  RPC与文档风格的交互

  真正的对比不是REST与SOA,而是REST风格的服务实现与Web services风格的特定操作。Web services并不是一种架构方法,而是一套如何定义服务(WSDL),与服务通信(SOAP)以及发现可用服务(UDDI)的标准,还包括安全性、可靠性、组合与管理任务。服务对于代码是抽象的,因此它不表示实际代码。也就是说,我们不能运行一个服务。你只能对可能是也可能不是面向服务的底层代码暴露服务接口。由于服务不能运行,因此我们唯一关注的就是基于元数据的接口和策略,因为它们控制着服务的定义、交互和管理以及如何组合成业务过程。

  服务也不关注资源,而是关注操作。一个服务可能有多个操作,上十个甚至上百个。每个操作都说明了一个特定的行为,让服务处理收到的XML文档并产生对应的结果。但是,此时我们遇到了挑战。我们是不是要定义一个单独的WSDL文档,来说明一个Customer Service,让它包括多个操作用于创建、修改和删除记录?我们是不是要创建多个服务,让每个服务都对应一个特定操作,而接收不同的XML文档来处理不同的用例呢?

  这个问题是讨论Web services 中RPC风格和文档风格两种方法的核心。在RPC风格中,服务被作为具有方法的对象,它们用SOAP指明特定的操作,用特定的方法触发响应。XML消息看起来像对方法的调用,因为它具有参数和方法。例如,我们可以调用Customer service上的getCustomerName操作,传送一个像1234一样的XML文档。因此,RPC风格需要这个服务客户不仅知道他想调用的特定操作,还要知道它的方法和类型。于是,RPC是一种紧耦合方法,任何对操作或方法的改变都会引起服务客户的显著变化。

  REST方法与RPC刚好相反,它具有名为Customer的对象,该对象拥有多种操作用于创建、删除和修改记录,也有与不同客户对应的多个独立的对象实例。因此,REST更像文档风格,它与RPC风格的不同之处在于只需要服务客户知道他们想调用的操作。在文档风格的方法中,我们只调用我们想调用的服务,并发送一个服务能处理的XML文档。因此,我们可以调用CustomerInfo service,并发送一个它能接受的XML文档。然后,服务客户将收到一个XML文档,而不用调用任何方法或指定任何数据类型。

  于是,文档风格比RPC风格提供了更大程度的松耦合,因为任何对方法或操作的改变对服务客户的影响非常小。此外,文档风格的Web services交互的XML体包含了实际的业务消息,即有价值的信息。而在RPC方法中,XML通常只是描述了方法调用中的方法和参数。

  因此,REST和文档风格的Web services的基本不同是服务客户把什么暴露成服务。Web services有合约,定义在WSDL中。由于Web services关注服务而不是资源,所以客户对服务中的各种操作行为有清晰的认识。而REST是面向资源的,我们只对资源有了解,而行为是隐含的,因为没有控制每个URI资源行为的合约。

  在REST中,你可以为特定资源请求一个状态改变,但你不能指定操作。实际上,REST中的操作都是一样的:GET, PUT, POST和 DELETE.但这些操作实际上做什么(有的人称为“应用协议”)对于每个资源是不同的。如果你有面向资源的视图,且认为REST是一种架构风格,那么REST的服务就被暴露成一种资源,以确保松耦合与可组合性。而如果你在企业架构中采用面向服务的视图,那么REST就代表一种暴露服务的实现风格,它与Web service交互的文档风格同样有效。

  ZapThink的做法

  ZapThink认为面向服务是一种明确业务需求的方法,它用服务集合来表示复杂的可变的结合了其它服务的业务过程。于是,如何实现这些服务就是一种实现决策,它可以利用各种技术方法,包括REST和文档风格的Web services。换句话说,REST和Web services的争论是没有意义的,因为问题会归结为哪一种方法更适合工作。

  应用REST实现松耦合服务的真正挑战在于REST没有明确的合约定义行为,即所有的行为是隐含的。REST中的数据是通过 GET, PUT或 POST来操作的,它们包含了理解服务如何行动的所有语义。因此,REST不适合那些想采用合约开发方法在松耦合之外还要利用重用和组合的组织。这正是REST的缺点,而SOA想重用的不止是资源,还包括操作和组合。

  然而,关于Web services和REST的争论就像争论锤子和螺丝刀谁是更好的工具一样没有意义。尽管每种方法都对暴露服务和资源有着自己的价值,但SOA是在商业环境中处理不断变化的更好的方法。业务并不关心资源甚至服务本身,但是商业价值却是与这些资源和服务的交互中得到的。这取决于架构师在应用不同架构和实现风格时对于解决组织持续不断的业务变更是如何理解的。

分享到:
评论

相关推荐

    基于REST的WebServices研究_汪芳琴

    论文在研究REST理论和Web本质特征的基础上,引入面向资源的架构和基于SAWADL语义的服务资源发现方法来设计基于REST的Web Services的总体结构,完成了服务器端的主要组件的设计、服务发现与匹配模型的设计以及客户端...

    基于Ajax与REST的WebServices研究与实现

    基于Ajax与REST的WebServices研究与实现 很不错的一篇硕士文章

    REST WebServices

    REST WebServices,总结的挺好的。看了会有很大的收获

    Securing REST WebServices

    Securing REST WebServices with Spring Security and Custom HTTP Request Factories

    Web Services平台架构

    除了这些标准和框架,开发Web Services还需要理解REST(Representational State Transfer)风格的API,这是一种轻量级的替代方案,特别适合于资源导向的Web应用程序。Java通过JAX-RS(Java API for RESTful Web ...

    jersery client调用REST框架web services服务的一个示例

    总之,"jersery client调用REST框架web services服务的一个示例"是一个关于如何使用Java的Jersey库作为客户端工具来与RESTful Web服务进行通信的教程。它涉及到REST的基本概念,Jersey客户端API的使用,以及与XML...

    RESTful Java Web Services

    ### RESTful Java Web Services #### 一、RESTful Web服务概览 REST(Representational State Transfer)是一种软件架构风格,最初由Roy Fielding在他的博士论文中提出。它定义了一种简单且灵活的方法来创建分布式...

    RESTful Web Services中文高清版.pdf.zip

    本资料《RESTful Web Services中文高清版.pdf》深入浅出地介绍了REST的核心概念,以及如何构建符合REST风格的Web 2.0应用。 REST的核心思想是将Web视为一个由资源构成的系统,每个资源都有其唯一的URI(统一资源...

    REST webservices多资源 资料

    在"REST webservices多资源"这个主题中,我们主要关注的是如何设计和实现能够处理多个不同类型资源的RESTful API。这涉及到以下几个关键知识点: 1. **资源模型**:在REST架构中,每个资源都有一个唯一的URI,例如...

    InfoQ_ 深入浅出REST.pdf

    #### REST与Web Services之争 在介绍REST之前,作者提到了围绕“什么是实现异构应用间通信的最佳方式”的争论。虽然当时基于SOAP、WSDL和WS-*规范的Web Services占据主流地位,但仍有声音支持REST。这部分内容反映...

    RESTful WebServices中文版 完整清晰版

    本书包括以下内容: ·强调Web基础技术的力量 —— HTTP应用协议、...·关注实际问题,诸如怎样设计和实现RESTful Web services与客户端等 《RESTful Web Services》是对真实Web services运用REST设计哲学的第一本书。

    RESTful Web Services 中文版 高清 PDF 电子书

    综上所述,《RESTful Web Services 中文版》是一本介绍了REST原则、ROA设计、如何开发RESTful Web服务及其最佳实践的教科书,它不仅面向理论的讲解,更着重于实践指导和真实案例的分析,适合广大Web开发和架构设计...

    jersey rest web services整理

    【标题】:“jersey rest web services整理” 在Java世界中,RESTful Web服务已经成为构建可扩展、松散耦合和跨平台应用程序的标准方法。Jersey是实现Java API for RESTful Web Services (JAX-RS)规范的一个开源...

    西北工业大学软件工程WebServices实验报告

    **西北工业大学软件工程WebServices实验报告** Web Services是一种基于互联网的、平台独立的软件接口,它允许不同系统之间进行通信和交互。这个实验报告详细涵盖了Web Services的核心概念、技术栈以及在软件工程中...

    RESTFUL WEB SERVICES中文高清版

    不仅讲解REST与面向资源的架构(ROA)的概念与原理,还向读者介绍如何编写符合REST风格的Web 2.0应用。本书详实、易懂,实战性强,提供了大量RESTful Web服务开发的最佳实践和指导,适合广大的Web开发人员、Web架构...

    Java Web Services教程

    1. **JAX-RS (Java API for RESTful Web Services)**:REST(Representational State Transfer)是一种轻量级的Web服务设计风格,强调资源和状态的管理。JAX-RS提供了创建RESTful Web服务的API,例如使用`@GET`, `@...

    jmeter对webservices的测试

    【标题】"jmeter对webservices的测试"涵盖了在信息技术领域中使用Apache JMeter工具对Web服务进行性能和稳定性评估的重要知识。JMeter是一款开源、跨平台的负载和性能测试工具,广泛应用于Web应用程序和各种服务接口...

Global site tag (gtag.js) - Google Analytics