QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

JSR 311 最终草案:RESTful Web 服务 Java API

  • 2008-09-26
  • 本文字数:1718 字

    阅读完需:约 6 分钟

去年 2 月, Sun 宣布了 JSR 311 :RESTful Web 服务的 Java API。9 月 23 日,规范的 1.0 草案通过了JCP 执行委员会的赞成投票,这基本意味着它现在已经定稿。

JAX-RS 是 Java 中用于实现以 HTTP 为基础的 RESTful Web 服务的 基于注解的 API。本质上,注解类和方法的信息能让运行时(Runtime)将它们暴露为资源,这种方法和通过 Servlet 编程模型来暴露类与方法的做 法有很大区别。实现 JAX-RS 的运行时(Runtime)周旋于 HTTP 协议和 Java 类之间,考虑 URI、被请求和被接受的内容类型和 HTTP 方法。 除了 Sun 提供的参考实现 Jersey 之外,可用的其他实现(尚在不同的完成阶段)包括:流行的 Restlet 框架的一部分, JBoss RESTeasy 项目 Apache CXF Web 服务栈的一部分。

InfoQ 采访了规范带头人,Sun 的 Marc Hadley Paul Sandoz ,请他们畅谈了他们对 JAX-RS 和整个过程的想法。

被问到他们对这个结果的心情时,Mark 表示他对 API 最终完成非常满意。他还表示,非常幸运的是,在专家组从事 API 设计时就有如此多的实现被构 建出来,并且这有助于抚平 API 中的任何不足。Paul 补充说,不少开发者自愿在 API 的各个版本上工作,采用测试驱动的方式去实现,并提供反馈。

在问及最具挑战性的方面时,Marc 指出,一开始很难在 API 的风格和范围上达成统一:

为了启动这个 JSR,我们以一个涉及面很广的提案开了个头。但是,回想起来,我认为我们可能从一个更具体的方面开始构建更好。
在过去的几个月内,我们已经看到了大量对这个 JSR 的关注,主要挑战是既保证进度又能适应所有新请求。

Paul 大胆地对 JSR 中“J”的某些方面表示了质疑:

可能这显得有点儿异端,但是有时我发现当前的 Java 语法本身有点挑战性。但是,通过 Java 注解、范型和构造器 (Builder)模式,我认为我们把事情降到了一个非常简洁的水平。而且,方便地使用 Scala 和 Groovy 来书写这种 JAX-RS 应用也是有可能 的,这两种语言都支持与 Java 字节码兼容的注解。

在启动这个 JSR 的时候, REST 社区对它能否符合 REST 的关键原则表示怀疑。Mark 认为这一目标已经达到:

我认为 API 是鼓励资源中立的观点的,它让开发者自己决定他们资源的标识符和他们支持的方法。对内容协商的说明性支持非常好,缺 省的资源生命周期鼓励无状态的方式。如果我必须指出一个弱点的话,那就是它对“超媒体即状态引擎(hypermedia as the engine of state)”支持有限。虽然我们能很好地支持从请求 URI 中抽取信息和构造资源 URI,在表述(representations)中正确使用超媒体这一任务较多的还是留给了开发者自己去完成。

Paul 表示同意:

是的,这可能是最困难的地方了。JAX-RS 提供了大量构造 URI 的方法,但是建模 API 中还没有类似 JAXB 这样的 URI 绑定工具。我认为在这一方面,我们有一些办法可以探索,如 Henry Story 的 RDF 序列化

问及 JSR 311 上的工作是否改变了他对 Web 和 Web 服务的观点时,Mark 表示这印证了他的一个观点,即一个人“无需依赖更复杂的东西就可以用 HTTP 完成一件非常伟大的事”。Paul 指出,REST 发明者 Roy Fielding 的将稀疏位数组(sparse bit array)用于通知便是 REST 可在将来带来惊喜的一个例子。

我们还向 Mark 询问了他期望 JSR 311 如何对即将到来的 Servlet 规范修订产生影响:

JAX-RS 应用可以被 Servlet 容器托管,因此两者默契合作非常重要。JAX-RS 是新的 Servlet 可插性 (pluggability)框架的一个潜在消费者,因此我们正在着手就此提出我们的要求。一个难处理的地方是,JAX-RS 提供了较 Servlet 更灵 活的 URI 到资源的映射方式,这对联合使用说明性的 Servlet 安全和 JAX-RS 来说是个挑战,因此我们也在从事这方面的工作。

