根据来自另一个服务的数据在微服务中进行输入验证
Input validation in microservices depending on data from another service
我正在使用微服务设计照片管理解决方案。
- 一个服务负责跟踪特定用户拥有的单张照片数据。
- 另一个服务负责相册。
我需要阻止用户将不属于自己的照片添加到他的相册中。很明显,我需要对 "album service" 进行一些验证。但是有关照片所有者的信息在 "photo service".
中
我想到的一个可能的解决方案是将具有相关属性的照片记录复制到"album service"。但是我不太喜欢,因为这样的话"album service"会有很多相册里没有的照片记录。
另一种选择是从 "album service" 到 "photo service" 的同步调用。但这会打破微服务范式。
问题是,实施此类验证的好方法是什么。
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
“未找到”向相册服务表明照片不属于用户,因此它 returns 向调用者发送 403(并且不更新相册)。
如您所说,这可能会破坏微服务范式,但您已将问题定义为实时验证问题。实时问题需要实时解决方案。
如果不期望实时验证,那么您可以让用户发出将照片添加到相册的请求,然后通过消息队列在稍后进行实际验证操作,任何负面结果都会通过 websockets 或其他通知机制返回给用户。
我正在使用微服务设计照片管理解决方案。
- 一个服务负责跟踪特定用户拥有的单张照片数据。
- 另一个服务负责相册。
我需要阻止用户将不属于自己的照片添加到他的相册中。很明显,我需要对 "album service" 进行一些验证。但是有关照片所有者的信息在 "photo service".
中我想到的一个可能的解决方案是将具有相关属性的照片记录复制到"album service"。但是我不太喜欢,因为这样的话"album service"会有很多相册里没有的照片记录。
另一种选择是从 "album service" 到 "photo service" 的同步调用。但这会打破微服务范式。
问题是,实施此类验证的好方法是什么。
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
“未找到”向相册服务表明照片不属于用户,因此它 returns 向调用者发送 403(并且不更新相册)。
如您所说,这可能会破坏微服务范式,但您已将问题定义为实时验证问题。实时问题需要实时解决方案。
如果不期望实时验证,那么您可以让用户发出将照片添加到相册的请求,然后通过消息队列在稍后进行实际验证操作,任何负面结果都会通过 websockets 或其他通知机制返回给用户。