增加:
++在接近REST时经常犯的错误是将其视为“带URL的Web服务” - 将REST视为另一种远程过程调用(RPC)机制,如SOAP,但是通过普通的HTTP URL调用而没有SOAP的大量XML命名空间。
++相反,REST与RPC几乎没有关系。虽然RPC是面向服务的,并且专注于动作和动词,但REST是面向资源的,强调构成应用程序的事物和名词。
肥皂 ( 的 简单对象访问协议 强> ) 和休息 ( 的 代表国家转移 强> )两者都很美。所以我不是在比较它们。相反,当我更喜欢使用REST和SOAP时,我试图描绘图片。
的 什么是有效载荷? 强>
当通过因特网发送数据时,发送的每个单元包括头信息和发送的实际数据。标头标识数据包的源和目标, 的 而实际数据则称为有效载荷 强> 。通常,有效载荷是代表应用程序携带的数据和目标系统接收的数据。
现在,例如,我必须发送一个 的 电报 强> 我们都知道电报的费用取决于一些字眼。
那么请告诉我下面提到的这两条消息,哪一条发送更便宜?
<name>Arin</name>
要么
"name": "Arin"
我知道你的答案将是第二个,尽管两个代表同一个消息,第二个代价相对于成本更便宜。
所以我想说, 的 以JSON格式通过网络发送数据比以有关负载的XML格式发送数据要便宜 强> 。
的 以下是REST over SOAP的第一个好处或优点 强> 。 SOAP仅支持XML,但REST支持不同的格式,如文本,JSON,XML等。我们已经知道,如果我们使用Json,那么我们肯定会在有效载荷方面做得更好。
现在,SOAP支持唯一的XML, 的 但它也有其优点。 强>
的 真!怎么样? 强>
SOAP以三种方式依赖于XML 信封 - 定义消息中的内容以及如何处理消息。
一组数据类型的编码规则,最后是过程调用和响应的布局。
此信封通过传输(HTTP / HTTPS)发送,并执行RPC(远程过程调用),并返回包含XML格式文档中信息的信封。
重点是 的 SOAP的优点之一 强> 就是使用了 的 “通用”运输 强> 但 的 REST使用HTTP / HTTPS 强> 。 SOAP几乎可以使用任何传输来发送请求,但REST不能。所以在这里我们获得了使用SOAP的优势。
正如我在上面提到的那样 的 “REST使用HTTP / HTTPS” 强> ,所以对这些话更深入一点。
当我们讨论基于HTTP的REST时,所有应用HTTP的安全措施都是继承的,这就是所谓的 的 运输级安全 强> 它只保护邮件 的 它在电线内部 强> 但是一旦你在另一边交付它,你就不知道在到达处理数据的真实点之前需要经过多少个阶段。当然,所有这些阶段都可以使用与HTTP不同的东西。 的 所以休息并不完全安全,对吧? 强>
但是SOAP 的 支持SSL 强> 就像REST一样 的 它还支持WS-Security 强> 这增加了一些企业安全功能。 WS-Security提供保护 的 为消费创造消息 强> 。因此,对于传输级安全性,我们发现可以使用WS-Security阻止任何漏洞。
除此之外,作为 的 REST受其HTTP协议的限制 强> 因此,它的事务支持既不符合ACID,也不能跨分布式跨国资源提供两阶段提交。
但是SOAP对这两者都有全面的支持 的 基于ACID的事务管理 强> 用于长期交易的短期交易和基于补偿的交易管理。它也支持 的 跨分布式资源的两阶段提交 强> 。
我没有得出任何结论,但我会更喜欢基于SOAP的Web服务,而安全,交易,等主要问题。
这是他们所说的“Java EE 6教程” 当满足以下条件时,RESTful设计可能是合适的 。看一看。
希望你喜欢阅读我的答案。
首先:正式,正确的问题是 web services + WSDL + SOAP VS REST 。 因为,虽然 网络服务 ,在使用HTTP协议进行传输时,在松散意义上使用 数据 而不是网页, 正式 这是一个非常具体的形式。根据定义,REST不是“Web服务”。 然而,在实践中,每个人都忽略了这一点,所以我们也忽略它
首先:正式,正确的问题是 web services + WSDL + SOAP VS REST 。
web services + WSDL + SOAP
REST
因为,虽然 网络服务 ,在使用HTTP协议进行传输时,在松散意义上使用 数据 而不是网页, 正式 这是一个非常具体的形式。根据定义,REST不是“Web服务”。
然而,在实践中,每个人都忽略了这一点,所以我们也忽略它
已有技术答案,所以我会尝试提供一些直觉。
假设你想在远程计算机中调用一个函数,用其他一些编程语言实现(通常称之为 远程过程调用/ RPC )。假设可以在编写它的人提供的特定URL处找到该功能。你必须(以某种方式)向它发送消息,并得到一些回应。因此,有两个主要问题需要考虑。
对于第一个问题,官方定义是 WSDL 。这是一个XML文件,它以详细和严格的格式描述了什么是参数,它们的类型,名称,默认值,要调用的函数的名称等。 一个WSDL示例 这里显示该文件是人类可读的(但不容易)。
对于第二个问题,有各种答案。但是,实际使用的唯一一个是 肥皂 。它的主要思想是:将之前的XML(实际消息)包装成另一个XML(包含编码信息和其他有用的东西),并通过HTTP发送它。 HTTP的POST方法用于发送消息,因为 总有一个身体 。
这整个方法的主要思想是你 将URL映射到函数 ,也就是说 的 一种行为 强> 。因此,如果某个服务器中有客户列表,并且您要查看/更新/删除一个客户,则必须具有3个URL:
myapp/read-customer
myapp/update-customer
myapp/delete-customer
REST方法以不同的方式看待事物。 URL不应代表操作,但是 的 一个东西 强> (称为 资源 在REST术语中)。由于HTTP协议(我们已经在使用)支持动词, 使用这些动词来指定哪些动作 对事物进行表演。
因此,使用REST方法,可以在URL上找到客户编号12 myapp/customers/12 。要查看客户数据,请使用GET请求点击URL。要删除它, 的 相同 强> URL,带有DELETE动词。要更新它, 的 再次,同样的 强> 带有POST动词的URL,以及请求正文中的新内容。
myapp/customers/12
有关服务必须满足的要求的更多详细信息才能被视为真正的RESTful,请参阅 理查森成熟度模型 。本文给出了一些示例,更重要的是,解释了为什么(所谓的)SOAP服务是一个0级REST服务(尽管,0级意味着对该模型的符合性低,它不具有攻击性,并且它仍然有用在许多情况下)。
恕我直言,你无法比较SOAP和REST,它们是两个不同的东西。
的 肥皂 强> 是一个协议和 的 休息 强> 是一种软件架构模式。互联网上有很多误解 的 SOAP与REST 强> 。
的 肥皂 强> 定义基于XML的消息格式,启用Web服务的应用程序通过Internet相互通信。为了做到这一点,应用程序需要事先了解消息契约,数据类型等。
的 休息 强> 表示来自URL的服务器的状态(作为资源)。它是无状态的,除了对超媒体的理解之外,客户端不应该具有与服务器交互的先验知识。
很多这些答案完全忘记提及完全基本的REST超媒体控件(HATEOAS)。其他一些人接触了它,但并没有真正解释它。
本文 应该解释这些概念之间的区别,而不是涉及特定SOAP功能的杂草。
在众多答案中已经涵盖的许多其他内容中,我要强调SOAP能够定义一个合同,即WSDL,它定义了支持的操作,复杂类型等。 SOAP面向操作,但REST面向资源。 就个人而言,我会为内部企业应用程序之间的复杂接口选择SOAP,而为外部世界的公共,简单,无状态接口选择REST。
REST VS SOAP 是 的 不 强> 正确的问题。
SOAP
REST 不像 SOAP 是 的 不 强> 协议。
REST 是一个 建筑风格 和a 设计 用于基于网络的软件架构。
REST 概念被称为资源。资源的表示必须是无状态的。它通过某种媒体类型表示。媒体类型的一些示例包括 XML , JSON ,和 RDF 。资源由组件操纵。组件通过标准统一接口请求和操作资源。在HTTP的情况下,该接口由标准HTTP操作组成,例如 GET , PUT , POST , DELETE 。
XML
JSON
RDF
GET
PUT
POST
DELETE
@ Abdulaziz的问题确实说明了这一事实 REST 和 HTTP 经常串联使用。这主要是由于HTTP的简单性以及它与RESTful原则的非常自然的映射。
HTTP
的 客户端 - 服务器通信 强>
客户端 - 服务器架构具有非常明显的关注点分离。所有以RESTful样式构建的应用程序原则上也必须是客户端 - 服务器。
的 无状态 强>
每个客户端对服务器的请求都要求完全表示其状态。服务器必须能够完全理解客户端请求,而无需使用任何服务器上下文或服务器会话状态。因此,所有州必须保留在客户端上。
的 可缓存 强>
可以使用高速缓存约束,从而使响应数据能够被标记为可高速缓存或不可高速缓存。标记为可缓存的任何数据都可以重用作对同一后续请求的响应。
的 统一界面 强>
所有组件必须通过单一的统一接口进行交互。由于所有组件交互都通过此接口进行,因此与不同服务的交互非常简单。界面是一样的!这也意味着可以单独进行实现更改。这种变化不会影响基本的组件交互,因为统一的接口总是不变的。一个缺点是您遇到了界面。如果可以通过更改界面为特定服务提供优化,那么由于REST禁止此操作,您将失去运气。然而,从好的方面来看,REST针对Web进行了优化,因此REST在HTTP上非常受欢迎!
上述概念表示REST的定义特征,并将REST架构与Web服务等其他架构区分开来。值得注意的是,REST服务是一种Web服务,但Web服务不一定是REST服务。
看到这个博客 岗位 上 的 REST设计原则 强> 了解更多详情 的 休息 强> 以及上述子弹。
的 编辑: 强> 根据评论更新内容