对于Java中的RESTful服务,JAX-RS是否比Swing、Grails或Play等MVC框架更好?

对于Java中的RESTful服务,JAX-RS是否比Swing、Grails或Play等MVC框架更好?,rest,grails,jersey,playframework,jax-rs,Rest,Grails,Jersey,Playframework,Jax Rs,例如,Play framework支持以下RESTful服务: 这与Jax-RS-Jersey实现相比如何?像Play这样的框架是不是因为它的铃铛和哨子都很酷而在泽西岛上转来转去,还有其他的呢 开发人员的生产力很重要,但正确的实现也很重要。也许对仅REST服务使用MVC框架是“错误的” 注意,只有RESTful服务,根本没有UI组件 JAX-RS是一个标准,可以由不同的供应商创建实现。泽西岛就是这样一个实施。其他框架可以使用JAX-RS,但不是标准。因此,这不是一对一的比较 我以前从未听说过这场

例如,Play framework支持以下RESTful服务:

这与Jax-RS-Jersey实现相比如何?像Play这样的框架是不是因为它的铃铛和哨子都很酷而在泽西岛上转来转去,还有其他的呢

开发人员的生产力很重要,但正确的实现也很重要。也许对仅REST服务使用MVC框架是“错误的”


注意,只有RESTful服务,根本没有UI组件

JAX-RS是一个标准,可以由不同的供应商创建实现。泽西岛就是这样一个实施。其他框架可以使用JAX-RS,但不是标准。因此,这不是一对一的比较

我以前从未听说过这场比赛,但它看起来确实很有趣,更像Rails和Django,而不是Jersey。我喜欢Jersey的地方在于,只需添加jar并在web.xml中声明一些内容,它就可以集成到现有的JavaWeb应用程序中。我发现Jersey和JAX-RS的混淆之处在于路由

Play似乎使路由更容易,但是,如果我错了,请纠正我,它似乎是一个全有或全无的框架,不能与同一web应用程序中的其他servlet一起使用。

尽管使用MVC框架进行RESTful服务并不是“错误的”,但与使用JAX-RS实现相比,它有一些优点和缺点

(免责声明:我使用Jersey and Play!只是为了好玩,而不是在生产级系统上使用,所以我更一般地针对MVC与JAX-RS定制了我的评论。请记住,这些都是广义的概括。)

MVC框架——至少是那些被认为对开发人员友好且“灵活”的框架——通常使您不必构建持久层(模型部分)。大多数还使用通过约定的脚手架或某种形式的配置来简化“路由”请求。缺点是您必须遵守控制器的某些约定,并且通常必须为每个资源编写一个视图(或者构建抽象层以避免重写相同的代码)

JAX-RS擅长定义路由(使用Java注释)以及消除对服务类的任何限制。根据我的经验,这大大减少了样板代码的数量和开发人员的开销。Jersey和ApacheCXF还使用JAXB注释处理XML或JSON序列化,这消除了在MVC上下文中分析视图的需要。这里的缺点是,您必须找出自己的ORM或持久层,这可能是好的,也可能是坏的,这取决于您是在现有数据之上构建,还是在创建绿地系统(或者使用JPA/RDBMS以外的东西,例如NoSQL数据存储)


我个人的评论是:玩吧!是一个非常酷的框架,但我会选择CXF(或Jersey)而不是MVC框架来构建RESTful服务。根据我的经验,这使开发人员能够专注于服务所需的逻辑,并为不同的数据库方法打开了选项。正确的工具用于正确的工作。

作为经验法则:对于Scala,使用Play。对于Java,使用Jersey

您可以使用Jersey/Scala和Play/Java;我两者都做过。它起作用了。还不错。但除非你有特别的理由这么做,否则我不会混合生态系统。Java和Scala是可互操作的,但它们有不同的生态系统,如果您使用Scala或Scala ISM,我会避免添加Java ISM,如果您运行的是纯Java,则会避免添加依赖项

对于休息服务,球衣和比赛通常都很近。两者都没有比另一个更具杀伤力的特征

Jersey在注释中定义URL映射,Play在服务范围的路由文件中定义URL映射。它们与不同的库捆绑或具有不同的集成质量,如XML、JSON、数据库、测试、模拟、依赖注入库和应用服务器部署


Java世界有JMS、Spring、JUnit、jdbi/hibernate/jpa、Jetty/Grizzly。Scala世界有Akka、specs2/ScalaTest、Anorm/slick。泽西更适合第一世界,斯卡拉更适合第二世界。您当然可以跨越这一界限,但它将变得不那么优雅,可能需要更多的胶水编码。

更私人的一点是:我投入了大量时间研究和研究游戏!开发一个RESTful框架只会遇到限制、版本差异、文档问题等等。玩吧!它有很多很酷的特性,但它足够温和,我希望我能直接进入Jersey/JAX-RS解决方案。你可以在Jersey或Play中使用任何你想要的数据层。XML/JSON类似。您提到JAXB->您可以使用Jersey、CXF或Play来实现这一点。最大的决定因素应该是您想在Scala世界还是Java世界工作。