您的位置:首页 > 其它

比较各JAX-RS实现:Jersey,Restlet,CXF,RESTEasy

2015-06-17 10:50 381 查看
java rest 实现技术对比:

http://news.misuland.com/20080926/1222396399411.html JavaSE/EE执行委员批准了JSR
311 JAX-RS作为支持RESTful web服务的java 应用程序接口。JAX-RS (Java平台上的REST支持规范 - aka JSR-311) 成为第一个到达提议为最终草案阶段的JavaEE 6的规范。查看Java规范需求点击: http://jcp.org/en/jsr/detail?id=311

http://www.blogjava.net/xmatthew/archive/2008/10/21/235777.html 与其它规范发布一样,伴随此次发布,Sun同步发布该规范的参考实现项目jersey。最新版本为1.0。
为了让大家能快速体验Rest带给我们全新的架构风格,可以直接从本地下载程序。bookstore-1.0.war 源代码 bookmark-1.0-project.zip.
下面展示了一个代码片断,让大家直观感受一下。

1 @Path("/bank")

2 public class Bank {

4 @POST

5 @Path("/account/{name}")

6 public Account createAccount(@PathParam("name") String name,

7 @QueryParam("balance")BigDecimal balance) {

8 //


9 return new Account(name, balance);

10 }

12 @GET

13 @Path("/account/{name}")

14 public Account getAccount(@PathParam("name") String name) {

15 //


16 return Account.getByName(name);

17 }

19 }

上面的代码,就会发布两个资源服务:

POST /bank/account/newAccount

GET /bank/account/newAccount

大家看到,用Rest发布资源服务非常方便。当然上面例子只是一个非常简单的示例,用于展示Rest的应用,也希望大家提出好的建议和意见。

http://www.infoq.com/cn/news/2008/10/jaxrs-comparison 比较各JAX-RS实现

正如某人在别处说的,关于公交车,有一个奇怪的现象:你等了很久一辆不来,最后却一下来了三辆!JAX-RS实现貌似也碰到了类似的问题。目前我们有:

CXF——XFireCeltix的合并(一个由IONA赞助的开源ESB,最初寄存在ObjectWeb上)。
Jersey——Sun公司的JAX-RS参考实现。
RESTEasy——JBoss的JAX-RS项目。
Restlet——也许是最早的REST框架了,它JAX-RS之前就有了。

尽管围绕着REST存在各种各样的争论,但JAX-RS提供了Java语言所需的REST支持这一点是无可争议的。如果你是REST新手,你会选择哪种实现呢?嗯,Solomon
Duskis试图解答这一问题。他还在dzone上指出:

我想就以下几个“纯”JAX-RS以外的方面对各JAX-RS实现进行比较。

这些方面包括:

产品成熟度
服务端集成策略
Java客户端API
可配置能力
安全性
性能

Solomon Duskis说“Jersey的用途是作为一个参考实现。RESTEasy是新思想的游乐场。CXF是在IONA支持下的‘企业版’。Restlet项目诞生的目的是增加一种RESTful API选择。”

然而,Bill Burke在博客评论中反击道:

RESTEasy不仅仅是新思想的游乐场。其实,我们将很快在JBoss里支持它(一拿到TCK就可以),而且我们很多大客户都在催促我们提供RESTEasy支持。

在易用性方面,Solomon Duskis说:

你所面临的问题是选择一种实现。我觉得Jersey的确很容易上手,不过Bill Burke会说RESTEasy同样很简单。它们都可以与EJB一起使用。不过,使用Jersey的话,搭建与运行测试服务很容易,如果你下载NetBeans的话更是如此。我第一次用Jersey和NetBeans时,不到半个小时就测试并运行起来了,包括下载、安装及代码浏览等。

Sun公司的人很想把Jersey与人们关于“参考实现”的传统看法区分开:

你在谈到“产品用途”时,应当将Jersey看作一种立马可投入使用的产品(事实上下个月它就要随GlassFish v3 Prelude版捆绑发布了)。Jersey团队花费了相当多的时间来测试并改善代码,以免去其作为“参考实现”的印象!:)

Solomon Duskis打算对这几个方面进行研究,然后将结果发布在博客里。一篇名为《JAX-RS Spring集成》的文章已经发布出来了。

现在的四种JAX-RS实现均提供Spring集成,连JBoss的RESTEasy都是。

接着,他对集成作了相当简短的介绍。不过正如Paul所指出的,Solomon Duskis在讲述Jersey时引用的是过时的资料。这比较遗憾,因为我们需要的是一个深入彻底的比较。Solomon Duskis最后说:

四种实现均具有相当出色的Spring/JAX-RS能力,但我认为CXF是“JAX-RS产品里Spring集成做得最好的”。

