Spring HATEOAS 集成示例

Spring HATEOAS integration example

我希望开发 Spring MVC 与 HATEOAS 的集成。我在网上搜索过,但没有找到任何可以理解 HATEOAS 概念的工作示例。

我只找到了this resource,它本身代码很多,很难看懂。是否提供完整的工作样本?

this repository. A more advanced showcase can be found in Spring RESTBucks 中有一个非常基本的示例。

这里的示例 EchoService 逐步描述并在代码中进行了解释。它正在使用 Spring Boot HATEOAS 并显示带有 TestRestTemplate 的示例 Spock 测试。

HATEOAS 意味着(至少在我看来 :-) )您将 HTTP 资源视为状态机,这意味着它可以根据其(系统)内部状态进行更改。

最常见的示例是将银行帐户作为一种资源。访问资源(帐户)returns 关于它的各种信息和 link 可以对其执行的操作。这些操作(因此可用 links)取决于帐户的状态。如果用户有钱,那么 links 可以是 { "deposit": "deposit-url", "withdraw": "withdraw-url" }。当用户账户上没有钱时,返回的 links(可用操作)可能是 { "deposit": "deposit-url" }。因此可用列表 operations/actions/links 会有所不同,具体取决于资源的状态。

另一个常见的例子是根据用户的 role/permissions 使用不同的菜单项。在服务器端生成整个页面的应用程序中,您可以通过简单检查为页面模板中的不同操作生成 links:if (isAdmin(currentUser)) { {generate secret link} } else { ... }。但是,当使用 REST 服务时,大多数客户端都是 JavaScript 应用程序,您无法在其中进行任何权限检查。所以这里 HATEOAS 通过返回菜单操作 (links) 来提供帮助,具体取决于用户在服务器端的 role/permission,REST 客户端不必担心它。

您可以查看此示例 Spring/Boot HATEOAS 项目:https://github.com/opencredo/spring-hateoas-sample and some explanation in the related blog post: Implementing HAL hypermedia REST API using Spring HATEOAS

示例显示了一个简单但 not-so-trivial API。

API 表示一个虚构的图书馆,其中包含与作者和出版商相关的图书目录。

所有资源都包含链接示例。 GET 书还展示了如何 return 不同级别的详细信息,嵌入或链接相关资源。

除了所有资源的 GET 示例之外,它还包括其他 "command" 端点,例如将书籍添加到 collection、借阅和 return 阅读书籍。