如何在 Spring-Boot 微服务项目中实施 HATEOAS

How to implement HATEOAS in a Spring-Boot microservices project

最近我一直在尝试使用 Java Spring Boot 框架构建 微服务。我目前有一个工作的微服务系统,其中包含多个资源(它们都有自己的独立服务),例如:图书服务和评论服务。 每个服务都有自己的 RestController 并使用 MongoRepository 与其数据库进行交互。

应用程序的最终用户(网络客户端)不会与这些独立服务本身进行通信,而是与它们之上的 API 进行通信。

这 API 调用图书和评论服务,合并数据并 returns 返回给客户端。请注意,所有通信都使用 ResponseEntity<T>T 可以是 BookReviewIterable<Book> 等,..)

但在阅读了一段时间后,我了解了 HATEOAS,我想在我的微服务设置中使用它。现在我的问题是,实现它的最佳方法是什么?

我发现的一些示例扩展了实体 classes(在我的例子中是 Book 实体或带有 Spring 的 ResourceSupport class).但这会导致错误,因为我的实体有一个 ID 参数,并且 getId() 方法与 ResourceSupport class 的 getId() 方法冲突。

其他示例包含使用 @RestResource 注释的 MongoRepository,而不是使用 Controller

所以我的问题是,在这种情况下,实施 HATEOAS 的最佳方式是什么?例如当 Book 服务添加链接时(HATEOAS 方式),上面的 API 如何更改这些链接?由于最终用户只会调用此 API,而 API 只会处理这些请求并将其委托给必要的子服务。

如果您想安装 HATEOAS 但不想使用 spring-data-rest,您仍然可以退回到 Spring HATEOAS

它由 spring-data-rest 内部使用,使您能够创建 HATEOAS 风格的 REST API。