Spring HATEOAS与Spring Data Rest的比较

46
3个回答

87

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

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

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


1
我要补充的是Spring Data REST明显依赖于Spring HATEOAS: https://github.com/spring-projects/spring-data-rest/blob/123b7a01c20bb64570ba6c37ae68507a5ac60859/spring-data-rest-core/pom.xml - David Riccitelli
4
第二段明确说明了这一点,不是吗?“Spring Data REST使用Spring HATEOAS…” - Oliver Drotbohm
3
是的,绝对没错,我提供了链接。而且我也很喜欢你的屏幕录像 :) - David Riccitelli

2
HATEOAS代表应用状态的超媒体引擎,是REST的关键点之一。基本上,重点在于使用您资源表示中的链接来映射应用程序状态的有效转换。在这种情况下,服务提供商将提供可通过链接访问的应用程序的下一个正确状态。Spring HATEOAS是帮助构建资源中的Hymeridia控件的Spring项目。它是与Spring MVC集成的项目,您可以将其视为用于构建真正的RESTFull WS的Spring MVC扩展,具有非常好的支持,可以将您的服务级别从CRUD(Richardson模型中的2级)提高到Hypermedia感知(Richardson模型中的3级)。另一方面,Spring Data Rest是一个非常好的项目,它使用Spring HATEOAS作为基本组件,为您提供可用作restful ws的存储库层。实际上,该项目有助于减少传统的波利珀伦特代码,以公开您的存储库层作为restful端点。我们可以说这两个项目的目的非常不同。使用Spring HATEOAS,您可以使用任何类型的restful端点框架,而使用spring data rest,您已经拥有一个spring项目,它已经提供了一个端点和一个框架以进行自定义。希望这些反思能够帮助您澄清两个项目之间的区别,并更好地理解如何使用其中一个。

1
我选择将它们都用在我的项目中。其中一层控制器是使用Spring Data REST构建的。另一层控制器是@RestController(spring-wevmvc)。在这一层中,我使用了Spring HATEOAS来创建自定义页面。 (过程如下: 1. 创建Pageable: Pageable pageable = new PageRequest 2. 创建新的Page: Page<FooDt> page = new PageImpl<FooDt> 3. 创建PagedResources: PagedResources<Resource<FooDt>> resource = fooAssembler.toResource(page, fooAssembler) 然后使用Jackson的ObjectMapper返回json。)
我找到的解决方案是在上下文中加载两个DispatcherServlet。 否则,Spring Data Rest将控制一切,没有使用其他控制器的选项。(这样我在我的应用程序中有两个域。一个用于Data Rest,另一个用于Webmvc+HATEOS。)

使用更新版本的SDR,您可以使用@BasePathAwareController@RepositoryRestController将自定义MVC控制器与SDR集成,而不必使用不同的DispatcherServlet - Marc Zampetti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接