如果我需要一个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如何更难使用。
我错过了什么吗?
答案 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文档。