WSDL for SOAP 和 WSDL for REST 和基于 JSON 的 REST

Posted

技术标签:

【中文标题】WSDL for SOAP 和 WSDL for REST 和基于 JSON 的 REST【英文标题】:WSDL for SOAP and WSDL for REST and REST based on JSON 【发布时间】:2011-05-09 11:42:55 【问题描述】:

当一家公司想要发布 Web 服务时,它是为 SOAP 发布一个单独的 WSDL,为基于 REST 的 Web 服务发布一个单独的 WSDL,还是将它们合并到同一个 WSDL 中? WSDL 能否仅表示基于 JSON(而非 XML)的 REST Web 服务?

假设 Web 服务客户端是基于 Java 的。

如果 SOAP 和 REST 合并到同一个 WSDL 中,wsimport 是否会为 SOAP 生成单独的类(用于将 XML 绑定到 Java 对象)并为 REST 生成单独的类?

【问题讨论】:

JAX-WS For Json request and response的可能重复 @Vadzim 可能的重复仅与 SOAP 相关,不涉及此问题的任何 REST 方面。 【参考方案1】:

您需要 WSDL 2.0(或 WADL)来描述 REST 服务。目前对 WSDL 2.0 的支持非常有限,并且 wsimport 不支持它。我不是 Java 开发人员,但我认为 wsimport 仅适用于 SOAP 服务(JAX-WS,它也不支持 WSDL 2.0)。

编辑:

检查this extension。它应该允许您使用 JSON 编码公开 JAX-WS 服务。它还应该公开“javascript 代理”以调用 JSON 服务。为了更准确地回答您的问题 - 我认为您无法在没有 WSDL 2.0 或 WADL 的情况下描述 REST 服务。因此,您不能将 SOAP 和 REST 服务合并到大多数堆栈支持的单个 WSDL 1.1。有关描述 JSON 服务检查的进一步参考this question。

【讨论】:

感谢您提供信息,但它不能回答我在问题中提出的大部分问题。【参考方案2】:

WSDL 能否仅代表 REST Web 基于 JSON(不是 XML)的服务

WSDL 2 可以通过使用模式定义 XML 类型来描述 XML。见this introduction on WSDL 2 for REST。

虽然,TBH 我以前从未为 REST 编写过 WSDL,但我只是发布了这些类型的 URL 和架构。

【讨论】:

【参考方案3】:

由于工具还没有完全成熟,我怀疑很多人在单个 WSDL 中使用 SOAP 和 HTTP 绑定。尽管两者都可以在 WSDL 2.0 中表示,同时,由于当今大多数人都依赖工具来管理他们的 WSDL(以及 WS 堆栈的其余部分),他们可能根本不会打扰他们的 WSDL。

此外,大多数 REST 人员正在手动构建他们的客户端,而不是依赖工具和 WSDL,因此这些人目前并没有“缺少”工具和对此的支持。

当这些工具在服务器端和客户端都赶上时,WSDL 2.0 中的 HTTP 服务绑定在实践中可能会得到更多采用。习惯用法是否会将 to 规范合并为单个 WSDL,还有待观察。

如果他们想在相同的端点上托管它们,那么他们很可能会这样做。

【讨论】:

2017年了,这种情况有变化吗?

以上是关于WSDL for SOAP 和 WSDL for REST 和基于 JSON 的 REST的主要内容,如果未能解决你的问题,请参考以下文章

SOAP/Web Service/WSDL关系

SOAP - 加载本地 WSDL 文件

WSDL中SOAP绑定和HTTP绑定之间的区别

在python中调用没有WSDL的soap API

根据接口wsdl怎么生成soap消息请求数据

SOAP/WSDL/XSD 和 REST 方法之间的比较