我目前一直在设计我的端点,以便它们符合REST原则,同时也确保底层数据的完整性。
我有两个资源ShadowUser
和RealUser
,而第一个只有名字,姓氏和电子邮件。
第二个用户拥有更多属性,例如Id,在该ID下,真实用户可以在系统中的其他位置进行寻址。
我的用例是将特定ShadowUser
转换为真实用户。
在我脑海中,流程似乎很简单:
但是当新用户的创建和阴影用户的删除之间出现问题时会发生什么?现在数据不一致。 当只有一个用户时,该示例更加容易,但问题保持不变,因为步骤2和3之间可能存在某些问题,使用户以阴影和真实存在。
所以问题是,如何以“事务”的方式完成这项工作,其中任何事情都是好的,持续存在或出现问题并且基础数据存储中没有任何变化?
是否有可以使用的“最佳实践”或“设计模式”?
答案 0 :(得分:-1)
也许RESTful API的角色批量收集和发布这些真实用户(我几周前就一个相关问题问了一个问题:Updating RESTful resources against aggregate roots only)。
在API方面,POSTed用户不会被直接处理,但会被排入可靠的消息队列(例如RabbitMQ)。后台进程将订阅整个队列,它将分别处理真实和影子用户的创建和删除。
使用可靠的消息传递系统的关键是您可以实施重试策略。如果操作在完成其工作的过程中被中断,您可以重试它并检测哪些更改仍未完成,以完成任务。
总之,使用这种方法,您可以以事务方式实现该操作。