不过显然这只是他的个人看法,其他人肯定会有不同意见。比如Bill Burke就问道:

我没看出CXF在Spring集成方面比其他产品优越在哪里。我不明白为什么所有额外的CXF专用XML都被放在一个Spring XML文档里。RESTEasy和Jersey提供的Spring集成要比CXF的侵入性更小。如果我没搞错的话。

对此,Solomon Duskis回复说:

如果各个类有一个简单的配置,能够满足超过90%的需要,那么标注驱动的方法是可行的。剩下那不到10%的部分,需要在不同场合下对同一资源作不同配置。 我知道,根据我所更新的功能的需求与当前部署,我将会需要这种方案。为了通过同样的Spring XML文档来部署具有不同配置(如不同的JDBC数据源、不同的服务实现等等)的同一个资源,CXF提供了额外的功能。基本上,大多数情况下,标注的办法是 很好的,但有时,你必须采用外部配置的办法来实现解耦(decoupling)。XML方案并不如标注一样受欢迎,但它们可以用于更复杂的配置情况。
【虎.无名:静态配置用标注,动态配置用xml或者properties文件】

或许更深入的比较能够揭示出更多的东西来?查看英文原文:A Comparison of JAX-RS Implementations

http://www.ibm.com/developerworks/cn/java/j-lo-jaxrs/index.html 使用 JAX-RS 简化 REST 应用开发

级别: 初级

殷 钢, 软件工程师, IBM

张 昊, 软件工程师, IBM

2009 年 9 月 07 日

本文将详细介绍 Java EE 6 中所引入的对 JSR-311 (JAX-RS : Java API for RESTful Web Services) 的支持,并通过一个完整的示例应用程序展示 JAX-RS 关键的设计细节以及与 JPA 的结合使用。

REST 简介

REST 是英文 Representational State Transfer 的缩写,有中文翻译为“具象状态传输”。REST 这个术语是由 Roy Fielding 在他的博士论文 《 Architectural Styles and the Design of Network-based Software Architectures 》中提出的。REST 并非标准,而是一种开发 Web 应用的架构风格,可以将其理解为一种设计模式。REST 基于 HTTP,URI,以及 XML 这些现有的广泛流行的协议和标准,伴随着
REST,HTTP 协议得到了更加正确的使用。

相较于基于 SOAP 和 WSDL 的 Web 服务,REST 模式提供了更为简洁的实现方案。目前,越来越多的 Web 服务开始采用 REST 风格设计和实现,真实世界中比较著名的 REST 服务包括:Google AJAX 搜索 API、Amazon Simple Storage Service (Amazon S3) 等。

基于 REST 的 Web 服务遵循一些基本的设计原则:

系统中的每一个对象或是资源都可以通过一个唯一的 URI 来进行寻址,URI 的结构应该简单、可预测且易于理解,比如定义目录结构式的 URI。

以遵循 RFC-2616 所定义的协议的方式显式地使用 HTTP 方法,建立创建、检索、更新和删除(CRUD:Create, Retrieve, Update and Delete)操作与 HTTP 方法之间的一对一映射:

若要在服务器上创建资源,应该使用 POST 方法;

若要检索某个资源,应该使用 GET 方法;

若要更改资源状态或对其进行更新,应该使用 PUT 方法;

若要删除某个资源,应该使用 DELETE 方法。

URI 所访问的每个资源都可以使用不同的形式加以表示(比如 XML 或者 JSON),具体的表现形式取决于访问资源的客户端,客户端与服务提供者使用一种内容协商的机制(请求头与 MIME 类型)来选择合适的数据格式,最小化彼此之间的数据耦合。

JAX-RS -- Java API for RESTful Web Services

Java EE 6 引入了对 JSR-311 的支持。JSR-311(JAX-RS:Java API for RESTful Web Services)旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架。同时,JAX-RS 使用 POJO 编程模型和基于标注的配置,并集成了 JAXB,从而可以有效缩短 REST 应用的开发周期。

JAX-RS 定义的 API 位于 javax.ws.rs 包中,其中一些主要的接口、标注和抽象类如 图 1 所示。

结束语

REST 作为一种轻量级的 Web 服务架构被越来越多的开发者所采用,JAX-RS 的发布则规范了 REST 应用开发的接口。本文首先阐述了 REST 架构的基本设计原则,然后通过一个示例应用展示了 JAX-RS 是如何通过各种标注来实现以上的设计原则的,最后还介绍了 JAX-RS 与 JPA、Gson 的结合使用。本文的示例应用使用了 Jersey 和 OpenJPA,部署在 Tomcat 容器上,替换成其它的实现只需要修改 web.xml 和 persistence.xml 配置文件。

原文链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: