Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以RESTful方式转换资源_Rest_Design Patterns_Transactions - Fatal编程技术网

以RESTful方式转换资源

以RESTful方式转换资源,rest,design-patterns,transactions,Rest,Design Patterns,Transactions,我目前一直在设计我的端点,使它们既符合REST原则,又能确保底层数据的完整性 我有两个资源,ShadowUser和RealUser,而第一个只有名字、姓氏和电子邮件。 第二个用户有更多的属性,比如一个Id,在这个Id下,真实用户可以在系统中的其他位置被寻址 我的用例是将特定的ShadowUsers转换为真实用户 在我看来,流程似乎很简单: 获取影子用户/get api/ShadowUsers?someProperty=someValue 使用获取的数据/POST api/RealUsers创建

我目前一直在设计我的端点,使它们既符合REST原则,又能确保底层数据的完整性

我有两个资源,
ShadowUser
RealUser
,而第一个只有名字、姓氏和电子邮件。 第二个用户有更多的属性,比如一个Id,在这个Id下,真实用户可以在系统中的其他位置被寻址

我的用例是将特定的
ShadowUser
s转换为真实用户

在我看来,流程似乎很简单:

  • 获取影子用户/get api/ShadowUsers?someProperty=someValue
  • 使用获取的数据/POST api/RealUsers创建新的真实用户
  • 删除影子用户/删除api/ShadowUSers?SomeProperty=someValue
但是,当创建新用户和删除影子用户之间出现问题时,会发生什么情况呢?现在的数据将不一致。 当只有一个用户时,这个例子就更容易了,但问题仍然存在,因为在第2步和第3步之间可能会有一些东西让用户以影子和真实的形式存在

所以问题是,如何以“事务性”的方式做到这一点,在这种情况下,任何东西都是好的、持久化的,或者某些东西出了问题,而底层数据存储中没有任何更改


是否有可以使用的“最佳实践”或“设计模式”

可能是RESTful API批量获取和发布这些真实用户的角色(几周前我问了一个相关问题:)

在API端,不会直接处理已发布的用户,但会将他们排在可靠的消息队列中(例如)。后台进程将订阅整个队列,它将分别处理真实用户和影子用户的创建和删除

使用可靠的消息传递系统的意义在于,您可以实现重试策略。如果在完成工作的过程中中断操作,则可以重试并检测哪些更改仍有待完成任务。

总之,使用这种方法,您可以以事务方式实现该操作