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

时间:2019-03-28 10:07:29

标签: architecture microservices software-design

我正在设计带有微服务的照片管理解决方案。

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

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

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

另一个选择是从“相册服务”到“照片服务”的同步调用。但这会破坏微服务范式。

问题是,什么是实施这种验证的好方法。

1 个答案:

答案 0 :(得分: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或其他通知机制将任何负面结果返回给用户。