【问题标题】:Spring Data Rest Without HATEOAS没有 HATEOAS 的 Spring Data Rest
【发布时间】:2014-08-16 18:37:32
【问题描述】:

我真的很喜欢 Spring Data Rest 为您编写的所有样板代码,但我宁愿只有一个“常规?”没有所有 HATEOAS 东西的 REST 服务器。主要原因是我在客户端使用 Dojo Toolkit,并且它的所有小部件和存储都设置为返回的 json 只是一个直接的项目数组,没有所有链接和类似的东西。有谁知道如何使用 java config 进行配置,以便我获得为我编写的所有 mvc 代码,但没有所有 HATEOAS 的东西?

【问题讨论】:

  • 您不能将 REST 响应映射到所需的格式吗? (后期评论:D)

标签: spring-data-rest spring-hateoas


【解决方案1】:

在阅读了 Oliver 的评论(我同意)之后,您仍然想从 spring boot 中删除 HATEOAS。

在包含你的 main 方法的类的声明上方添加:

@SpringBootApplication(exclude = RepositoryRestMvcAutoConfiguration.class)

正如 Zack 在 cmets 中指出的那样,您还需要创建一个控制器来公开所需的 REST 方法(findAll、save、findById 等)。

【讨论】:

  • 这会完全停止 SDR。
  • 这应该是被接受的答案。除了这个注解之外,您还需要创建一个控制器来公开所需的 REST 方法(findAll、save、findById 等)。
  • 为此获得不少反对票,任何人都可以在添加此注释并手动创建他们的 REST 方法后解释他们的问题是什么,想知道这现在是否已经过时或者人们只阅读了一半的答案。
【解决方案2】:

所以你想要 REST 没有构成 REST 的东西? :) 我认为尝试改变(阅读:愚蠢)RESTful 服务器以满足设计不佳的客户端库是一个糟糕的开始。但这里是为什么超媒体元素对于这种工具来说是必要的基本原理(除了可能熟悉的general rationale)。

大多数 REST 社区一直对向 Web 公开域对象持批评态度。主要是因为域对象的边界不一定是您想要提供资源的边界。然而,提供脚手架功能的框架(Rails、Grails 等)在过去几年中变得非常流行。因此,Spring Data REST 正在尝试解决这个问题,但同时在宁静方面做一个好公民。

因此,如果您首先从一个普通的数据模型(没有太多关系的对象)开始,只想阅读它们,那么实际上不需要像 Spring Data REST 这样的东西。您需要编写的 Spring 控制器大约是 Spring Data 存储库之上的 10 行代码。当事情变得更具挑战性时,故事会变得更有趣:

  • 如何编写一个没有硬编码 URI 的客户端(如果有,它不是特别安静)?
  • 您如何处理资源之间的关系?您如何让客户创建、更新它们等?
  • 客户端如何发现可用的查询资源?它如何知道要传递的参数等?

如果您对这些问题的回答是:“我的客户不需要那个/没有能力这样做。”那么 Spring Data REST 可能是错误的库。您基本上构建的是基于 HTTP 的 JSON,但那时并没有什么真正让人放松的东西。如果它符合您的目的,这完全没问题,但是将具有明确设计约束的库硬塞进任意不同(尽管显然相似)的东西,实际上想要完全忽略这些设计方面,首先是错误的方法。

【讨论】:

  • 我想在后端使用 HATEOAS,但是我无法理解如何(或者即使)这对于单页 javascript webapp 之类的东西是否有效。 SDR 很有吸引力,因为它自动生成控制器,处理分页/排序,所有这些东西,而使用 JSON over HTTP 就像你描述的那样,我将不得不编写一堆控制器来将内容范围标头和查询参数等内容转换为Spring Data 存储库可以理解的东西。
  • 这很不令人满意,但是你确实回答了我的问题。
  • @gregturn:您是否意识到您的示例不使用 HATEOS 而只是使用硬编码链接? )))
  • 经过考虑,我得出的结论是,SDR 作者在这里过于教条。打个比方,这有点像他们正在制造无线电控制的铲子,并且他们不会创建允许用户移除无线电天线的机制,即使用户抱怨天线确实进入了当他们在没有无线电控制的情况下大量使用它时。不幸的是,如果您建议用户只是采用不同的铲子进行手工工作,那么这个比喻就会失效。对于 Web 服务来说,这真的不是那么简单。
  • REST 并不意味着 HATEOAS 或超媒体。这是一种定义从原始源呈现数据的责任的方法,基本上就是这样。甚至 JSON 也不是遵循 REST 的假设 :)
猜你喜欢
  • 2013-10-31
  • 2014-03-07
  • 2014-07-05
  • 2016-05-23
  • 2018-07-23
  • 2018-11-26
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
相关资源
最近更新 更多