REST中的复杂事务处理?

4
这是一个关于REST中事务处理的后续问题:Transactions in REST? 如何实现提供完整事务能力的REST API?
例如,如果客户端想要创建以下操作的事务:
- 创建一个或多个对象。 - 更新一个或多个对象。 - 删除一个或多个对象。
虽然这是一个有效的事务需求,但似乎使用PUT来创建、POST来更新和DELETE来删除违反了REST的要求。
我的当前解决方案涉及将整个系统处理为一个分层对象结构并使用POST操作。例如:
POST /system
{
    "Users" : [
        {
            "ID":"123",
            "name":"bob"   
            // update the user with ID matching 123, 
            // set his name to "bob"
        },
        {
            "ID":"456",
            "delete":"true"
            // trigger a delete on user with ID 456
        }
    ],
    "Products" : [
        {
            "name":"foo"   
            // create a product named "foo" since no ID is provided
        },
    ]
}

到目前为止,这基本满足了大多数REST要求,除了“删除”标志,它不是真正的数据。

我很好奇是否有人找到了更好的解决方案。


1
这个问题的答案建议使用服务器端事务对象,您可以使用单个操作更新它,然后提交。当然,这也有其缺点。 - Jan Gerlinger
是的,我阅读了有关“事务”对象的建议,该对象包含要执行的操作的顺序列表。我觉得我的当前解决方案比虚拟的“事务”对象更接近REST哲学,因为它实际上与应用程序域不匹配。但是,事务对象的附加好处是明确指定每个步骤应该执行的顺序。 - Steve McDuff
1个回答

0
同意Jan的观点,您需要在服务器端进行处理。但是不好维护的代码是一个缺点。我的Restful应用程序经验表明,在RESTFul架构中遵循PUT和DELETE动词相当困难,因为各种浏览器版本对它们的支持非常有限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接