AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

是时候将 WADL 加入到 JAX-RS 中了吗?

  • 2012-10-23
  • 本文字数:1536 字

    阅读完需:约 5 分钟

在今年的 JavaOne 上,有一个名为’ JavaEE.Next(): Java EE 7, 8, and Beyond ’ 的专题,包括 Oracle、IBM、Red Hat 以及 Caucho 所组成的小组讨论了 Java EE 的各个方面,并回答了观众的问题。最初预想的焦点会是 Paas、移动开发以及 NoSQL,但是与会者对 REST 尤其是 WADL 也表现出了极大的兴趣。现在,WADL 并不是新鲜事物,它已经存在并被广泛讨论了至少七年的时间,我们在 2005 年曾经这样报道过:

对于那些想在 HTTP 服务上描述 XML 的人来说,已经讨论过很多可选的方案了,从 SMEX-D (Tim Bray 所提出的)到 NSDL ,以及其他众多的可选方案。但是,大多数提议都是在 2005 年甚至更早的时候创建的,从那以后它们都没有较大的改进。 Marc Hadley( JSR-311 规范的负责人之一,这个规范是 RESTful 服务的一种 Java API)在 2005 年 提出了 WADL ——Web 应用描述语言。

从那以后,很多人构建工具来支持 WADL。Yahoo 的架构师 Mark Nottingham 维护了能够从 WADL 生成文档的一个样式表。

就像围绕 REST 的某些事情一样,在过去,WADL 将社区分裂成相信 WADL 必要和非必要的两派。例如,在 2007 年 Mark Baker 曾经这样说:

[…] 所有服务暴露相同的接口。这就提供了大多数的松耦合,这也是与 RPC 的主要区别。 所以如果你正在编写(或生成)协议 / 接口级别的代码,而这些代码不能延迟绑定到所有地方的 _ 所有 _ 资源上,这样做其实不是 REST(对指出这违反了特定约束的人,应该给予莫大的荣光)。

我们已经挣脱了约束!RPC 已死!你不能再为所欲为了!

而喜欢它的人通常将其与 WSDL进行比较

回忆一下 WSDL,它能够很简单地 _ 生成 _ 到 web 服务的交互代码。这一点很棒,可以节省大量的工作。在 RESTful web 服务中,我们同样可以这么做吗?是的,可以的。最终,我的结论就是,你可以借助 WADL 做到这一点。WADL 代表了 Web 应用描述语言,它能够为任意的 web 服务(包括 SOAP web 服务,这可能让你感觉意外)描述基于 HTTP 的 API。但是你还可以用 WADL 描述 flickr API、twitter API 以及 yahoo API。猜一下它能做什么… 它能够生成客户端代理代码来与这些 API 交互。是的,它与 WSDL 很类似,但是更通用。它能够统一支持 REST 和其他任意(我猜)类型基于 XML 的 web 服务。

但正如一位评论者所言,它可能是双刃剑:

在这篇文章中犯了几个根本性的错误。你说"我在这里所叙述的是,结果的格式和发送给 REST web 服务的数据都是精确定义的 XML。那么,当我要求媒体类型的时候会怎样?他们也是精确定义的数据格式,它们与怎样处理数据以及如何基于表述获取新的资源相关。 读一读 Roy Fielding 的作品吧 ; )

顺便说一句,WADL 可能并不会长久,它实际上一点都不 RESTful(在客户端和服务提供者之间建立了紧耦合)。

在 2005 到 2008 的几年间,类似这样的争论在REST 领域泛滥。最近,争论似乎逐渐平息,出现了更务实的前景。有些组织觉得,尽管WADL 还有一些问题(如它是否RESTful),但对于开发者而言,它应该是一个要支持的方案。而另外一些组织则完全避开了它。例如JAX-RS 的参考实现Jersey 就内置支持了WADL 。而另一些 JAX-RS 实现,如 RESTeasy 就没有这样明确支持

