web-services - 基于 REST 的 Web 服务中的 SOAP 消息

标签 web-services rest soap

免责声明:我真的对 REST 和基于 SOAP 的服务感到困惑。
在阅读了许多关于基于 REST 的 Web 服务的教程(似乎相互矛盾)之后,我想知道我们是否可以/应该使用 SOAP 在基于 REST 的 Web 服务中发送/接收消息?
我尝试了以下链接
1) http://www.ibm.com/developerworks/webservices/library/ws-restful/

2) http://rest.elkstein.org/2008/02/how-simple-is-rest.html

最佳答案

“基于 SOAP 的服务”我假设您的意思是 WS-I Basic Profile网页服务。区别很重要,因为 SOAP 可以与 REST 以及 WS-I BP Web 服务一起使用。让我解释。

SOAP 是一种用于交换数据的基于 XML 的消息传递格式。 Soap 还定义了一种进行远程过程调用的方法。 SOAP 是来自 W3C 的开放标准。 . SOAP 与底层传输层无关。 HTTP 经常用作传输层,但它也可以愉快地运行在 SMTP 和 TCP 以及其他传输上。

REST是一种架构风格(不是标准),因此请注意不要直接比较 REST 和 SOAP,因为您不是在比较苹果和苹果。 REST 采用 HTTP 并以它本来的方式使用它,并以其所有的微妙和丰富性。 REST 架构风格可用于传输任何格式的数据——它不强制要求任何特定的数据格式。因此,对于 REST 风格的 Web 服务,SOAP 是一种非常好的序列化格式。但是很多人使用 JSON、XML、纯文本和许多其他格式与 REST。您也可以愉快地通过 REST 交换二进制数据,例如图像文件。好消息是您可以选择对您的应用程序最有意义的数据格式。

请注意,由于 REST 是一种模式,而不是标准,因此对于真正的 RESTful 意味着什么存在很多争论。有一个概念叫做 Richardson Maturity Model它列出了实现 REST 理想的一系列步骤。通过与 Richardson 的模型进行比较,我们可以确切地看到特定 REST 实现的 RESTful 程度。 WS-I BP Web 服务在这个规模上处于 0 级(即,根本不是 RESTful,只是使用 HTTP 作为哑传输层)。

我想说的是关于选择 REST 与 WS-I Basic Profile Web 服务 - 这取决于您的受众。如果您在企业内开发 B2B 类型的接口(interface),则更常见的是 WSI-BP Web 服务。因为有一个底层标准,并且由于企业供应商(如 IBM、Oracle、SAP、Microsoft)的成熟支持,以及特别是在 .NET 和 Java 中的框架支持水平,WSI-BP 很有意义当您需要快速完成某些事情并且希望客户端能够轻松地在企业环境中连接,并且正在交换的数据是可以很好地序列化为 SOAP 的业务数据时。

另一方面,如果您将 Web 服务暴露给更广泛的 Web 受众,我会说已经存在从 WSI-BP 转向 RESTful 风格的趋势。因为 REST 只假设客户端支持 HTTP,所以它可以与尽可能广泛的受众进行互操作。 REST 还为您提供了 Web 本身的可扩展性,支持缓存资源等,这使其比 WSI-BP Web 服务更好地扩展到大量受众。

关于web-services - 基于 REST 的 Web 服务中的 SOAP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7521236/

相关文章:

java - 为什么我会收到 java.net.SocketException : Connection reset error from web service through SOAP UI and Java client?

java - 如何在 JAX-WS Web 服务中获取经过身份验证的用户信息?

ruby-on-rails - Rails has_one build_association 在保存前删除记录

java - 将 JAXB 元素编码为 SOAP 处理转义字符

java - .NET 客户端构造的 SOAP 具有有效对象,Java 客户端 SOAP 具有空对象

soap - WildFly 8.2.0,使用反向代理的 JBossWS 生成不正确的 httpssoap :address

c# - 如何使用 C# WCF RESTful(即 Web)服务发送 CSV 文件?

java - 从 NOAA web api v2 获取温度和湿度

java - 通过GSON将json字符串转换为对象

javascript - 如何将 WebSocket 连接与 Socket.io 事件和 Koa Rest api 结合使用?