Web services RESTWeb服务WSDL?

Web services RESTWeb服务WSDL?,web-services,rest,soap,wsdl,wadl,Web Services,Rest,Soap,Wsdl,Wadl,我正在实现一个web服务,我已经实现了REST和SOAP版本,以查看哪个版本适合我的需要。我决定选择REST是因为它的简单性,我可能会开发一个iPhone应用程序来使用它。我的问题其实很简单,是否可以为我的REST服务创建WSDL或WADL,是否有必要 谢谢当然有可能,但对于回答是否有必要,您没有提供足够的信息 我建议您查看ibm的developerworks站点,该站点提供了一篇关于主题的有趣文章,希望对您有所帮助 严格地说,使用WSDL1.0您不能,但是使用WSDL2您可以,因为开发WSD

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


谢谢

当然有可能,但对于回答是否有必要,您没有提供足够的信息

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


严格地说,使用WSDL1.0您不能,但是使用WSDL2您可以,因为开发WSDL2是为了接受这种需求

“…解决需求的WS-I概要文件中的WSDL 2.0 用于REST样式的Web服务。在SOAP 1.2中添加GET和 WSDL2.0中增加了操作安全性、描述 引用其他Web服务的消息,以及改进的HTTP绑定 现在可以描述REST风格的Web服务了。”


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

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

当然,这并没有捕获更深层次的交互模式,但服务的绝大多数WSDL描述也没有捕获,因此没有任何更改



为了记录在案,我使用ApacheCXF创建RESTful服务(使用JAX-RS),并为它们发布WADL。

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

我认为使用WSDL是一个问题

  • 形式化级别:使用WSDL,您可以更正式地表达Web服务的所有相关细节
  • 稳定性级别:如果您需要长期合同,并避免Web服务暴露环境中发生变化的风险,WSDL有助于保持稳定性
  • 需要标准:如果客户喜欢可以说是“符合标准”的Web服务,请使用标准。唯一的一个是W3C,W3C需要XML、SOAP和WSDL
    • 尝试为REST资源创建一个简单的文档框架。 可通过以下方式使用浏览器:

      它还提供了动态创建RestDoc文档的功能。实现可用于和。

      已为基于的提供了正式建议。以下是一段引用自:

      术语Web服务通常与操作或 使用SOAP和WS*标准的基于操作的服务,例如 WS-Addressing和WS-Security。RESTWeb服务这个术语通常是 指使用HTTP的基于资源的Web服务体系结构 和XML。每种架构Web服务样式都有自己的位置, 但直到最近,WSDL标准还没有同时支持这两个方面 风格。WSDL1.1HTTP绑定不足以描述 与HTTP和XML通信,因此无法正式 使用WSDL描述RESTWeb服务。WSDL 2.0的发布, 它的设计考虑了REST Web服务,作为万维网 联合会(W3C)的建议意味着现在有一种语言 描述REST Web服务。


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

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