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

Boo*_*oks 11 rest soap web-services

如果我需要一个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>
Run Code Online (Sandbox Code Playgroud)

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

<MyComplexBusinessObject>
  <Search>
    <First>Joe</First>
    <Last>Smith</Last>
  </Search>
  ...
  ...
</MyComplexBusinessObject>
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么吗?

Dar*_*ler 9

您首次要求"来回传递复杂对象"会限制您的体系结构,以消除REST的许多好处.SOAP是为访问远程对象而设计的,而REST则不是.REST支持传递像text/plain这样简单的媒体类型,这比处理对象要简单得多.

如果您还没有看到它,这个问题及其答案涵盖了大多数REST与SOAP问题.

  • 大多数RESTful服务可以被描述为"来回传递复杂对象",即REpresentational State Transfer.而且几乎没有人使用`text/plain`.REST更面向文档,SOAP更像RPC. (2认同)

mar*_*c_s 5

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

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

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

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