为什么更喜欢REST而不是SOAP?

时间:2010-11-24 11:58:00

标签: web-services rest soap

如果我需要一个Web服务来回传递一个复杂的对象,我是否应该选择SOAP over REST?以下是可能的SOAP消息的示例:

<soap:Envelope>
  <soap:Header>
    <Credentials>
      <User>Joe</User>
      <Password>abc123</Password>
    </Credentials>
  </soap:Header>
  <soap:Body>
    <MyComplexBusinessObject>
      <Search>
        <First>Joe</First>
        <Last>Smith</Last>
      </Search>
      ...
      ...
    </MyComplexBusinessObject>
  </soap:Body>
</soap:Envelope>

使用REST,我会要求客户端POST以下xml并使用基本身份验证进行身份验证:

<MyComplexBusinessObject>
  <Search>
    <First>Joe</First>
    <Last>Smith</Last>
  </Search>
  ...
  ...
</MyComplexBusinessObject>

SOAP消息稍微复杂一点,但不是很多。它们仍然是XML,但SOAP带有WSDL,大多数编程环境都会为您生成代理类。但是,我与之交谈的大多数人都说我应该使用REST,因为它更容易使用。但我不知道SOAP如何更难使用。

我错过了什么吗?

4 个答案:

答案 0 :(得分:9)

“来回传递复杂对象”的第一个要求限制了您的体系结构,以消除REST的许多好处。 SOAP是为访问远程对象而设计的,而REST则不是。 REST支持传递像text / plain这样简单的媒体类型,这比处理对象要原始得多。

如果您还没有看到它,this问题及其答案涵盖了大部分REST与SOAP问题。

答案 1 :(得分:5)

REST的一个主要好处是,您需要调用和使用它的只是浏览器和HTTP堆栈 - 几乎每个设备和机器都有。因此,如果易用性和覆盖面是您的主要目标 - 使用REST。

SOAP的一个主要好处是你有一个WSDL服务描述,你几乎可以自动发现服务,并从该服务描述生成一个可用的客户端代理(生成服务调用,必要的数据类型为方法等等。

因此,如果可发现性和严格的正式服务描述对您来说更重要,请使用SOAP(缺点是需要一个成熟的SOAP客户端来调用您的服务 - 您的Web浏览器是不够的。)< / p>

SOAP并不难使用 - 但就可用性而言,它并不是“普遍存在” - 任何浏览器都可以调用REST服务并获得答案 - 但是它需要解析并解释该响应。 SOAP获得了很好的数据结构,但是你需要一个SOAP客户端。

答案 2 :(得分:1)

我将SOAP和REST视为正交API,旨在做不同的事情。

SOAP基本上是一个花哨的RPC,因此如果要将计算请求发送到服务器并获得结果,则使用SOAP。如果它是本地的,那么它将是对对象实例的方法调用。

REST是一种使用统一API创建,检索,更新和删除远程对象的方法,而不是POO意义上的方法。如果它是本地的,那就像使用文件一样。

所以他们实际上回应了不同的需求。你可以把一个人搞砸到另一个人的工作,但是你会破坏这个意义。

答案 3 :(得分:1)

如果您同时开发服务和客户端,使用SOAP就像REST一样简单(实际上更容易)。

如果满足以下条件,您可能更喜欢SOAP over REST:

  • 整个服务API很复杂,而不仅仅是一个对象。

  • 该服务在相对较小的网络中使用,性能不是一项重要要求。

  • 您决定花费最少的时间来开发服务和API文档。