40

我正在实现一个 Web 服务,并且我已经实现了 REST 和 SOAP 版本,以查看哪个版本适合我的需求。我决定选择 REST 是因为它的简单性,而且我可能会开发一个 iPhone 应用程序来使用它。我的问题真的很简单,是否可以为我的 REST 服务创建 WSDL 或 WADL,是否有必要?

谢谢

4

7 回答 7

43

有了一个好的 RESTful 服务,就没有必要为它生成 WADL(更不用说不太合适的 WSDL)了,因为它会自我描述。通过“自我描述”,我特别指的是它将提供描述服务发布的所有(相关)资源的文档,并且对任何这些资源使用标准 HTTP OPTIONS 请求将产生有关如何交互的基本信息。使用 WADL 的唯一真正好处是它允许调用者提前发现它需要处理的复杂文档的模式;REST 本身没有提供任何帮助(一些 REST 主义者认为这样做会适得其反,我不确定我是否同意)。

当然,这并没有捕捉到更深层次的交互模式,但是绝大多数服务的 WSDL 描述也没有,所以那里没有变化。


作为记录,我使用 Apache CXF 创建 RESTful 服务(使用 JAX-RS)并为它们发布 WADL。

于 2011-07-26T13:29:04.647 回答
7

W3C对基于 [WSDL 2.0][3]的REST 文档标准提出了正式建议。以下是 IBM 文章的引述:

术语 Web 服务通常与使用 SOAP 和 WS* 标准(例如 WS-Addressing 和 WS-Security)的基于操作或操作的服务相关联。术语 REST Web 服务通常是指使用 HTTP 和 XML 的基于资源的 Web 服务体系结构。这些架构 Web 服务样式中的每一个都有其一席之地,但直到最近,WSDL 标准还没有同等地支持这两种样式。WSDL 1.1 HTTP 绑定不足以描述与 HTTP 和 XML 的通信,因此无法用 WSDL 正式描述 REST Web 服务。作为万维网联盟 (W3C) 推荐的 WSDL 2.0 的发布,它的设计考虑了 REST Web 服务,这意味着现在有一种语言来描述 REST Web 服务。

于 2014-10-28T17:16:16.263 回答
3

当然有可能,但是如果有必要,你没有提供足够的信息来回答。

我建议您查看 ibm 的 developerworks 站点,该站点提供了一篇关于该主题的有趣文章


严格来说, 使用 WSDL 1.0 你不能, 但使用 WSDL2 你可以, 因为是为接受这种需求而开发的,

“... WS-I 配置文件中的 WSDL 2.0 解决了 REST 样式 Web 服务的要求。SOAP 1.2 中添加的 GET 以及 WSDL 2.0 中的一些添加,例如操作安全性、描述引用其他 Web 的消息的能力服务和改进的 HTTP 绑定现在可以描述 REST 风格的 Web 服务。”,Arthur Ryman

于 2011-07-26T13:24:48.187 回答
3

正如@GiuliaDiFederico 所说,“当然有可能”(使用WSDL2),显示了一个关于如何做的很好的源链接。另一方面,@DonalFellows 不鼓励使用 WSDL ......

我认为使用 WSDL 是一个问题

  • FORMALIZATION LEVEL:使用 WSDL,您可以更正式地表达您的 Web 服务的所有相关细节。
  • STABILITY LEVEL:如果您需要长期合同,并避免暴露 Web 服务的环境发生变化的风险,WSDL 有助于保持稳定性。
  • 需要标准:如果客户更喜欢可以说“符合标准”的 Web 服务,请使用标准。唯一的一个是W3C,而W3C 需要XML、SOAP 和WSDL。
于 2012-12-20T10:01:37.947 回答
3

RestDoc尝试为 REST 资源创建一个简单的文档框架。浏览器可通过restdoc-renderer获得。

它还提供Java 注释以支持即时创建 RestDoc 文档。Jersey 1.xJAX-RS 2.0都有实现。

于 2014-01-24T07:02:02.823 回答
1

我认为 WSDL 不适合 REST,WADL 也不是必需的。HTTP 已经公开了 WADL 可以在单独文件中描述的内容。例如,“Allow”标头返回允许的 HTTP 方法,而 Content Negotiation 用于选择正确的格式。

于 2011-07-26T13:25:39.350 回答
1

WADL 不是必需的。但是,如果客户端代码已经存在于应用程序中,并且您想要进行新的 rest 调用,那么使用 wadl 生成客户端 java stub(POJO) 是一种很好的做法。通过这种方式,客户端 POJO 将与服务端 POJO 同步。例如,如果您在现有应用程序中将 EJB/SOAP 服务调用替换为 Rest 服务调用,那么使用 WADL 是非常安全和良好的做法。

您可以使用 wadl2java maven 插件从 WADL 生成客户端 java 存根。

于 2018-09-02T19:12:18.500 回答