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

时间:2009-12-23 04:53:41

标签: web-services soap rest

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

我不清楚下面哪些点(来自Wikipedia)不符合SOAP。

  1. 客户端 - 服务器
  2. 无状态
  3. 可缓存
  4. 分层系统
  5. 按需代码(可选)
  6. 统一界面
    • 资源识别
    • 通过这些陈述操纵资源
    • 自我描述性消息
    • 超媒体作为应用程序状态的引擎
  7. 编辑:我刚刚遇到this,总结得非常好。

      

    REST不是RPC,RPC说,“定义   一些做某事的方法“   而REST说,“定义一些   资源,他们将拥有这些   方法”。   这是一个微妙但重要的区别,   当给出URI时,任何人都知道他们可以   通过预定义与之交互   一套方法和接收标准   HTTP响应作为回报。所以给定   http://www.peej.co.uk/我知道我可以   发出GET并收到   有意义的回报。我可能会   试试PUT就可以改变它   收到有意义的HTTP错误代码   因为我没有被授权干涉   用它。

7 个答案:

答案 0 :(得分:55)

REST和SOAP不是等同的概念。

REST:

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

SOAP:

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

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

答案 1 :(得分:46)

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

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

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

答案 2 :(得分:5)

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

答案 3 :(得分:4)

REST只适用于http协议。

答案 4 :(得分:2)

宁静: REST是使用HTTP协议构建Web服务的架构风格,其中Web服务被视为资源,并且使用一些基本的HTTP方法,如GET,POST,DELETE 确定资源的标准行动。 RESTful Web API(也称为RESTful Web服务)是使用HTTP和REST原则实现的Web API。

肥皂: SOAP,最初定义为简单对象访问协议,是用于以XML形式交换结构化信息的协议规范。

答案 5 :(得分:2)

SOAP协议: SOAP是一种协议,意味着它具有已定义的结构。

  1. POST:SOAP请求始终需要HTTP正文,因此HTTP方法是POST。有关未来POST中的HTTP方法的更多信息(这些在REST中非常相关),但是现在让我们假设在SOAP的情况下它始终是POST
  2. SOAP Action:Empty表示HTTP请求URI中的意图。
  3. Content-Type:SOAP使用XML作为通信语言,因此始终是text / xml
  4. 需要使用XML命名空间(xmlns)
  5. 来指示这是一个SOAP请求。
  6. 是描述请求和响应的根SOAP元素。
  7. RESTful API设计涉及在资源方面打破系统,并通过Web服务基础uris上定义的端点(也称为操作)提供对这些资源的访问。使用标准HTTP方法完成访问,并由auth机制控制。通过请求和响应提供并获得资源的配置,其中HTTP状态代码传达状态。 资源是系统中存在RESTful的实体。例如,在博客网站的情况下,这些可以是博客,帖子和评论。 2. EndPoints或操作提供了一种机制,通过它可以访问这些资源。例如,列出特定博客上所有博客帖子的端点将是/ blogs / {blogId} / posts上的GET。 3.基本URI定义通过端点可用资源的Web uri位置。举一个真实的例子,对于Google博主,base_uri是https://www.googleapis.com/blogger/v3。 4. HTTP方法是REST的简单性所在。在RESTful API设计中,资源操作是通过标准HTTP方法完成的,主要是GET,POST,PUT和DELETE。其他HTTP方法 - 在某些情况下也使用OPTIONS,HEAD,PATCH。

答案 6 :(得分:1)

SOAP与REST Web服务

1)SOAP是一种协议,而REST是一种架构风格。

2)SOAP不能使用REST,因为它是一个协议,而REST可以使用SOAP Web服务,因为它是一个概念,可以使用任何协议,如HTTP,SOAP。

3)SOAP使用服务接口来公开业务逻辑,而REST使用URI来公开业务逻辑。

4)SOAP定义了严格遵循的标准,而REST没有定义太多像SOAP这样的标准。

5)SOAP需要比REST更多的带宽和资源,而REST需要的带宽和资源少于SOAP。

6)SOAP定义了自己的安全性,而RESTful Web服务从底层传输继承了安全措施。

7)SOAP仅允许XML数据格式,而REST允许不同的数据格式,如纯文本,HTML,XML,JSON等。

RESTful Web服务比SOAP Web服务更受欢迎。