Model view controller 针对RESTful API/MVC应用的Grails与JAX-RS

Model view controller 针对RESTful API/MVC应用的Grails与JAX-RS,model-view-controller,rest,grails,groovy,jax-rs,Model View Controller,Rest,Grails,Groovy,Jax Rs,我知道标题可能看起来像苹果和橘子,但请听我说……:) 我正在构建MVC应用程序的体系结构,并考虑控制器/服务的核心使用什么。这个堆栈还将作为一个RESTful API,它与UI同样重要 我正在缩小使用Grails或JAX-RS构建的堆栈的范围(此时我已经排除了其他选项,并且对扩展此列表不太感兴趣)。无论采用哪种方式,我都将使用Groovy,而我的模型和视图实际上不会受到此选择的影响,因此,进一步消除了两者之间的一些差异。以下是我一直在思考的优点/缺点,我想知道是否有人有任何其他意见或警告经验 圣

我知道标题可能看起来像苹果和橘子,但请听我说……:)

我正在构建MVC应用程序的体系结构,并考虑控制器/服务的核心使用什么。这个堆栈还将作为一个RESTful API,它与UI同样重要

我正在缩小使用Grails或JAX-RS构建的堆栈的范围(此时我已经排除了其他选项,并且对扩展此列表不太感兴趣)。无论采用哪种方式,我都将使用Groovy,而我的模型和视图实际上不会受到此选择的影响,因此,进一步消除了两者之间的一些差异。以下是我一直在思考的优点/缺点,我想知道是否有人有任何其他意见或警告经验

圣杯
  • 我不打算使用大量的Grails内置功能(GSP/SiteMesh、Hibernate,几乎所有的插件),所以我担心Grails对于我来说可能有点重
  • 我担心我无法控制自己处理RESTAPI的能力,因为它非常以视图为中心
  • 我看到插件的质量不一致到我不确定我认为它们是“PRO”/LI>的地方。
  • 我喜欢约定而不是配置&编辑和刷新,如果我使用JAX-RS,我可能会想要连接类似的东西
  • 我喜欢grails命令行,因为它简化了所有内容,但我担心它可能会妨碍我的工作,因为我没有使用太多的堆栈
  • 我喜欢脚手架,但因为我没有使用Hibernate或GSP/SiteMesh,所以可能无法很好地进行网格划分
JAX-RS
  • JAX-RS是为REST而设计的。这将使我的RESTful API真正易于实现,因为我拥有完全的控制权
  • Groovy是Grails的重要组成部分,所以即使在JAX-RS中,我也会从中受益
  • 我喜欢JAX-RS不会自动拉入一堆其他东西,这样我就可以更好地控制哪些组件被输入/输出
  • 不幸的是,由于它没有引入所有其他功能,我最终需要的任何东西都需要更多的工作,而Grails可能有一个插件
  • grails命令行和脚手架将丢失;也许Maven可以填补一些空白

似乎每一个用于创建操作和路由的功能都非常相似(尽管实现风格不同)。事实上,有很多问题,所以我不太担心。

是的,在不使用模型或视图的情况下,在MVC框架上构建似乎很繁重。虽然自动布线和简化的配置非常好,但Grails仍将提供许多您不需要的额外内容


我个人会采用更轻的方法,不使用Grails,使用任何独立的库或编写定制代码来提供您想要的特性。Groovy站点上列出了许多示例,可能Spring或其中一种替代方案会为您的体系结构增加一些价值。

去年我在几个框架中编写了一个小型REST服务原型(即Grails、Play!、Spring MVC、Jersey、Restlet)。我对Grails的这种担心的感觉是,尽管Grails支持REST风格的体系结构,但它并不是专门为它设计的。我不想在这里讲宗教,所以如果您只想将资源映射到URL和HTTP谓词,那就好了,但是如果您想更深入地研究REST,并严格控制返回代码、位置头等,您可能仍然可以使用Grails来实现,但在纯REST框架中可能更好地支持它

Grails还附带了许多依赖项,如果您刚起步,这些依赖项可能不是问题,但当您必须将其与现有遗留组件或框架集成时,可能会导致问题


从两个使用过的REST框架中,我更喜欢Jersey,因为它在我的案例中起作用,文档也很好(尽管有点侧重于Maven和Netbeans)。

特别是当JAX-RS感觉像是MVC减去预定义的视图和模型模式时。感谢您的直觉检查。只是好奇,您是否选择了JAX-RS的实现?我一直在考虑在即将到来的Groovy项目中使用它,但没有真正比较实现。Jersey是我玩得最多的东西。我没有使用JSR-311的任何实现扩展,因此我可以“轻松”地在这两种实现之间切换。“带JAX-RS的RESTfulJava”()有一章比较了一些。不确定自2009年以来发生了多大变化。感谢您的洞察力。听起来你的经历很好地反映了我的第一印象。我不需要在休息的问题上过于武断,但我不想为了调整头球而跳过篮筐。很高兴听到Jersey最终成为一个不错的选择,因为我一直在使用JAX-RS实现。我很好奇,您是否觉得JAX-RS中的路由和内容类型处理足以满足您的REST需求?另外,额外的控制是否会导致太多的样板代码?或者它是合理的?关于路由,为每种资源定义它有优点和缺点。它不那么优雅,而且绝对不是常规配置。另一方面,它更明显,因为它就在代码旁边。对于内容协商,我使用JAXB类自动生成XML或JSON。我发现这比Grails中的withFormat技术更不具侵扰性。到目前为止,我有过类似的经历。至于内容协商,我想我的意思是,您是否遇到了JAX-RS没有提供足够控制的问题?例如,接受类型冲突: