具象状态传输(REST)和简单对象访问协议(SOAP)

有人可以解释什么是REST,什么是纯英文的SOAP? 以及Web服务如何工作?


关于SOAP和REST的简单解释

SOAP - “简单对象访问协议”

SOAP是通过Internet传输消息或少量信息的一种方法。 SOAP消息采用XML格式,通常使用HTTP(超文本传输​​协议)发送。


休息 - 具有代表性的国家转移

休息是在客户端和服务器之间发送和接收数据的简单方法,并且没有定义很多标准。 您可以以JSON,XML甚至纯文本格式发送和接收数据。 与SOAP相比,它的权重较轻。


在这里输入图像描述


这两种方法都被许多大型玩家所使用。 这是一个偏好问题。 我的首选是REST,因为它更易于使用和理解。

简单对象访问协议(SOAP):

  • SOAP在HTTP或有时TCP / IP之上构建XML协议。
  • SOAP描述了函数和数据类型。
  • SOAP是XML-RPC的继承者,非常相似,但描述了一种标准的通信方式。
  • 有几种编程语言对SOAP有本地支持,通常你会给它一个Web服务URL,你可以调用它的Web服务函数而不需要特定的代码。
  • 发送的二进制数据必须首先编码为诸如base64编码的格式。
  • 有几个与之相关的协议和技术:WSDL,XSD,SOAP,WS-Addressing
  • 具象状态传输(REST):

  • REST不需要通过HTTP,但我下面的大部分要点都会有HTTP偏差。
  • REST非常轻便,它说等一下,我们不需要SOAP创建的所有复杂性。
  • 通常使用普通的HTTP方法而不是描述一切的大XML格式。 例如,要获取使用HTTP GET的资源,可以在使用HTTP PUT的服务器上放置资源。 要删除服务器上的资源,请使用HTTP DELETE。
  • REST非常简单,因为它使用HTTP GET,POST和PUT方法来更新服务器上的资源。
  • REST通常最适用于面向资源的体系结构(ROA)。 在这种思维模式下,一切都是一种资源,您将在这些资源上运作。
  • 只要你的编程语言有一个HTTP库,并且大部分都可以,你可以很容易地使用REST HTTP协议。
  • 二进制数据或二进制资源可以根据他们的请求简单地交付。
  • 谷歌上有关于REST vs SOAP的无尽争论。

    我最喜欢的是这一款。 2013年11月27日更新:Paul Prescod的网站似乎已脱机,本文不再提供,尽管可以在Wayback Machine上找到,但可以在CiteSeerX上以PDF形式找到。


    休息

    我明白REST的主要思想非常简单。 我们多年来一直使用网络浏览器,并且我们已经看到了多么简单,灵活,性能卓越的网站。 HTML网站使用超链接和表单作为用户交互的主要手段。 他们的主要目标是让我们客户知道我们目前可以使用的那些链接。 而REST只是说'为什么不通过我们的应用程序使用相同的原则来驱动计算机而不是人类客户?' 将它与WWW基础架构的强大功能相结合,您将获得构建伟大分布式应用程序的杀手级工具。

    另一种可能的解释是数学思考的人。 每个应用程序基本上都是一个状态机,其业务逻辑操作是状态转换。 REST的思想是将每个转换映射到资源的某个请求上,并向客户端提供表示当前状态下可用转换的链接。 因此它通过表示和链接建模状态机。 这就是为什么它被称为REpresentational状态转移。

    令人惊讶的是,所有答案似乎都集中在消息格式或HTTP动词使用上。 实际上,消息格式根本不重要,只要服务开发人员记录它,REST就可以使用任何一种格式。 HTTP动词只会使服务成为CRUD服务,但还不是RESTful。 真正将服务变成REST服务的是将超链接(又名超媒体控件)与数据一起嵌入到服务器响应中,它们的数量必须足以让任何客户端从这些链接中选择下一个动作。

    不幸的是,除了Roy Fielding的论文之外,在Web上找到关于REST的正确信息是相当困难的。 (他是派生REST的人)。 我会推荐'REST in Practice'这本书,因为它提供了一个关于如何从SOAP发展到REST的全面分步教程。

    肥皂

    这是RPC(远程过程调用)体系结构风格的可能形式之一。 实质上,它只是一种允许客户端通过服务边界(网络,进程等)调用服务器方法的技术,就好像它们调用本地方法一样。 当然,它不同于在速度,可靠性等方面调用本地方法,但这个想法很简单。

    相比

    比较任何形式的RPC与REST时,传输协议,消息格式,xsd,wsdl等细节无关紧要。 主要区别在于RPC服务通过在RPC API中设计它自己的应用程序协议来重新发明自行车,并且只有它知道的语义。 因此,所有客户端在使用该服务之前都必须理解此协议,并且由于所有请求的专有语义,因此不能构建像缓存这样的通用基础架构。 此外,RPC API并不建议在当前状态下允许执行什么操作,这必须从其他文档中派生。 另一方面,REST意味着使用统一的接口来允许不同的客户端对API语义有一些理解,并且超媒体控件(链接)可以突出显示每种状态下的可用选项。 因此,它允许缓存响应来扩展服务,并且无需额外的文档即可轻松发现正确的API使用情况。

    从某种意义上说,SOAP(与其他任何RPC一样)是试图通过服务边界来处理连接媒体的一种尝试,因为它只能够传输消息。 REST是一个决定,承认Web是一个庞大的分布式信息系统,接受现实世界并学会掌握它而不是与之对抗。

    当您控制服务器和客户端,并且交互不太复杂时,SOAP似乎对内部网络API非常有用。 开发人员使用它更自然。 然而,对于许多独立团体使用的公共API来说,这个API非常复杂且庞大,因此REST应该更好。 但最后的比较非常模糊。

    更新

    我的经验意外地表明REST开发比SOAP更困难。 至少对于.NET来说。 尽管ASP.NET Web API等框架很棒,但没有任何工具可以自动生成客户端代理。 没有什么像'添加Web服务参考'或'添加WCF服务参考'。 必须手动编写所有的序列化和服务查询代码。 而男人,这是很多样板代码。 我认为REST开发需要类似于每个开发平台的WSDL和工具实现。 事实上,似乎有一个很好的理由:WADL或WSDL 2.0,但这两个标准似乎都得不到很好的支持。

    更新(2016年1月)

    结果发现现在有各种各样的REST API定义工具。 我个人的偏好目前是RAML。

    Web服务如何工作

    那么这是一个太宽泛的问题,因为它取决于特定Web服务中使用的体系结构和技术。 但通常,Web服务只是Web中的一些应用程序,可以接受来自客户端的请求并返回响应。 它暴露给Web,因此它是一个Web服务,并且通常可全天候使用,这就是为什么它是服务。 当然,它为客户解决了一些问题(否则为什么有人会使用Web服务)。

    链接地址: http://www.djcxy.com/p/40997.html

    上一篇: Representational state transfer (REST) and Simple Object Access Protocol (SOAP)

    下一篇: sf using facet wrap and scales free