为 RESTful 服务实现 HATEOAS

17 Jan 2025 | 3 分钟阅读

HATEOAS

HATEOAS 是 Hypermedia as the Engine of Application State 的缩写。 术语“超媒体”是指包含指向其他形式媒体(如图像、电影和文本)的链接的内容。 它是 REST 应用程序的一个组件,使其与其他网络架构区分开来。 使用 HATEOAS,客户端与网络应用程序交互,其应用程序服务器通过超媒体动态提供信息。

Spring-HATEOAS

Spring-HATEOAS 是 API 的库。 在使用 Spring MVC 时,我们可以使用这些 API 来创建遵循 HATEOAS 原则的 REST 表示。

在 Spring HATEOAS 项目中,我们不需要 Servlet 上下文,也不需要将路径变量连接到基本 URI。 相反,Spring HATEOAS 提供了三种用于创建 URI 的抽象:ContrrollerLinkBuilder、LinkResource Support。 我们可以使用这些抽象来创建与资源表示关联的元数据。

特点

  • 它支持 超媒体 格式,例如 HAL。
  • 它提供 链接构建器 API 以创建指向 MVC 控制器方法的链接。
  • 用于链接、资源表示模型的 模型类

Spring Boot 执行以下任务

  • 配置 HAL 支持
  • 注册对实体链接的支持
  • 连接消息转换器支持

假设我们请求了 localhost:8080/users/1 的 GET 请求,它会返回用户 ID 1 的详细信息。 除此之外,它还会返回一个名为 link 的字段,其中包含所有用户的链接 (localhost:8080/users),以便消费者可以检索所有用户。 这个概念称为 HATEOAS

让我们在项目中实现 HATEOAS。

步骤 1: 打开 pom.xml 并添加 spring-boot-starter-hateoas 依赖项。

步骤 2: 打开 UserResource.java 并复制 retrieveUser() 方法。

步骤 3: 粘贴该方法并进行以下更改

  • 创建 Resource 类的构造函数。

记住导入 org.springframework.hateoas 包的 Resource 类。

  • 使用 ControllerLinkBuilder 类添加链接以检索所有用户。 它使我们能够从方法创建链接。
  • 导入 ControllerLinkBuilder。
  • 使用 ControllerLinkBuilder 类的 linkTo() 方法。 它使用给定控制器类注释的映射作为基础创建新的 ControllerLinkBuilder。

methodOn() 是 DummyInvocationUtils.methodOn(class, Object) 的包装器,以便在使用 ControllerLinkBuilder 的静态导入时可用。

  • 将此链接添加到资源,并在 HATEOAS 中使用该名称。

withRel(String rel) 是使用给定的 rel 创建由当前构建器实例构建的链接的方法。 参数 rel 不得为 null。

  • 返回 resource 而不是用户。
  • 将方法的返回类型更改为 Resource

进行上述更改后,UserResource.java 文件如下所示

UserResource.java

步骤 4: 打开 REST 客户端 Postman 并发送 GET 请求。

Implementing HATEOAS for RESTful Services

在这里我们可以看到它返回用户以及访问所有用户的链接。 现在单击链接并再次发送 GET 请求。 它返回所有用户的列表,如下图所示。

Implementing HATEOAS for RESTful Services