REST TCC可以处理PUT吗?

时间:2018-04-24 07:13:10

标签: rest api rollback tcc

我们正在开发一个REST API,其中客户端(应用程序)将调用我们的REST API。

客户端(应用程序)将使用回滚功能处理业务逻辑(例如,如果更新“发货”服务[通过]并更新“库存”服务[失败],客户端可以回滚)。

有许多关于TCC [尝试/确认/取消]的在线文章描述了通过POST / DELETE方法保留/取消资源但没有描述如何处理PUT请求(例如,更新“Stock”计数为1并且回滚失败)。

任何人都知道处理PUT回滚的解决方案(因为PUT请求会覆盖原始数据,我们如何回滚到原始数据)?

2 个答案:

答案 0 :(得分:0)

TCC只是一个使用HTTP / REST实现事务行为的概念。它涵盖了如何为交易建模(包括超时和取消)的标准。在此模型中,事务绑定到具有ID的任何类型的资源,因此您可以随时确认或取消它。由于交易超时,您最终可能会获得无效或不再存在的交易。

从事务开始到结束的所有操作都由您决定。但是您需要一些东西来识别交易。由于使用PUT覆盖资源并不能单独创建资源对象,因此您需要一种虚拟资源来实现。

您可以创建资源的新版本(可能使用locking)(entities只是此处的占位符):

  • 开始:PUT /entities/42->链接rel:tcc,href:/entities/42/version/7
  • 确认:PUT application/tcc /entities/42/version/7
  • 取消:DELETE /entities/42/version/7

如果有会话ID,也可以考虑使用一种会话ID,而不是一个版本。

答案 1 :(得分:0)

对于每个TCC模式,MTLDepthStencilDescriptor操作使用confirm作为幂等特性。如果在部分保留被确认而其他保留已过期的情况下实现这种行为,则可以使用PUT操作来模拟回滚行为,以便每个已确认的参与者链接将与另一个cancel请求一起发送。我写了tutorial article,介绍了在Booking系统中使用Java的最小TCC实现。您可以在此处参考实现。