表示性状态转移(REST)和简单对象访问协议(SOAP)

做~自己de王妃 提交于 2019-12-22 18:52:38

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

有人可以用简单的英语解释什么是REST以及什么是SOAP ? Web Services如何工作?


#1楼

SOAP和REST都指的是不同系统相互通信的方式。

REST使用的技术类似于浏览器与Web服务器的通信:使用GET请求网页,在表单字段中进行POST等。

SOAP提供类似的东西,但通过来回发送XML块来完成所有工作。 SOAP的另一个关键组件是WSDL,它是一个描述支持哪些函数和数据元素的XML文档。 WSDL可用于以编程方式“发现”支持的函数以及生成编程代码存根。


#2楼

这是您将找到的最简单的解释。

这篇文章以丈夫为妻的叙述,丈夫以纯粹的外行术语向妻子解释REST。 必读!

我如何解释 - 休息给我的妻子 (原始链接)
怎么解释 - 休息给我的妻子 (2013-07-19工作链接)


#3楼

SOAP的问题在于它与HTTP堆栈背后的理想冲突。 任何中间件都应该能够在不了解请求或响应的内容的情况下处理HTTP请求,但是例如常规HTTP缓存服务器将无法使用SOAP请求而不知道SOAP内容的哪些部分对缓存很重要。 SOAP只是使用HTTP作为自己的通信协议的包装器,就像代理一样。


#4楼

休息

我理解REST的主要思想非常简单。 我们已经使用了多年的Web浏览器,我们已经看到了网站的简易性,灵活性,性能等。 HTML站点使用超链接和表单作为用户交互的主要方式。 他们的主要目标是让我们的客户只知道我们可以在当前状态下使用的那些链接。 REST简单地说'为什么不通过我们的应用程序使用相同的原则来驱动计算机而不是人类客户?' 将此与WWW基础架构的强大功能相结合,您将获得一个用于构建优秀分布式应用程序的杀手级工具。

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

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

遗憾的是,除了Roy Fielding的论文外,在网上找到关于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,复杂而且大,REST应该更合适。 但最后的比较非常模糊。

更新

我的经验意外地表明REST开发比SOAP更难。 至少对于.NET。 虽然有很好的框架,比如ASP.NET Web API,但是没有可以自动生成客户端代理的工具。 没有什么比“添加Web服务引用”或“添加WCF服务引用”更像。 必须手动编写所有序列化和服务查询代码。 而且,那是很多样板代码。 我认为REST开发需要类似于WSDL和每个开发平台的工具实现。 事实上,似乎有一个好的理由: WADLWSDL 2.0 ,但这些标准似乎都没有得到很好的支持。

更新(2016年1月)

事实证明,现在有各种各样的 REST API定义工具 。 我个人的偏好目前是RAML

Web服务如何工作

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


#5楼

那么我将从第二个问题开始: 什么是Web服务? ,原因很明显。

WebServices本质上是一些逻辑(您可能模糊地称之为一种方法),它暴露某些功能或数据。 客户端实现(从技术上讲, 消费就是这个词)只需要知道方法将要接受的参数是什么以及它将返回的数据类型(如果有的话)。

以下链接以非常清晰的方式说明了所有关于RESTSOAP的内容。

REST与SOAP

如果您还想知道何时选择(REST或SOAP),则更有理由通过它!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!