作者:Stefan Tilkov 译者 胡键 来源:InfoQ 2008-09-27
去年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 CXFWeb服务栈的一部分。
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或更高版本上运行。
分享到:
相关推荐
标签:javax、jsr311、api、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...
标签:javax、jsr311、api、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
**JSR 311 API** 是Java Specification Request (JSR) 311的实现,它是Java平台上的一个标准接口,主要用于构建RESTful(Representational State Transfer)Web服务。REST是一种轻量级的架构风格,它以HTTP协议为...
本书涵盖以下激动人心的功能: 向您介绍RESTful软件架构风格和REST API设计原则利用JSR 353 API,JSR 374 API,JSR 367 API和Jackson API进行JSON处理利用JAX-RS 2.1 API构建可移植的RESTful Web API 使用Jersey和...
1. **JAX-RS支持**:RESTEasy是JAX-RS规范的实现,JAX-RS是Java API for RESTful Web Services的简称,提供了创建RESTful服务的标准接口。 2. **易于集成**:RESTEasy可无缝集成到各种Java EE服务器,如Tomcat、...
JSR 311,全称为Java Specification Request 311,是Java平台上的一个标准,专门用于定义Java API for RESTful Web Services (JAX-RS)。这个标准旨在简化开发人员创建RESTful Web服务的过程,它提供了一套用于处理...
* 核心服务器:jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar, jersey-bundle.jar * 核心客户端:(用于测试)jersey-client.jar * JAXB支持:(在高级样例中使用)jaxb-impl.jar,jaxb-api.jar,...
jsr173_api-1.0.jar jsr173_api-1.0.jar
在Java社区中,RESTful Web服务的概念直到2008年JSR 311(Java API for RESTful Web Services,JAX-RS)规范的最终定稿之后才得到标准化。JAX-RS提供了开发RESTful服务的Java API和注解,是构建Java RESTful Web服务...
jsr311-api-1.0.jar的jar包,与以前的版本不同,且使用广泛点
同时,Java API for RESTful Web Services(JSR-311)也定义了 RESTFUL API 的开发规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用。 RESTFUL API 的发展对软件开发产生了深远的影响,例如:让 WEB ...
JSR 181(JavaTM API for XML Web Services 1.0)是Java Community Process制定的一个标准,旨在简化Java中的Web服务开发,通过注解将业务接口直接转换为Web服务。 首先,我们需要了解JSR 181的核心概念。JSR 181...
JAX-RS是Java平台上的RESTful Web服务API,而RestEasy作为其实现,允许开发者用Java注解来定义REST接口。 要开始使用RestEasy,首先需要在项目中引入依赖。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```...
Java API规范JSR82,全称为"Java Community Process (JCP) Specification Request 82",是Java为蓝牙应用提供的一套接口和类库,它定义了如何在Java环境中访问和控制蓝牙硬件。 JSR82规范的目标是为Java开发者提供...
Jersey是Java世界中著名的RESTful服务开发框架,它基于JSR 311(Java API for RESTful Web Services)规范。在这个特定的资源包中,我们有三个关键的jar文件:`jersey-core-1.1.1.5.jar`、`jersey-client-1.1.5.1....
JSR 354 Spec定义的1.0.1 API(修复:使用Java 7构建Java 7 API) JSR 354 Spec定义的1.0.2 API(修复:使用Java 9构建)-不要使用,而应使用1.0.3! JSR 354规范定义的1.0.3 API(与Java 8兼容,完整的Java 9...
在JAX-WS中,`@Path`是一个重要的注解,它源自JSR 311(Java API for RESTful Web Services),这是一个为Java平台定义RESTful Web服务的标准。`@Path`注解被用来标识一个类或方法,表示它们是RESTful服务的资源。这...
Jersey是JAX-RS(Java API for RESTful Web Services)规范的开源实现,它提供了一套用于创建和消费RESTful服务的API和工具。使用Jersey,开发者可以轻松地在Java应用中实现RESTful服务,例如通过注解来定义资源类...
`jsr173_1.0_api.jar`是Java Simple API for XML Processing (StAX) 1.0规范的API接口,它是Java中处理XML流式解析和生成的标准。JAXB有时会与StAX结合使用,特别是在处理大量XML数据时,StAX可以提供更高效的性能。...