我正在设计一个使用Web服务的Web服务和桌面客户端应用程序。该接口要求您需要能够执行多个操作并一次提交所有操作。这些操作是基本的CRUD操作(创建,读取,更新,删除)。
这是一个关于工作流程的粗略和Car-ified示例:
问题是服务呼叫可能会随着时间的推移而分散。我最初创建了一个REST Web服务,但REST的定义不应该是事务性的。接口必须能够一次性将所有操作提交到数据库(单击“保存”按钮)。
编辑:一个重要的规定是,鉴于上面的示例,服务器上的数据库中必须存在Car才能为其添加席位。在交易中,该汽车应仅对在该交易中工作的人(会话)可用。这限制了在工作流程结束时一次性将所有操作发送到Web服务的能力。
我到目前为止考虑的选项是:
1)使用SOAP(WCF)实现分布式事务,并且仅在GUI上单击“保存”时提交。对于更长的交易生命周期,这是可能/一个好主意吗?
2)创建一个工作单元“服务”,它接受操作并在服务器上的一个事务中执行所有操作。
我的问题是, 1)可能,还是好/坏主意? 2)是一个好主意,是否有任何模式/工具可以跨Web服务(REST或SOAP)实现这一点?或者有不同的方法来处理这个问题吗?
答案 0 :(得分:1)
我会试试这个:
POST /unit-of-work
create with response 200
POST /car
create with response 202
POST /seat
create with response 202
etc.
PUT /unit-of-work
set "execute" bit, or somesuch
在这种情况下,汽车,座椅等在发布时会指定工作单位。当工作单元更新为"完成"时,所有项目都将被执行。
另一种方法是:
POST /car
create with response 202
POST /seat
create with response 202
etc.
POST /unit-of-work response 200
在这种情况下,汽车,座椅等有一套说明他们尚未创建。工作单元应指定属于它的资源,然后后端可以翻转其他资源上的位,以便创建它们。