微服务中的输入验证取决于来自其他服务的数据

问题描述 投票:1回答:1

我正在使用微服务设计照片管理解决方案。

  • 一项服务负责跟踪特定用户拥有的单张照片的数据。
  • 另一项服务负责相册。

我需要阻止用户将未拥有的照片添加到他的相册中。很明显,我需要对“专辑服务”进行一些验证。但有关照片所有者的信息是“照片服务”。

我想到的一个可能的解决方案是将具有相关属性的照片记录复制到“专辑服务”。但我真的不喜欢它,因为在这种情况下,“专辑服务”会有很多照片记录,而不是任何专辑。

另一种选择是从“专辑服务”到“照片服务”的同步呼叫。但这会破坏微服务范式。

问题是,实施此类验证的好方法是什么。

architecture microservices software-design
1个回答
1
投票

ID为9876的用户想要将ID为1234的照片添加到相册333:

PUT /albums/333/photos/1234
user-id:9876 (in header)

相册服务调用照片服务以验证照片属于用户:

GET /photos/9876/1234 <- a bit contrived
404 Not Found

未找到表示相册服务中的照片不属于用户,因此它向调用者返回403(并且不更新相册)。

如你所说,这可能会打破微服务范式,但你已经将问题定为实时验证问题。实时问题需要实时解决方案。

如果没有期望进行实时验证,那么您可以允许用户发出将照片添加到相册的请求,然后可能稍后通过消息队列进行实际验证操作,任何否定结果通过websockets或其他通知机制返回给用户。

© www.soinside.com 2019 - 2024. All rights reserved.