Rest 此事务处理方法是否有剩余?

Rest 此事务处理方法是否有剩余?,rest,Rest,简化了我的用例,但我想创建一个REST服务来处理客户订单 在RPC世界中,我将创建一个RPC端点 OrderProduct(CustomerID, ProductID, Quantity) 这会 创建订单数据库记录 减少产品上的可用库存DB 记录 在工作列表表中创建一个条目以进行盘点 (不是我真正的用例,但比我正在做的更容易理解) 在我的REST方法中,我已经有了客户、产品和工作列表的POST端点,但现在我需要在一个事务中合并对所有3个端点的调用。我的问题是,如果插入到工作列表因任何原因失

简化了我的用例,但我想创建一个REST服务来处理客户订单

在RPC世界中,我将创建一个RPC端点

OrderProduct(CustomerID, ProductID, Quantity)
这会

  • 创建订单数据库记录
  • 减少产品上的可用库存DB 记录
  • 在工作列表表中创建一个条目以进行盘点
(不是我真正的用例,但比我正在做的更容易理解)

在我的REST方法中,我已经有了客户、产品和工作列表的POST端点,但现在我需要在一个事务中合并对所有3个端点的调用。我的问题是,如果插入到工作列表因任何原因失败,是否能够回滚

因此,创建仅公开POST的ProductOrder端点是否合适

在处理POST的服务中,我将创建一个DB事务,并直接与数据库交互,以更新我关心的三个表

我很紧张

  • 不重新使用我已经公开的实体端点
  • 发明一个实体只是为了处理RPC类型调用(因此只有 (执行员额)
  • 谢谢,
    安迪:别担心!考虑概念实体,而不是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,以防出现故障,这样您就可以回滚它。但它的代码方面也是非常可行的。