使用WADL的原因是什么?


80

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

这是RESTful架构的主要思想。这种体系结构允许Internet上的服务。那么为什么这种架构需要WADL?WADL提供了哪些标准HTTP不提供的东西?为什么WADL需要存在?


来自WikipediaWeb应用程序描述语言(WADL)是基于HTTP的Web服务的机器可读XML描述。
里卡多(Ricardo)

Answers:


153

WADL的目的是定义合同。合同规定了一方可以打电话给另一方的方式。

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

当您将系统与另一个系统集成在一起并且可以与他们的开发团队进行清晰的沟通时,您不需要合同和WADL(因为您可以打个电话来使事情变得清晰)。

但是,当您将一个复杂的企业系统与由几个不同的公司(或联邦机构)维护的其他几个复杂的企业系统集成在一起时,请相信我,您希望尽可能严格地定义一个通信合同。然后,您需要WADL或开放规范。急需它

具有弱企业背景的人们倾向于将整个IT视为独立开发的独立Web应用程序的集合。但是企业现实有时很难。有时,您甚至无法致电或写信给开发必须与之集成的应用程序的人员。有时,您与不再维护的旧应用程序通信-它仅在运行,您需要弄清楚如何与之正确通信。在这种情况下,您需要签订合同,因为它可以节省您的资金

实际上,客户生成是合同定义的次要特征。只是个玩具而已。合同强制不良沟通者清楚地传达集成规则。这是使用WADL或Open Specification或其他任何方式的主要原因。


7
“ --- IT SAVES ASS”是最好的部分。WADL文件中有可用的PHP代码生成器吗?
贾汀·杜特

如果您不需要Webapp中的问题。发送请求以检索值的操作是什么?
杰西

例如,您可以要求其他团队为您提供客户端SDK。
亨里克·康塞克'17

37

使用WADL意味着您可能足够优雅地实际定义了来回传递的数据/文档。假设您要传递一些XML片段,它们实际上可能是已定义模式的一部分。

对我来说,是否使用DL生成代码并不重要。在我的主观意见中,重要的是,就业务合作伙伴之间的接口达成正式协议很重要。即使通过的内容很明显,它也有助于确定如果有人更改了先前的界面,谁必须在以后修复问题。

数据格式与动词名称一样,也是界面的一部分。


10
使用REST要求您定义来回传递的数据/文档。WADL的问题在于,它还会尝试定义不属于API定义一部分的端点。
Darrel Miller

4
Derrel,我不知道我曾经为其编写过一个客户端的单个Web服务,该客户端没有用于它的单个端点。
Brill Pappin

30

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

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

WADL的另一个吸引力是记录REST服务的目的。不幸的是,当WADL尝试记录服务器端端点时,它导致开发人员走错了路。记录REST服务应主要集中在媒体类型上。客户端开发人员应该能够编写REST客户端,而无需知道根URL以外的任何URL。


19
WADL还吸引那些老板说您必须以​​标准格式进行正式定义的人。我并不是说这是最好的方法,可以这么说,有时候“选中组​​织框”很有用。过度杀伤的事实可能会丢给老板。但是,拥有正式的def文件可以使您免于被其他所有酷公司孩子吸引的SOAP破解管道所困扰。
Roboprog

2
@Roboprog记录您的媒体类型而不是终点。在IANA注册中心有很多很好的例子。另外,Sun Cloud API就是一个很好的例子。您必须说服老板,对端点进行记录对于未来是个坏主意。
Darrel Miller

1
对于实际上有更多工作要做的开发人员,整天编写客户端代码也很方便。
Brill Pappin

1
@cboettig Schema只是一组语法规则,它们不添加任何语义。您需要某种其他机制,例如媒体类型或配置文件来添加语义。
Darrel Miller

1
@cboettig人们确实将语义与命名空间的元素和属性相关联,但是尚无标准化过程。媒体类型具有一个官方注册表,该注册表指向定义语义的规范。iana.org/assignments/media-types/application
Darrel Miller

16

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


16

在我解释之前,我要说的是,大多数纯粹的REST极端主义者都会嘲笑它到地极。我不同意他们的意见,因为我宁愿做些事,但请注意。

WADL是对Web服务API的描述,有点像WSDL是针对SOAP类型的Web服务的,其设计目的是与RESTful接口更加协调(WSDL不擅长)。

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


3
当然,这是一个很好的答案。抵制似乎来自那些根本不想要REST的SOAP硬核人们,以及一些不想做任何额外工作的铁杆REST牛仔。拥有正式文档是在“企业”中拥有的一个很好的无花果,即使在启动过程中浪费很小的API也是如此。
Roboprog

1
以我的经验,出现WADL之类的原因主要有以下三个:-许多优秀的开发人员不了解REST。-当您需要时,拥有文档或API可以极大地加快处理速度。-您永远不能假设其他人已经以与您相同的方式实现了REST调用。甚至REST传教士也不同意:)我甚至遇到过环境不允许执行DELETE或PUT调用的情况,因此您会得到一个类似REST的接口,该接口仅使用GET和PUT调用...并且然后文档变得至关重要。
Brill Pappin

我确定您的意思是GET和POST,就像在伪造的PUT和DELETE中使用时髦的POST选项一样。
las


3

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


0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.