最后,Mark 证实 Jersey 不“只是”一个参考实现,而且完全可作为产品使用,并且已经有实际的部署了。他还指出,Jersey 将是 Glassfish JSR 311 实现,而这正是 Jersey 需要达到产品质量的原因。Paul 强调了另一原因:

定期发布规范和实现的试验版本(early access)一个好处就是,这让 APT 和实现都能及早和频繁地接受测试的考验:-)

你可以联机阅读这个规范 Jersey 参考实现可从 java.net 获得,并在 Java 5 或更高版本上运行。

查看英文原来: JSR 311 Final: Java API for RESTful Web Services

2008-09-26 21:573126
用户头像

发布了 255 篇内容, 共 60.4 次阅读, 收获喜欢 10 次。

关注

评论

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

SpringBoot+Redis基本操作,实现排行榜功能(1),springmvc教程下载

Java 程序员 后端

Spring Cloud 分布式事务详解及LCN解决方案,mybatis底层原理

Java 程序员 后端

Spring MVC框架:第十二章:运行原理,腾讯Java面试题

Java 程序员 后端

Spring Retry不为人知的技巧,你知道几个?,java程序设计精编教程第三版答案耿祥义

Java 程序员 后端

spring-cloud-kubernetes的服务发现和轮询实战(含熔断)

Java 程序员 后端

Springboot 使用Quartz定时器执行多个定时任务 配置篇

Java 程序员 后端

【LeetCode】提莫攻击Java题解

Albert

算法 LeetCode 11月日更

Springboot 整合Shiro 轻量级权限框架,从数据库设计开始带你快速上手shiro

Java 程序员 后端

springboot+Redis+Shiro,java编程技术高级八大类

Java 程序员 后端

SpringBoot+Redis基本操作,实现排行榜功能,javasql优化面试题

Java 程序员 后端

SpringBoot2----Web模块的基本注解,美的java面试题

Java 程序员 后端

Windows/Mac 安装、使用Python环境+jupyter notebook

老表

python入门 11月日更 Python自动化 运营学Python

Spring cloud stream【入门介绍】,java开发实例大全云盘

Java 程序员 后端

Spring Cloud入门-Consul服务注册发现与配置中心(Hoxton版本)

Java 程序员 后端

springboot+mybatis+druid整合笔记,java程序设计案例教程课后答案

Java 程序员 后端

Spring Cloud:第四章:Hystrix断路器,mybatis面试常问问题

Java 程序员 后端

Spring-boot使用logback实现日志配置,java自学视频网站

Java 程序员 后端

SpringBoot使用Aop自定义注解展示日志信息,mysqlsql性能调优的方法

Java 程序员 后端

SpringBoot + Vue 开发前后端分离的旅游管理系统,unixlinux编程实践教程

Java 程序员 后端

Spring--JdbcTemplate基本使用,三年老Java经验面经

Java 程序员 后端

Spring02:基本配置与依赖注入,贼好用的Java学习路线集合

Java 程序员 后端

SpringBoot2----拦截器和文件上传功能,源码+原理+手写框架

Java 程序员 后端

springboot中如何使用拦截器,Javaweb资料视频

Java 程序员 后端

springboot入门教程和mysql数据库,java框架面试基础

Java 程序员 后端

Spring Cloud入门-Admin服务监控中心(Hoxton版本),java开发面试视频

Java 程序员 后端

Spring 使用Validation 验证框架的问题详解,springboot原理

Java 程序员 后端

Spring 全家桶,永远滴神,spring框架教程

Java 程序员 后端

SpringBoot 实战:优雅的使用枚举参数(原理篇,这一次带你搞懂Spring代理创建过程

Java 程序员 后端

SpringBoot2----数据访问,实战java虚拟机百度云

Java 程序员 后端

dart系列之:dart语言中的特殊操作符

程序那些事

flutter dart 程序那些事 11月日更

云原生领域再添重磅开源项目:腾讯发布 K8s 多集群管理开源项目 Clusternet

科技热闻

JSR 311最终草案:RESTful Web服务Java API_Java_Stefan Tilkov_InfoQ精选文章