java - 是否可以在 Spring Boot 应用程序中发现端点参数?

标签 java spring-boot rest microservices service-discovery

我有一个 Spring Boot 应用程序,公开了 REST 请求的一些端点。我正在尝试解耦两个组件(当前直接调用彼此的代码),并且我希望它们相互发出 REST 请求(用于最终的微服务实现)。我知道端点发现可以通过发现服务(例如 Eureka)来完成,但是有没有办法将参数信息从需要它的服务传递给请求它的客户端? 示例:我有一个购物车服务,该服务依赖于有关可购买产品的信息。使用 Eureka(或其他服务发现工具),我可以注册我的服务,以便购物车服务现在知道产品服务。如果产品服务有类似:

@GetMapping("/product")
public Product findById(@RequestParam int id) {
  return products.find(id);
}

我知道要使用此端点来获取 ID 为 3 的产品,购物车服务必须向 http://localhost:1234/product?id=3 发出请求。 ,但是有没有一种方法可以在运行时发现这些参数及其所需的类型?在我的示例中,如果我使用 Eureka,购物车服务会动态了解产品服务的位置,但不会了解其端点将接受的参数。我知道 Spring Boot Actuator 应该提供此信息,但每当我使用它时,端点的 params 字段始终为空。

最佳答案

Is there a way that it can discover these parameters and their required types at run time?

您在运行时真的需要这些信息吗?

因为如果你在开发时需要这个会简单得多。然后你可以使用类似 Swagger 的东西,它将提供服务规范端点。它甚至可以为您的服务生成一个客户端。

但是,如果您确实想要在运行时使用它,那么使用 HATEOAS API 可能会更好。 HATEOAS(超媒体作为应用程序状态引擎)意味着您的 API 是可导航的。这意味着客户端可以按照所提供的链接“抓取”您的 API,就像人类浏览网站一样。它有多大用处,取决于您想要实现的目标。

对此有两种流行的“解决方案”:

  • HAL (超文本应用程序语言)- 仍然是互联网草案
  • JSON-LD (用于链接数据的 JSON)- W3C 标准

Spring Boot 有 HAL 支持,请参阅 spring-boot-starter-hateoas .

关于java - 是否可以在 Spring Boot 应用程序中发现端点参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60494814/

相关文章:

JAVA 和 PHP 在同一台服务器上

spring-mvc - Spring boot 找不到 WebApplicationContext

java - Spring Boot + 视频错误 "video playback aborted due to a network error"

具有数字签名的 Java REST 服务

xml - 使用 WebHttpBinding 设置为基本身份验证的 WCF 进行 POX REST 调用时双重请求

c# - 与身份验证方法作斗争

java - 为什么 ByteBuffer 不为 putDouble 和 getDouble 保留索引?

java - Struts2 Fileupload 在操作类中给出空文件

java - 通过id设置字段?

java - 删除在 Hibernate/Spring Data 中不起作用