HATEOAS 和微服务

HATEOAS and Microservices

我在了解 HATEOAS 和微服务如何共存时遇到了一些严重的问题。

举个例子:

假设我们有一个购物车资源。 我们需要将产品的快照放入其中,例如商品编号、商品价格;将商品添加到购物车时的当前价格快照,可能还有一些其他值。 实际用例无关紧要,只是为了了解手头的问题。

当我之前一直在做 HATEOAS 时,我会在 link 到产品的购物车资源或 url link 的购物车资源中放一个 link ] 到特定产品。

这样,客户端仍然可以不知道资源URL的。

但在微服务世界中,一个服务应该不知道其他服务。据我所知。

那么他们怎么能一起工作呢?

我对微服务的解释是,它们永远不能 link 除了自己之外的任何其他东西,这几乎是 Self link.

我在其他地方发现了同样的问题,例如 https://groups.google.com/forum/#!topic/api-craft/YRkLFVY_zFc

使用像 "macro services" 这样将所有这些编织在一起的解决方案。 这似乎不是解决问题的干净方法。

[编辑]

我发现了一些关于该主题的更多有用信息: https://github.com/Netflix/eureka https://github.com/RestExpress/HyperExpress

使用一些工具来增加 link 资源似乎不错,但这让我想到,决定 link 资源应该属于什么的逻辑在哪里? 在公开资源的服务中? 在中央服务注册表中?

But in the microservice world, a service should have no knowledge of other services. AFAIK.

我认为这是你困惑的根源。我的理解是,出于软件开发的目的,服务不应依赖 带外信息 与其他服务通信。这意味着一个服务不应该知道任何关于它的同行的内部信息,但是说它不应该知道其他服务是没有任何意义的。这与HATEOAS并不冲突,实际上它们是相辅相成的。

链接到其他服务没有问题。您还可以如何从微服务构建宏服务?依赖带外信息存在问题。

Mediation, Orchestration and Choreography of services is not limited to SOA but equally applies to Microservices architecture as well.

意味着微服务可以与其他微服务通信以传递或获取一些信息。 例如,微服务也需要依赖容器堆栈中的有状态数据存储。所以它需要知道 (RESTFull) 数据库的 API/interface..

HATEOAS primarily provides interfacing and communication design patterns so you are free from say fixed interface definition language like WSDL or Swagger.

虽然 REST (HTTP) 确实变得最著名,但有时理所当然地认为微服务将作为 REST API,但事实并非如此。

The beauty of microservices is that they do not restrict you to one or two communication patterns, its independent. There is no standard.

例如反应式微服务强调使用消息驱动的通信模式,并成为相互位置透明的。但这并不意味着不知道要传递或检索的其他微服务的动词和有效负载。

同样,我们可以将基于 HATEOAS 的通信模式内置到我们的微服务架构中,以便永远 changing/upgrading 微服务接口完全灵活。但总的来说,您仍然需要知道要与之通信的微服务的位置。 因此 service-discovery 和服务注册表模式存在于微服务世界中;它们同样适用于 HATEOAS 架构。 我们的微服务容器可以根据负载生存和死亡(横向扩展和收缩);我们的客户经常需要知道要使用的微服务的活动位置。