SpringHateOAS:微服务架构是否可行?

SpringHateOAS:微服务架构是否可行?,spring,rest,microservices,spring-hateoas,Spring,Rest,Microservices,Spring Hateoas,我知道这个问题已经被问过了,但我找不到满意的答案。 我开始更深入地构建一个真正的restful api,我喜欢它使用链接进行解耦的优点。因此,我构建了我的第一个服务(使用java/spring),它工作得很好(虽然我在寻找正确的格式方面有点困难,但这是另一个问题)。在这第一步之后,我想到了我的真实世界用例。微型服务。高度解耦的个人服务。所以我在我之前的场景中做了一个测试,我遇到了一些问题或疑问 场景: 我的设置包括一个反向代理(Traefik,用作服务发现和api网关)和2个微服务。此外,还有一

我知道这个问题已经被问过了,但我找不到满意的答案。 我开始更深入地构建一个真正的restful api,我喜欢它使用链接进行解耦的优点。因此,我构建了我的第一个服务(使用java/spring),它工作得很好(虽然我在寻找正确的格式方面有点困难,但这是另一个问题)。在这第一步之后,我想到了我的真实世界用例。微型服务。高度解耦的个人服务。所以我在我之前的场景中做了一个测试,我遇到了一些问题或疑问

场景:

我的设置包括一个反向代理(Traefik,用作服务发现和api网关)和2个微服务。此外,还有一个openid连接安全层。我的发球是球员发球和团队发球

因此,在验证之后,我有一个带有userId的访问令牌,我可以调用
player/userId
来获取玩家信息,调用
teams?playerId=userId
来获取玩家的所有团队

在我看来,我会在两个回答中都将相反的服务联系起来。
player/userId
将链接到
teams?playerId=userId
,反之亦然

问题:

除了通过硬编码url链接外,我还没有找到解决方案。但这带来了很多缺点,我无法想象这是一个在现实世界应用中使用的解决方案。我的意思是,想象一下你的api有点高级,你必须链接到10个资源。如果某些东西发生了变化,您必须重构并重新部署它们。 除了同步问题,在这种情况下如何处理状态。我的意思是,剩下的都是州转移。因此,如果球员不在任何球队,我不会提供球员到球队的链接服务。当然,我可以将团队ID作为属性添加到玩家,以决定是否包含链接。但这再次增加了服务之间的耦合。
我越是潜入水中,我发现的障碍就越多,我就要继续我的春季休息,忽略休息的核心,这对我来说是一个遗憾

微服务架构是否可行

REST接口的设计目的是高效地进行大粒度超媒体数据传输,针对Web的常见情况进行优化,但导致的接口对于其他形式的体系结构交互不是最佳的

REST适用于跨多个组织的基于网络的长期应用程序

我现在还不清楚“微服务”是否会进入“网络”的最佳状态。通常,我们不会尝试与另一家公司控制的微服务进行通信,我们通常不会从缓存、按需编码或其他rest体系结构约束中获得很多好处。使用通用组件在解决方案中的不同微服务之间交换信息对我们来说有多重要?等等

如果某些东西发生了变化,您必须重构并重新部署它们

对,;如果这对我们来说是个问题,那么我们需要投入更多的前期工作来定义两者之间的稳定接口。(事实上,我们使用的“链接”在这方面并不特别——如果这两种东西要相互交流,那么它们就需要使用一种通用语言;如果这种通用语言需要随着时间的推移(很可能)发展,那么你就需要将这些能力融入其中)

如果你想随着时间的推移而改变,那么你必须为之计划

如果您想要向后/向前兼容,那么您必须为此制定计划

您的标识符不需要是静态的-有很多可能的方法延迟标识符的定义;最明显的是,您可以使用另一个标识符来查找所需的标识符,或用于计算该标识符的公式,或在任何情况下

想想谷歌是如何工作的——他们使用的链接一直在变化,但这并不重要,因为协议(刷新书签搜索表单,在“一个”字段中输入文本,单击按钮)20年来没有改变。接口是稳定的(即使标识符的基本拼写是不稳定的),这就足够了