Rest 使用WADL的原因是什么?

Rest 使用WADL的原因是什么?,rest,wadl,Rest,Wadl,为了描述RESTful,我们可以说每个资源都有自己的URI。使用HTTPGET、POST、PUT和DELETE,我们可以对这些资源进行操作。所有资源都具有代表性。任何想使用我们资源的人都可以通过浏览器或REST客户端来使用我们的资源 这就是RESTful架构的主要思想。这种架构允许在internet上提供服务。那么为什么这个架构需要WADL呢?WADL提供了什么标准HTTP没有的功能?为什么WADL需要存在?WADL吸引了来自SOAP世界的人们,在SOAP世界中,通常使用代码生成器基于WSDL创

为了描述RESTful,我们可以说每个资源都有自己的URI。使用HTTPGET、POST、PUT和DELETE,我们可以对这些资源进行操作。所有资源都具有代表性。任何想使用我们资源的人都可以通过浏览器或REST客户端来使用我们的资源


这就是RESTful架构的主要思想。这种架构允许在internet上提供服务。那么为什么这个架构需要WADL呢?WADL提供了什么标准HTTP没有的功能?为什么WADL需要存在?

WADL吸引了来自SOAP世界的人们,在SOAP世界中,通常使用代码生成器基于WSDL创建客户端代码。我不认为该机制在REST中有用,因为它创建了耦合到服务器端点的客户机代码

我相信,如果您正确定义了媒体类型并在这些媒体类型中使用超媒体,那么就没有必要使用WADL。可用端点的描述包含在介质类型定义中。如果您现在对自己说,但是application/xml不包含任何关于可用超链接的信息,那么我说宾果。这就是为什么我认为application/xml和application/json不适合REST的媒体类型。我不是说不要使用XML或JSON,只是不要使用通用媒体类型名称


WADL的另一个诉求是记录REST服务。不幸的是,当WADL试图记录服务器端端点时,它会导致开发人员走上错误的道路。记录REST服务应该主要关注媒体类型。客户机开发人员应该能够编写REST客户机,而不知道根url以外的任何url。

使用WADL意味着您可能会非常友好地定义来回传递的数据/文档。假设您正在传递一些XML片段,它们实际上可能是已定义模式的一部分

是否使用DL生成代码对我来说不是很重要。在我的主观观点中,重要的是在业务合作伙伴之间的接口上达成正式协议很重要。即使传递的内容很明显,它也有助于确定如果有人更改了以前的接口,谁必须在以后修复什么


数据格式和动词名称一样是接口的一部分。

WADL允许您生成代码、测试和文档。实际上,很少有非常有用的工具使用WADL,您可以看到一些示例。“纯”REST的问题,如菲尔丁的论文所述,是编写支持超媒体的客户机(例如,想象一下编写基于JavaSwing的客户机应用程序)。有了WADL,这个任务是完全自动化的,在我看来这是一个巨大的优势。测试也变得更容易了。

在我解释之前,让我说,大多数纯粹的REST极端分子会嘲笑它到天涯海角。我不同意他们的观点,因为我宁愿做点什么,但你要知道

WADL是对web服务API的描述,有点像WSDL用于SOAP类型的web服务,其设计更符合RESTful接口(WSDL在这方面做得不好)


在我的经验中,它的主要用途是允许您生成可以调用该服务的客户端代码(如果它是一个非常大的API,则非常方便,可以节省大量的工作时间)。它还用于记录REST类接口。

WADL的目的是定义一个合同。合同规定了一方如何呼叫另一方

当您从头开始创建web应用程序时,您不需要合同和WADL

当您将您的系统与其他系统集成,并且可以与他们的开发团队进行清晰的沟通时,您不需要合同和WADL(因为您可以打电话说明情况)

但是,当您将一个复杂的企业系统与几个不同公司(或联邦机构)维护的其他几个复杂的企业系统集成时,请相信我您希望有一个尽可能严格定义的通信合同那么您需要WADL或Open规范。非常需要它

缺乏企业背景的人倾向于将整个IT视为独立开发的独立web应用程序的集合。但企业现实有时是艰难的。有时你甚至不能给开发你必须集成的应用程序的人打电话或写信。有时,您与不再维护的遗留应用程序通信——它只是运行,您需要弄清楚如何正确地与它通信在这种情况下,你需要一份合同,因为这样可以省去你的麻烦


实际上,客户机生成是合同定义的次要特征。它只是一个玩具。契约强制坏的沟通者清楚地沟通整合规则。这是使用WADL或Open Specification或其他任何东西的主要原因。

当您想要公开REST服务时,最好的方法是生成WADL并与使用者共享(类似于基于SOAP的web服务中的WSDL)。WADL用于描述所有就地服务。

不需要使用WADL。但是,如果您正在处理复杂的现有应用程序,并且希望通过替换EJB/SOAP服务调用来实现REST服务调用,那么使用WADL是非常安全和良好的实践。通过使用WADL生成客户端java存根,您将与服务同步


在wadl2java maven插件的帮助下,您可以使用WADL文件生成客户端java存根。

我想是这样,但WADL可以在其他文件中使用。wadl似乎支持客户端使用服务器的功能。客户端只需要有参数和函数名。您刚才向我描述的内容听起来像RPC,而不是REST。使用REST需要定义要传回的数据/文档,并定义