为什么基于SOAP的Web服务不是RESTful?

bry*_*sai 47 rest soap web-services

我理解RESTful是一种架构风格,但究竟是什么让基于SOAP的Web服务不计入RESTful?

我不清楚下面(来自维基百科)的哪些内容不符合SOAP.

  1. 客户端服务器
  2. 无状态
  3. 可缓存
  4. 分层系统
  5. 按需代码(可选)
  6. 统一界面
    • 确定资源
    • 通过这些表示来操纵资源
    • 自我描述性的信息
    • 超媒体作为应用程序状态的引擎

编辑:我刚刚遇到这个,很好地总结了它.

REST不是RPC,RPC说,"定义一些做某事的方法",而REST说,"定义一些资源,他们将拥有这些方法".这是一个微妙但重要的区别,当给定URI时,任何人都知道他们可以通过预定义的方法集与它进行交互并接收标准的HTTP响应.所以给了 http://www.peej.co.uk/我知道我可以发出一个GET并收到一些有意义的回复.然后我可以尝试使用PUT来更改它并接收有意义的HTTP错误代码,因为我没有被授权干涉它.

Chr*_*ter 56

REST和SOAP不是等同的概念.

休息:

  • 取决于一种传输协议(HTTP).
  • 充分利用该协议的特定功能(动词GET,POST,PUT,DELETE,缓存,标头和预定义的错误代码).
  • 对来回传递的消息格式一无所知.但是,由于HTTP谓词和URL已定义要执行的操作,因此消息正文必须仅包含数据.
  • 消息安全性由传输协议(HTTPS)提供,并且仅是点对点的.如果您想要端到端地保护邮件,则必须自己完成.
  • 最初用于对象的简单CRUD操作.

肥皂:

  • 独立于传输协议(可以是HTTP,FTP,TCP,UDP,命名管道,共享内存甚至电子邮件).
  • 仅需要传输协议能够发送和接收文本(例如,在HTTP上,仅使用POST动词).
  • 严格定义来回传递的消息格式.SOAP消息包含数据,要对其执行的操作,标头以及发生故障时的错误详细信息.
  • 消息安全性由WS-*标准提供,并且是端到端的.
  • 最初用于任意RPC调用.

上面列表中的第2和第3项是不兼容的要点.

  • +1.SOAP是*协议*而REST是*架构风格* (4认同)

Tre*_*hns 47

SOAP遵循RPC模式.SOAP API描述了一系列方法及其参数和返回值,您可以从代码中调用这些方法.有一个编组步骤将其转换为它的网络表示.

REST绝不是RPC.REST API描述了一系列资源,以及一组可以对其起作用的动词(通常是HTTP的GET,POST,PUT,DELETE).

直接回答您的问题:SOAP主要违反第6点(它不提供跨API的统一动词集).它也违反了第2点(服务器可以维护每个客户端的状态),结果也是第3点(状态阻止缓存).

  • @Physics-Compute 事实并非如此。SOAP 始终使用 HTTP POST,请求包含在正文中。您不能使用其他 HTTP 动词,这与 REST 背后的理念相反。(不可缓存、非统一接口、不是 HATEOAS 等)您可以在 SOAP API 中“封装”RESTful API,但 SOAP 协议本身不能是 RESTful。 (2认同)
  • @Physics-Compute 根据 Fielding 的说法,使用多种标准化方法是一项要求。虽然您可以在 SOAP 中模拟 REST 风格的接口,但我认为它仍然无法满足“统一接口/HATEOAS”要求。充其量,这只是一种学术练习,与用户的期望背道而驰。REST 的好处之一是它与网络的其他部分共享相同的超媒体界面。无论您做什么,我都无法从浏览器的地址栏发出 SOAP 调用。请参阅:http://whatisrest.com/rest_constraints/uniform_contract_profile (2认同)

Pio*_*rek 5

REST的目标之一是可达性,因为资源需要由uri(查询字符串)来识别.在soap中发布请求,因此对于具有相同uri的不同请求,因此资源不能由您唯一标识