【发布时间】:2012-07-14 15:38:14
【问题描述】:
这是一个后续问题: 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 要求,除了“删除”标志,它并不是真正的数据。
我很想知道是否有人找到了更好的解决方案。
【问题讨论】:
-
this question 的答案建议使用服务器端事务对象,您可以使用单个操作对其进行更新然后提交。当然也有它的缺点。
-
是的,我读过这个关于“事务”对象的建议,其中包含要执行的操作的顺序列表。我觉得我当前的解决方案比虚拟的“事务”对象更接近 REST 哲学,它并没有真正映射到应用程序域。但是,事务对象还有一个额外的好处,就是明确指定每个步骤的执行顺序。
标签: rest transactions