例如,Play-framework支持这样的RESTful服务:RESTful on Play! framework
这与Jax-RS Jersey实现相比如何?像Play这样的框架会不会因为它的炫酷花哨而在新泽西运行,而且它也会休息呢?
开发人员的工作效率很重要,但正确的实现也很重要。也许在REST纯服务中使用MVC框架是“错误的”?
请注意,只有RESTful服务,根本没有UI组件。
发布于 2011-07-12 01:11:57
尽管为RESTful服务使用MVC框架并不是“错误的”,但与使用JAX-RS实现相比,还是有一些优点和缺点。
(免责声明:我只使用了Jersey和Play!为了好玩,而不是在生产级系统上,所以我将我的评论更一般地针对MVC与JAX-RS。请记住,这些都是广义的概括。)
MVC框架--至少是那些被认为对开发人员友好且“灵活”的框架--通常使您不必构建持久层(模型部分)。大多数还通过约定或某种形式的配置使用脚手架来简化“路由”请求。缺点是您必须遵守控制器的某些约定,并且通常必须为每个资源编写一个视图(或者构建抽象层以避免重写相同的代码)。
JAX-RS擅长定义路由(使用Java注释)以及消除对服务类的任何限制。根据我的经验,这大大减少了样板代码的数量和开发人员的开销。Jersey和Apache CXF还使用JAXB注释处理XML或JSON序列化,从而消除了在MVC上下文中确定视图的需要。这里的缺点是,你必须弄清楚你自己的对象关系映射或持久层,这可能是好的,也可能是坏的,这取决于你是在现有数据之上构建还是创建一个新的系统(或者使用除JPA/RDBMS之外的其他东西,例如NoSQL数据存储)。
我个人的评论是:玩吧!是一个非常酷的框架,但为了构建RESTful服务,我随时都会选择CXF (或Jersey)而不是MVC框架。在我的经验中,这解放了开发人员,让他们专注于服务所需的逻辑,并为不同的数据库方法提供了选择。为正确的工作提供正确的工具。
发布于 2014-04-27 08:19:18
经验法则:对于Scala,使用Play。对于Java,请使用Jersey。
您可以使用Jersey/Scala和Play/Java;我已经完成了这两个任务。它起作用了。这不是坏事。但除非你有特殊的理由,否则我不会混合生态系统。Java和Scala是可互操作的,但它们有不同的生态系统,如果您使用的是Scala或Scala-isms,我会避免添加Java-isms,如果您直接运行Java,我会避免添加依赖项。
对于REST服务,Jersey和Play通常很接近。这两个版本都没有任何杀手级的特性。
Jersey在注释中定义URL映射,Play在服务范围的路由文件中定义它们。它们与XML、JSON、数据库、测试、模拟、依赖注入库和应用服务器部署等不同的库捆绑在一起或具有不同质量的集成。
Java的世界有JMS、Spring、JUnit、jdbi/hibernate/jpa、Jetty/Grizzly。Scala世界有Akka、specs2/ScalaTest、Anorm/slick。Jersey更适合第一世界,Scala更适合第二世界。你绝对可以跨越它,但它会有点不优雅,可能需要更多的胶水编码。
发布于 2011-07-02 15:26:00
JAX-RS是一个标准,可以由不同的供应商创建实现。Jersey就是这样一种实现。其他框架可能使用JAX-RS,但不是标准。因此,这不是一对一的比较。
我以前从未听说过Play,但它看起来确实很有趣,更像Rails和Django,而不是Jersey。我喜欢Jersey的原因是它可以集成到现有的Java web应用程序中,只需添加JAR并在web.xml中声明一些内容即可。我发现Jersey和JAX-RS的混淆之处在于路由。
Play似乎使路由变得更容易,然而,如果我错了,请纠正我,它似乎是一个要么全有要么全无的框架,并且不能与同一web应用程序中的其他servlet一起使用。
https://stackoverflow.com/questions/6550760
复制相似问题