WADL是什么 Web应用程序描述语言详解

WADL是一种面向资源的RESTful Web服务描述语言,以XML定义URI、HTTP方法、参数、响应格式及资源嵌套关系,用于生成客户端代码、测试用例和API文档。

WADL(Web Application Description Language)是一种基于XML的机器可读语言,专为描述RESTful Web服务而设计。它不定义协议或传输细节,而是聚焦于“资源”本身——比如一个API里的/users/orders/{id}这类URI,以及它们支持的HTTP方法(GET/POST/PUT/DELETE)、请求参数、响应格式和嵌套关系。

WADL的核心定位:面向资源的接口说明书

它和WSDL的关系常被类比为“REST之于SOAP”:WSDL面向操作(如getUserById),WADL面向资源(如GET /api/users/{id})。这意味着WADL文档天然反映REST的分层结构——父资源下可有子资源,子资源又可带查询参数或媒体类型变体。

  • 每个元素代表一个URI路径,可嵌套定义子资源
  • 描述该路径支持的HTTP动词、请求头、查询参数、请求体结构及可能的响应状态码
  • 标签明确标注关键参数位置(如URL路径段、query字符串或XML/JSON字段中的某个值),即使已有XSD或JSON Schema
  • 支持通过mediaType属性声明不同响应格式(如application/jsonapplication/xml

WADL的实际用途:生成与测试的桥梁

它不是运行时必需的,但对开发协作和自动化很有价值。只要有一个WADL文件,工具就能自动生成客户端代码、测试用例或API文档,省去手动拼接URL和解析响应的重复劳动。

  • wadl2stub这类工具可直接从.wadl文件生成Java/C#等语言的调用桩代码
  • 测试框架(如REST Assured)能加载WADL,自动验证所有资源是否按约定返回正确状态码和结构
  • 配合XSD或JSON Schema,还能做更细粒度的请求/响应校验,比如确认节点下必含email字段
  • 虽未被W3C标准化,但在JAX-RS生态(如Jersey)中曾是默认生成的描述格式

WADL vs WSDL:关键区别一目了然

两者都用XML描述服务,但设计哲学完全不同。

  • WSDL强调“接口+绑定”,先抽象操作再绑定到SOAP/HTTP;WADL从URI出发,直接描述资源行为
  • WSDL需配合SOAP协议栈,WADL只依赖HTTP语义(状态码、方法、内容协商)
  • WSDL常见于企业级SOAP服务;WADL多见于早期Java REST框架(如Jersey 1.x),如今Swagger/OpenAPI已成主流
  • WADL不强制要求HATEOAS,但结构上天然支持资源链接表达(例如用指向关联资源)

基本上就这些。WADL本身不复杂,但容易忽略它在“资源建模”上的清晰性——不是教你怎么写代码,而是帮你把API想清楚。