`
J2EE小熊
  • 浏览: 108995 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

                                                                           作者: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或更高版本上运行。

 

分享到:
评论

相关推荐

    jsr311-api-1.1.1-API文档-中文版.zip

    标签:javax、jsr311、api、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...

    jsr311-api-1.1.1-API文档-中英对照版.zip

    标签:javax、jsr311、api、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...

    jsr311-api.jar

    **JSR 311 API** 是Java Specification Request (JSR) 311的实现,它是Java平台上的一个标准接口,主要用于构建RESTful(Representational State Transfer)Web服务。REST是一种轻量级的架构风格,它以HTTP协议为...

    RESTful-Java-Web-Services-Third-Edition:RESTful Java Web服务第三版,由Packt发行

    本书涵盖以下激动人心的功能: 向您介绍RESTful软件架构风格和REST API设计原则利用JSR 353 API,JSR 374 API,JSR 367 API和Jackson API进行JSON处理利用JAX-RS 2.1 API构建可移植的RESTful Web API 使用Jersey和...

    rest-easy:RESTFul Web服务

    1. **JAX-RS支持**:RESTEasy是JAX-RS规范的实现,JAX-RS是Java API for RESTful Web Services的简称,提供了创建RESTful服务的标准接口。 2. **易于集成**:RESTEasy可无缝集成到各种Java EE服务器,如Tomcat、...

    JSR 311例子

    JSR 311,全称为Java Specification Request 311,是Java平台上的一个标准,专门用于定义Java API for RESTful Web Services (JAX-RS)。这个标准旨在简化开发人员创建RESTful Web服务的过程,它提供了一套用于处理...

    Eclipse中使用Jersey和Tomcat构建RESTful WebService及其调用

    * 核心服务器: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 jsr173_api-1.0.jar

    Build a RESTful Web service using Jersey and Apache Tomcat.

    在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

    jsr311-api-1.0.jar的jar包,与以前的版本不同,且使用广泛点

    RESTFUL-API-设计开发.pptx

    同时,Java API for RESTful Web Services(JSR-311)也定义了 RESTFUL API 的开发规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用。 RESTFUL API 的发展对软件开发产生了深远的影响,例如:让 WEB ...

    xfire-jsr181-api-1.0-实例化webservic

    JSR 181(JavaTM API for XML Web Services 1.0)是Java Community Process制定的一个标准,旨在简化Java中的Web服务开发,通过注解将业务接口直接转换为Web服务。 首先,我们需要了解JSR 181的核心概念。JSR 181...

    使用 RestEasy 和 Apache Tomcat 构建 RESTful Web 服务

    JAX-RS是Java平台上的RESTful Web服务API,而RestEasy作为其实现,允许开发者用Java注解来定义REST接口。 要开始使用RestEasy,首先需要在项目中引入依赖。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```...

    蓝牙技术Java API与规范(JSR82)

    Java API规范JSR82,全称为"Java Community Process (JCP) Specification Request 82",是Java为蓝牙应用提供的一套接口和类库,它定义了如何在Java环境中访问和控制蓝牙硬件。 JSR82规范的目标是为Java开发者提供...

    jersey1.1.1.5 client及core jar包,也有jsr311包

    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....

    jsr354-api:JSR 354-货币和货币API

    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 api jar包

    在JAX-WS中,`@Path`是一个重要的注解,它源自JSR 311(Java API for RESTful Web Services),这是一个为Java平台定义RESTful Web服务的标准。`@Path`注解被用来标识一个类或方法,表示它们是RESTful服务的资源。这...

    五六本关于restful开发的电子书

    Jersey是JAX-RS(Java API for RESTful Web Services)规范的开源实现,它提供了一套用于创建和消费RESTful服务的API和工具。使用Jersey,开发者可以轻松地在Java应用中实现RESTful服务,例如通过注解来定义资源类...

    jaxb-impl.jar jaxb-api.jar jsr173_1.0_api.jar

    `jsr173_1.0_api.jar`是Java Simple API for XML Processing (StAX) 1.0规范的API接口,它是Java中处理XML流式解析和生成的标准。JAXB有时会与StAX结合使用,特别是在处理大量XML数据时,StAX可以提供更高效的性能。...

Global site tag (gtag.js) - Google Analytics