我正在设计带有微服务的照片管理解决方案。
我需要防止用户将不拥有的照片添加到他的相册中。显然,我需要对“相册服务”进行一些验证。但是有关照片所有者的信息在“照片服务”中。
我想到的一个可能的解决方案是将具有相关属性的照片记录复制到“相册服务”。但我真的不喜欢它,因为在这种情况下,“相册服务”将有很多照片记录,而这些照片记录不在任何相册中。
另一个选择是从“相册服务”到“照片服务”的同步调用。但这会破坏微服务范式。
问题是,什么是实施这种验证的好方法。
答案 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或其他通知机制将任何负面结果返回给用户。