44

问题是,Spring HATEOAS 与 Spring Data Rest 有什么区别?

我觉得两者都可以做同样的事情,而且 Spring Data Rest(作为 Spring Data 的一部分)似乎更有活力。

https://github.com/spring-projects/spring-hateoas https://github.com/spring-projects/spring-data-rest

您什么时候使用其中一种?

4

3 回答 3

85

Spring HATEOAS 提供通用抽象(表示模型、Link类、用于构建指向 Spring MVC 控制器的链接的 API 等)以简化使用 Spring MVC 构建超媒体驱动的 REST API。因此,您可以将它与 Spring MVC 一起使用来手动构建这些服务。

Spring Data REST 使用 Spring HATEOAS 为 Spring Data 存储库管理的实体自动公开资源,并利用超媒体方面进行分页、链接实体等。因此它涵盖了基本内容的 80% 用例,并允许您有选择地添加更复杂的流程稍后使用手动实现的控制器。

要了解这一点,请随意查看Spring RESTBucks示例项目。实例的处理Order完全由 Spring Data REST 完成(通过一些小的调整来实现业务约束)。然后手动实现整个支付逻辑,因为该过程不属于 CRUD 类别,因为我们实际上需要实现某些步骤和协议来完成订单。同样,代码在这里,带有一些额外视觉效果的幻灯片可以在speakerdeck.com找到。

于 2013-10-22T11:37:36.157 回答
2

HATEOAS 代表 Hypermedia as the Engine of Application State,是 REST 的关键点之一。基本上,关键点在于使用资源表示上的链接来映射应用程序状态的有效转换。在这种情况下,服务提供商将提供可通过链接访问的应用程序的有效下一个正确状态。Spring HATEOAS 是 Spring 项目,用于帮助在您的资源中构建 Hymeridia 控件。这是一个与 Spring MVC 集成的项目,您可以将其视为构建真正 RESTFull WS 的 Spring MVC 扩展,它非常支持将您的服务形式 CRUD(Richardson 模型中的成熟度级别 2)的级别提高到超媒体感知(Richardson 模型中的成熟度级别 3)。另一方面,Spring Data Rest 是一个非常好的项目,它使用 Spring HATEOAS 作为基本砖,为您提供一个可用作 restfull ws 的存储库层。在 proctis 中,该项目有助于减少将存储库层公开为 restfull 端点的经典 boliporlent 代码。我们可以说 tat 是项目的提议非常不同。使用 Spring HATEOAS,您有一个可用于任何类型的 restfull 端点的框架,使用 spring data rest,您有一个 spring 项目,该项目已经提供了一个端点和一个用于自定义它的框架。

我希望这些反思可以帮助您澄清两个项目之间的区别并更好地理解如何使用其中一个或另一个

于 2016-03-15T21:04:32.567 回答
1

我选择在我的项目中同时使用它们。使用 Spring Data REST 构建了一层控制器。另一层控制器是@RestController (spring-wevmvc)。在这一层中,我使用 Spring HATEOAS 创建自定义页面。(过程是:1.creating Pageable Pageable pageable = new PageRequest 2. 创建新的 Page Page<FooDt> page = new PageImpl<FooDt> 3.creating PagedResourcesPagedResources<Resource<FooDt>> resource = fooAssembler.toResource(page, fooAssembler)在该过程之后使用 Jackson 的 ObjectMapper 返回 json。

我发现将两种技术加载到上下文的解决方案是使用两个 DispatcherServlet。否则,Spring Data Rest 将获得控制权,并且没有使用其他控制器的选项。(这样我的应用程序中有两个域。一个用于 Data Rest,一个用于 webmvc+HATEOS)。

于 2015-02-12T19:42:36.717 回答