Rest 此事务处理方法是否有剩余?
简化了我的用例,但我想创建一个REST服务来处理客户订单 在RPC世界中,我将创建一个RPC端点Rest 此事务处理方法是否有剩余?,rest,Rest,简化了我的用例,但我想创建一个REST服务来处理客户订单 在RPC世界中,我将创建一个RPC端点 OrderProduct(CustomerID, ProductID, Quantity) 这会 创建订单数据库记录 减少产品上的可用库存DB 记录 在工作列表表中创建一个条目以进行盘点 (不是我真正的用例,但比我正在做的更容易理解) 在我的REST方法中,我已经有了客户、产品和工作列表的POST端点,但现在我需要在一个事务中合并对所有3个端点的调用。我的问题是,如果插入到工作列表因任何原因失
OrderProduct(CustomerID, ProductID, Quantity)
这会
- 创建订单数据库记录
- 减少产品上的可用库存DB 记录
- 在工作列表表中创建一个条目以进行盘点
安迪:别担心!考虑概念实体,而不是RPC。当有疑问时,使用GET、POST和可选的PUT和DELETE创建一个新的RESTful实体 你基本上是对的,你会想要一个“ProductOrder”端点,尽管我会称之为“Order”。因为您有一个“Orders”DB记录,所以将其与系统中的其他实体暴露在相同的REST工作流中是有意义的 不重新使用我已经公开的实体端点 没有理由这么做。产品和客户REST端点无法帮助您创建订单,因为订单本身是系统中的概念实体,可能包含跨越复杂生命周期的许多不同步骤(验证订单、跟踪订单状态、减少库存、转移资金)。您的REST客户机不必知道每个步骤,它应该只知道创建订单需要向订单端点发送POST 发明一个实体来处理RPC类型调用(因此只实现POST) 这就是重点。您有一个“订单”实体,您可以在其上“获取”、“发布”、“发布”或“删除”。其想法是,您可以使用get/customers/{id}/orders获得客户的总订单,或者使用/orders/{id}或/customers/{id}/orders/{id}获取特定订单的详细信息,甚至可以使用POST/customers/{id}/orders创建新订单
Order成为一个实体,您可以从中对其应用所有标准RESTful操作 嗯,我不确定问题是什么。。。如果您想创建一个端点,使用post来订购一个结合了这三个方面的产品,那么我认为这是可以接受的。只要确保您有一个回滚过程,以防步骤失败。应该很容易做到这一点。根据您的数据库,您可能可以执行所有这些数据库端操作,在事务中封装触发器和SP,以防出现故障,这样您就可以回滚它。但它的代码方面也是非常可行的。