春季数据休息与春季数据jpa

Posted

技术标签:

【中文标题】春季数据休息与春季数据jpa【英文标题】:spring data rest vs spring data jpa 【发布时间】:2016-01-30 02:28:58 【问题描述】:

我看过下面的问题

What are the advantages of using Spring Data REST over Spring Data JPA?

它并不能完全满足我的需求。 我的数据库在 mysql 上,我选择了 Spring-Data-JPA 实现。 REST 能给我带来哪些我在简单的 Spring-Data-JPA 中找不到的附加优势? 例如,如果明天,我决定为我的业务和数据库模块实现一个黑白缓存,在这种情况下我必须编写更少的代码吗? 哪个很容易配置?哪个更灵活?如何灵活?

另外,如果我在一个新应用程序中同时使用 REST 和 JPA,我会违反哪些设计原则?

我期待从架构的角度得到答案。提前致谢。

【问题讨论】:

【参考方案1】:

基本上我认为你的问题并不完全正确。我认为您还没有完全找到通过春季项目丛林的方式 - 所以我在这里尝试给出一些方向。

Spring-data-jpa 是使用 JPA 访问数据的 Spring 方式。您可以在 spring-data-jpa 之上使用 spring-data-rest 创建一个 REST-API 层,在您的存储库和实体之上没有代码。

spring-data-rest 可以为您做的事情真是太棒了。这是在 JPA 层之上创建 REST API 的最快方法。而且它也是高度可定制的。但我认为它有它的局限性。最显着的弱点是实体和 API 之间的紧密耦合。通常,您希望在这些层之间进行一些解耦。但它是一个很棒的软件。如果您需要速度快并且想编写最少的代码,请选择 spring data rest。

spring-data-rest 的 Spring 替代方案是直接使用 spring MVC 自行创建 REST API。 Spring-data-jpa 仍将用于实现数据访问层。 Spring MVC 非常强大,并且在后台被 spring-data-rest 使用。这使您可以完全控制 REST 层。

我还想提一下spring HATEOAS - 它只是 spring mvc 之上的一个模块,它为您提供了创建超媒体驱动的 REST API 的工具 - 因此您可以达到 Richardson Maturity Model 的成熟度级别 3 - 它也被 spring-data-rest 内部使用。

【讨论】:

感谢 Mathias +1 的成熟度模型,我从来没有新的存在过。但是,我一直在寻找有关它如何紧密耦合以及 Spring Data JPA 如何更松散耦合的更多解释。如果可以的话,我正在寻找具体的例子...... 这是一个非常好的示例应用程序github.com/olivergierke/spring-restbucks,它包含 spring-data-rest 的示例,但也包含自定义控制器。 加 1 提到 API 和 db 之间紧密耦合的缺点,以及提到 Spring HATEOAS。

以上是关于春季数据休息与春季数据jpa的主要内容,如果未能解决你的问题,请参考以下文章

杰克逊映射无限递归。春季数据休息

春季启动数据休息中的日期问题

有没有办法在没有投影的情况下在春季数据休息中返回带有 id 的关联对象

传递 POST 请求。春季安全。休息模板。杰克逊转换器

重复的结果休息服务春季启动

春季休息服务拒绝http 403访问