具象状态传输(REST)和简单对象访问协议(SOAP)
有人可以解释什么是REST,什么是纯英文的SOAP? 以及Web服务如何工作?
关于SOAP和REST的简单解释
SOAP - “简单对象访问协议”
SOAP是通过Internet传输消息或少量信息的一种方法。 SOAP消息采用XML格式,通常使用HTTP(超文本传输协议)发送。
休息 - 具有代表性的国家转移
休息是在客户端和服务器之间发送和接收数据的简单方法,并且没有定义很多标准。 您可以以JSON,XML甚至纯文本格式发送和接收数据。 与SOAP相比,它的权重较轻。
这两种方法都被许多大型玩家所使用。 这是一个偏好问题。 我的首选是REST,因为它更易于使用和理解。
简单对象访问协议(SOAP):
具象状态传输(REST):
谷歌上有关于REST vs SOAP的无尽争论。
我最喜欢的是这一款。 2013年11月27日更新:Paul Prescod的网站似乎已脱机,本文不再提供,尽管可以在Wayback Machine上找到,但可以在CiteSeerX上以PDF形式找到。
休息
我明白REST的主要思想非常简单。 我们多年来一直使用网络浏览器,并且我们已经看到了多么简单,灵活,性能卓越的网站。 HTML网站使用超链接和表单作为用户交互的主要手段。 他们的主要目标是让我们客户知道我们目前可以使用的那些链接。 而REST只是说'为什么不通过我们的应用程序使用相同的原则来驱动计算机而不是人类客户?' 将它与WWW基础架构的强大功能相结合,您将获得构建伟大分布式应用程序的杀手级工具。
另一种可能的解释是数学思考的人。 每个应用程序基本上都是一个状态机,其业务逻辑操作是状态转换。 REST的思想是将每个转换映射到资源的某个请求上,并向客户端提供表示当前状态下可用转换的链接。 因此它通过表示和链接建模状态机。 这就是为什么它被称为REpresentational State Transfer。
令人惊讶的是,所有答案似乎都集中在消息格式或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/1929.html上一篇: Representational state transfer (REST) and Simple Object Access Protocol (SOAP)