RESTful API / MVC 应用程序的 Grails 与 JAX-RS

Posted

技术标签:

【中文标题】RESTful API / MVC 应用程序的 Grails 与 JAX-RS【英文标题】:Grails vs. JAX-RS for RESTful API / MVC App 【发布时间】:2011-07-08 11:26:06 【问题描述】:

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

我正在构建 MVC 应用程序的架构,并考虑将什么用于控制器/服务的核心。此堆栈还将用作 RESTful API,与 UI 同等重要。

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

圣杯

我不会使用大量内置的 Grails 功能(GSP/SiteMesh、Hibernate、几乎所有插件),所以我担心 Grails 对我的用途来说可能有点重 我担心我无法充分控制我处理 REST API 的能力,因为它非常以视图为中心 我发现插件质量不一致,以至于我不确定我是否认为它们是“专业人士” 我喜欢约定优于配置和编辑和刷新,如果我使用 JAX-RS,我可能想要连接类似的东西 我喜欢 grails 命令行,因为它简化了所有内容,但我担心它可能会妨碍我,因为我没有使用太多堆栈 我喜欢脚手架,但由于我没有使用 Hibernate 或 GS​​P/SiteMesh,它可能无法很好地啮合

JAX-RS

JAX-RS 是为 REST 设计的。这将使我的 RESTful API 真正易于实施,因为我拥有完全的控制权 Groovy 是 Grails 大放异彩的重要组成部分,因此即使在 JAX-RS 中我也会从中受益 我喜欢 JAX-RS 不会自动拉入一堆其他东西,这样我就可以更好地控制哪些组件的输入/输出 不幸的是,因为它没有引入其他所有东西,我最终需要的任何东西都需要更多的工作,而 Grails 可能有一个插件 grails 命令行和脚手架将丢失;也许 Maven 可以填补一些空白

似乎每个创建动作和路由的能力都非常相似(尽管实现风格不同)。其实有other SO questions wish touch upon this所以我不太担心。

【问题讨论】:

【参考方案1】:

去年我在几个框架(即 Grails、Play!、Spring MVC、Jersey、Restlet)中编写了一个小型 REST 服务原型。在这个问题上,我对 Grails 的感觉是,虽然 Grails 支持 REST 风格的架构,但它并不是真正为它而设计的。我不想在这里变得虔诚,所以如果你只想将资源映射到 URL 和 HTTP 动词你很好,但是如果你想更深入地研究 REST 并严格控制返回码、位置标头等,你可能仍然可以使用 Grails 来完成,但它可能在纯 REST 框架中得到更好的支持。

Grails 还带有很多依赖项,如果您从一个绿色领域开始,这可能不是问题,但当您必须将其与现有的遗留组件或框架集成时可能会导致问题。

在使用的两个 REST 框架中,我更喜欢 Jersey,因为它在我的案例中很有效,而且文档很好(虽然有点侧重于 Maven 和 Netbeans)。

【讨论】:

感谢您的洞察力。听起来你的经历非常接近我的第一印象。我不需要对 REST 教条主义,但我宁愿不必跳过箍来调整标题。很高兴听到 Jersey 最终成为一个不错的选择,因为这是我一直在使用的 JAX-RS 实现。 我很好奇您是否觉得 JAX-RS 中的路由和内容类型处理足以满足您的 REST 需求?额外的控制是否最终成为过多的样板代码?还是合理的? 关于路由,为每个资源定义它的优点和缺点。它不那么优雅,绝对不是配置上的约定。另一方面,它更明显,因为它就在代码旁边。对于内容协商,我使用 JAXB 类来自动生成 XML 或 JSON。我发现这比 Grails 中的 withFormat 技术更不具有侵入性。 到目前为止我也有过类似的经历。至于内容协商,我想我的意思是你有没有 JAX-RS 没有提供足够控制的问题?例如接受类型冲突:***.com/questions/5250923【参考方案2】:

是的,当您不打算使用模型或视图时,在 MVC 框架上构建似乎确实很繁重。虽然自动装配和简化配置非常好,但 Grails 仍会提供许多您不需要的额外内容。

我个人会采用更轻松的方法,将 Grails 排除在外,使用任何独立库或编写自定义代码来提供您想要的功能。 Groovy 站点上列出了许多 container projects,也许 Spring 或其中一种替代方案会为您的架构增加一些价值。

【讨论】:

特别是当 JAX-RS 感觉像 MVC 减去预定义的视图和模型模式时。感谢您的直觉检查。 只是好奇,您是否选择了 JAX-RS 的实现?我一直在考虑在即将到来的 Groovy 项目中使用它,但还没有真正比较实现。 球衣是我玩得最多的。我没有使用任何对 JSR-311 的实现扩展,以便我可以“轻松”在两者之间切换。 “带有 JAX-RS 的 RESTful Java”(oreilly.com/catalog/9780596158057)有一章比较了一些。不确定自 2009 年以来发生了多大变化。

以上是关于RESTful API / MVC 应用程序的 Grails 与 JAX-RS的主要内容,如果未能解决你的问题,请参考以下文章

node.js 中的 MVC 对开发 restful api 很重要吗?

RESTful API / MVC 应用程序的 Grails 与 JAX-RS

MVC 服务器端 VS MVC 客户端和 RESTful API

restful api的token验证

如何处理使用 3rd-party 的 restful store api 和 js mvc 框架的安全性?

restful api接口介绍和数据返回及异常处理