Java 如何在RESTfulWeb服务中处理事务?

Java 如何在RESTfulWeb服务中处理事务?,java,rest,transactions,rest-client,Java,Rest,Transactions,Rest Client,REST客户机与流中的服务器一起经历一系列步骤。客户端希望取消流并撤消对该流中的数据所做的所有更改 例如,我们有一个下面的方法。它有三个不同的步骤。前两个是rest调用,第三个是数据插入。现在,如果restCall1(),restCall2()成功,但第三步失败。在前两个步骤中完成的所有操作都应恢复 method(){ restCall1(); // Rest Call to the server, perform DB operations restCall2(); // Re

REST客户机与流中的服务器一起经历一系列步骤。客户端希望取消流并撤消对该流中的数据所做的所有更改

例如,我们有一个下面的方法。它有三个不同的步骤。前两个是rest调用,第三个是数据插入。现在,如果restCall1(),restCall2()成功,但第三步失败。在前两个步骤中完成的所有操作都应恢复

method(){
    restCall1(); // Rest Call to the server, perform DB operations
    restCall2(); // Rest call to the server, perform file operations 
    insertData(); // Perform DB operations
} 

处理此交易问题的最佳做法是什么。一种方法是构建自定义事务框架和回滚步骤。是否有任何框架/工具可以解决此问题

REST客户端只能在REST调用中保持其自身的状态,并且REST客户端的状态与服务器管理的资源之间没有同步。您必须保持对web服务的各种REST调用之间的同步,这违反了无状态通信。如果您打算这样做,您必须维护各种REST调用之间的状态同步,并相应地进行协调

更多

不过,还有一些变通办法。是一种以易于出错和可扩展的方式支持REST事务的模型。
也请看。希望能有所帮助。

我明白你的意思。但这是一个常见的用例。我在想,除了构建我们自己的回滚策略之外,还有什么最佳实践来处理这个问题吗?使用REST处理事务不是最佳实践。但是有一个解决方法。我编辑了我的回答OK,那么如何处理这个问题呢?有什么想法吗?我不完全同意你说的客户不能保持交易状态的说法。让我引述一下:客户机无状态服务器样式源自客户机-服务器,并附加了一个约束,即服务器组件上不允许任何会话状态。从客户端到服务器的每个请求必须包含理解请求所需的所有信息,并且不能利用服务器上存储的任何上下文。会话状态完全保留在客户机上。