为新项目选择JAX-RS实现


35

我正在启动一个新的Java项目,该项目需要RESTful API。它将是为移动客户提供服务的SaaS业务应用程序。

我已经用Java EE 6开发了一个项目,但是我对生态系统不是很熟悉,因为我的大部分经验都在Microsoft平台上。

对于诸如所述的新项目,对于JAX-RS实现,哪个选择是明智的选择?

维基百科的列表来看,主要竞争者似乎是Jersey,Apache CXF,RESTeasy和Restlet。但是Wikipedia上引用的JAX-RS实现比较是从2008年开始的。

他们各自的主页给我的第一印象是:

  • CXF的目标是成为一个非常全面的解决方案(使我想起了Microsoft领域的WCF),这使我认为,理解,设置和调试它可能比我需要的更为复杂。
  • Jersey是参考实现,可能是一个不错的选择,但是它是Sun的遗留产品,我不确定Oracle如何对待它(公告页面不起作用,最后一次提交通知是在4个月前)。
  • RESTeasy来自JBoss,可能是一个不错的选择,尽管我不确定学习曲线。
  • Restlet似乎很流行,但是有很多历史,我不确定它在Java EE 6世界中是最新的还是不确定它是否带有沉重的J2EE思维方式(例如许多XML配置)。

这些替代方案的优点是什么?那学习曲线呢?功能支持?工具(例如NetBeans或Eclipse向导)?调试和部署的便利性如何?这些项目中的任何一个是否比其他项目更新?它们的稳定性如何?


1
感谢标题的编辑,但我并不是真的在问JAX-RS是否适合移动项目。那将是另一个问题。我试图找出将推荐的JAX-RS实现。
Fernando Correia

Answers:


22

我已经爱上Dropwizard寻求整体解决方案

Dropwizard并没有采用某些巨大的应用程序容器方法,而是提倡提供更快开发周期的轻量级解决方案。本质上,它为以下知名框架提供了粘合剂:

  • 码头(HTTP)
  • 球衣(JAX-RS)
  • 杰克逊(JSON或XML)
  • 番石榴(对JDK库的出色补充)
  • 指标(实时应用程序监视)
  • 休眠验证器(输入验证)
  • OAuth(RESTful身份验证)

结合以上各项,再加上可靠的功能测试方法,可以为您提供快速启动和运行服务的完整解决方案。

是啊 然后我问了JAX-RS问题...

您会注意到,他们选择的是Jersey,这是参考JAX-RS的实现。作为RESTEasy的人,我认为这将是一个问题,但是学习曲线为零。两者在很大程度上可以互换。但是,我要说的是Jersey客户提供了一个流畅的界面来构建测试。一个例子是...

 @Override
  protected void setUpResources() {
    addResource(new HelloWorldResource("Hello, %s!","Stranger"));

    setUpAuthenticator();
  }

  @Test
  public void simpleResourceTest() throws Exception {

    Saying expectedSaying = new Saying(1,"Hello, Stranger!");

    Saying actualSaying = client()
      .resource("/hello-world")
      .get(Saying.class);

    assertEquals("GET hello-world returns a default",expectedSaying.getContent(),actualSaying.getContent());

}

2
非常感谢您让Dropwizard引起了我的注意。我对此一无所知,似乎很适合我的需求。它看起来经过深思熟虑,实用且扎实,可能在帮助我构建比我对Java EE平台的肤浅知识更好的解决方案的同时,可以为我省去很多麻烦。来自Yammer这样成功的公司为公司市场提供服务肯定是一个加分。再次非常感谢。
Fernando Correia 2012年

1
没问题。我在博客中发布了一个我的项目,该项目演示了许多Dropwizard功能。它已获得MIT许可,因此可以根据需要随意使用:gary-rowe.com/agilestack/2012/06/06/…–
Gary Rowe

那会有所帮助。非常感激。
Fernando Correia

1
我已经倾向于使用Jackson,Guava,Validator和OAuth,所以这看起来很简单……谢谢。
PhiLho

警告:泽西岛2.0远远低于1.0。它缺少了1.0中曾经存在的功能,它迫使您使用特定的DI框架,并且社区支持比以前更加糟糕。
吉利2013年

6

您可以看一下这个问题,它讨论了其他开发人员的一些经验。

我可以亲自推荐泽西岛。它非常易于使用,并且具有良好的关注度,因为它是参考实现。这也意味着它将在接下来的一段时间内得到维护和支持。


1
感谢您提供有用的答案以及与该相关问题的链接-奇怪的是,该问题未出现在搜索中。不过,该答案是4年前的,因此,我感谢您的最新建议。
Fernando Correia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.