让我们回到JavaOne 这个专题上来,很多观众包括JAX-RS 规范的负责人,都很想知道未来版本的JAX-RS 是否要完全支持WADL。然而讨论小组未置可否,并提及很多成功的RESTful 服务并没有使用WADL,但是很多观众倾向于支持将WADL 加入到JAX-RS 中。鉴于最近几年WADL 的影响力处于低潮期,这会不会是Java 和JAX-RS 的特殊需求,WADL 会不会再次得到关注呢?如果是这样的话,WADL 会不会使得现在开发的RESTful 服务和应用程序比几年前的更好呢?会不会使得今天的开发人员比以前更务实呢?

查看英文原文: Is It Time For WADL in JAX-RS?

2012-10-23 02:192167

评论

发布
暂无评论
发现更多内容

蛟分承影,雁落忘归——袋鼠云一站式全自动化运维管家ChengYing(承影)正式开源

袋鼠云数栈

【LeetCode】火柴拼正方形Java题解

Albert

LeetCode 6月月更

听说你写sql很溜,一条sql查询语句是如何执行的?

西格玛男人Jerry

sql 流程 查询 MySQL 数据库

C/C++ 单元自动化测试解决方案实践

vivo互联网技术

c c++ 自动化测试

墨天轮访谈 | SelectDB 衣国垒:Apache Doris(incubating)1.0版本特性解析与未来规划

墨天轮

数据库 Apaache Doris 国产数据库

【直播回顾】参与ArkUI,共建OpenHarmony繁荣生态

OpenHarmony开发者

Open Harmony

浅拷贝、深拷贝

源字节1号

软件开发 前端开发 后端开发 小程序开发

web前端培训带你学习 Midwayjs 实战

@零度

node.js 前端开发

6 月直播 7 场干货全剧透!今天:飞腾CPU调优原理及方法 | 第 19 期

OpenAnolis小助手

cpu 直播 sig 龙蜥大讲堂 飞腾

隔空手势交互,如何在现实世界上演“得心应手”?

阿里云CloudImagine

计算机视觉 音视频 视频云

做数据时代的加油站,ShardingSphere 为易车数据库架构演进提供新动力

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

java培训 | 零基础学习java开发的学习方法有哪些

@零度

Java 学习方法

焱融看|非结构化数据场景下,数据湖到底有多香?

焱融科技

数据湖 文件存储 非结构化数据 分布式文件存储 分布式文件系统

泰山众筹代币燃烧模式dapp系统开发逻辑分析

开发微hkkf5566

Python 中堪称神仙的6个内置函数

开发微hkkf5566

为什么你的网站不被收录了呢?

源字节1号

ironSource LevelPlay 聚合平台,现已适配应用开发框架工具包 Flutter

极客天地

深度操作系统20.6正式发布!

深度操作系统

开源 深度操作系统 deepin20.6 新版本 深度

TDengine 2.6 正式发布,新增大量计算函数

TDengine

数据库 tdengine 物联网

Serverless Job——传统任务新变革

阿里巴巴云原生

阿里云 Serverless 云原生 Job

Android技术分享| 利用Kotlin协程,多任务并行,测试RTM SDK性能

anyRTC开发者

android kotlin IM 移动开发 实时消息

相约龙蜥,开源一“夏”!2022编程之夏ASoC开始报名了

OpenAnolis小助手

阿里巴巴 开源项目 龙蜥社区 高校学生 技术项目

《数字经济全景白皮书》证券期货用户数字化篇 重磅发布

易观分析

证券 期货

Docker下RabbitMQ延时队列实战两部曲之一:极速体验

程序员欣宸

RabbitMQ 5月月更 RabbtiMQ延时队列

RxJS系列01:响应式编程与异步

代码与野兽

6月月更

git代码管理可视化工具 :Sourcetree(mac环境)

西格玛男人Jerry

macos git 工具 代码管理

自己如何做一个网站

源字节1号

网站开发

面试突击53:常见的 HTTP 状态码有哪些?

王磊

Java 面试

大数据培训如何使用DPM规划用户画像

@零度

大数据 dpm

MYSQL 几个常用命令使用

CRMEB

优酷老片修复算法,超高清重温童年回忆

阿里巴巴文娱技术

算法 计算机视觉 视频 多媒体

是时候将WADL加入到JAX-RS中了吗?_REST_Mark Little_InfoQ精选文章