【发布时间】:2010-11-24 11:57:59
【问题描述】:
如果我需要一个 Web 服务来来回传递一个复杂的对象,我是否有理由更喜欢 SOAP 而不是 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,我会要求客户端发布以下 xml 并使用基本身份验证进行身份验证:
<MyComplexBusinessObject>
<Search>
<First>Joe</First>
<Last>Smith</Last>
</Search>
...
...
</MyComplexBusinessObject>
SOAP 消息稍微复杂一些,但并不复杂。它们仍然都是 XML,但是 SOAP 带有 WSDL,并且大多数编程环境都会为您生成代理类。但是,与我交谈的大多数人都说我应该改用 REST,因为它更易于使用。但我不明白 SOAP 是如何更难使用的。
我错过了什么吗?
【问题讨论】:
-
为什么 XML 才是重点。 JSON 会更整洁(从编程的角度来看)并且更紧凑。
[{'First':'Joe','Last':'Smith'},...] -
你将如何传递一个复杂的对象?当然我可以使用 JSON,但这还不足以证明放弃 SOAP 转而使用 REST 是合理的。该对象可能包含嵌套字段,并且可能无法很好地转换为 URL。
-
实际上,对于这种情况,更好的匹配是使用标准 POST 变量发布到
/search;1=Joe,Smith&2=John,Citizen&...例如。如果您想要的不仅仅是搜索,那么您就来错了地方 - SOAP 可能会在一个 URL 上获取所有内容,但 REST 不是这样的 - 每件事一个 URL(如果您可以这样做/search/joe+smith或类似的东西会更好)。
标签: web-services rest soap