Asp.net restful 网络服务,在同一事务中对多个资源进行操作
Asp.net restful web service, operation on more than one resource in the same transaction
我对Asp.net restful web服务的理解是,对于每个资源,都有相应的get,post,delete,put动词。
但是如果我必须向需要操作多个资源的服务器提交请求怎么办?
例如,对于提交表单,我必须要求服务器创建一个 order
并在同一个请求中创建一个新的 order history
。
对我来说,我将 order
和 an order history
定义为两种不同的资源。
而如果我们按照 ASP.NET MVC Web api restful web 服务,我们将创建两个控制器,一个名为 OrderController,另一个名为 OrderHistoryController。
每个控制器都有“get,post,delete,put”动词。
问题是我们如何确保订单的创建和订单历史的创建在一个事务中?
在创建订单后如何以及何时调用 OrderHistoryController 的 post 方法来创建 OrderHistory?
我目前不确定如何使用 OrderHistory 作为资源来实现这一点。
感谢您的回答。
首先,您可能 不希望在 OrderHistories
中执行 PUT 和 DELETE 操作。能够 change/delete 历史通常不是一个好主意。 (您可能甚至不想对该资源进行 POST 操作。服务器端逻辑应该在任何时候 Order
为 created/modified/deleted 时创建自己的 OrderHistory
对象。)
除此之外...
您不维护跨多个 HTTP 请求的事务(或更一般地说,工作单元)。每个请求本身都是一个孤立的原子工作单元。
所以基本上您在这里要做的是向 Orders
资源发出 POST 以创建一个 Order
对象。此操作中的服务器端逻辑将在同一工作单元内在 OrderHistories
.
中创建任何必要的对应记录
根据您从这些资源中 select 的方式,您需要 return 来自 POST 操作的信息来查询它们。例如,您不太可能想立即通过其自己的标识符查询 OrderHistory
,您可能会通过 Order
ID 进行查询。因此,在创建 Order
对象时,客户端可以根据需要使用 returned 服务器为该对象生成的 ID 来查询 OrderHistories
。
最后,听起来这里的混乱来自错误的观念,即 RESTful 服务基本上是一组传递到数据库表的操作。它不是。消费客户端不应该负责维护事务完整性或关系完整性。服务器端操作保持这一点。
我对Asp.net restful web服务的理解是,对于每个资源,都有相应的get,post,delete,put动词。
但是如果我必须向需要操作多个资源的服务器提交请求怎么办?
例如,对于提交表单,我必须要求服务器创建一个 order
并在同一个请求中创建一个新的 order history
。
对我来说,我将 order
和 an order history
定义为两种不同的资源。
而如果我们按照 ASP.NET MVC Web api restful web 服务,我们将创建两个控制器,一个名为 OrderController,另一个名为 OrderHistoryController。
每个控制器都有“get,post,delete,put”动词。
问题是我们如何确保订单的创建和订单历史的创建在一个事务中? 在创建订单后如何以及何时调用 OrderHistoryController 的 post 方法来创建 OrderHistory?
我目前不确定如何使用 OrderHistory 作为资源来实现这一点。
感谢您的回答。
首先,您可能 不希望在 OrderHistories
中执行 PUT 和 DELETE 操作。能够 change/delete 历史通常不是一个好主意。 (您可能甚至不想对该资源进行 POST 操作。服务器端逻辑应该在任何时候 Order
为 created/modified/deleted 时创建自己的 OrderHistory
对象。)
除此之外...
您不维护跨多个 HTTP 请求的事务(或更一般地说,工作单元)。每个请求本身都是一个孤立的原子工作单元。
所以基本上您在这里要做的是向 Orders
资源发出 POST 以创建一个 Order
对象。此操作中的服务器端逻辑将在同一工作单元内在 OrderHistories
.
根据您从这些资源中 select 的方式,您需要 return 来自 POST 操作的信息来查询它们。例如,您不太可能想立即通过其自己的标识符查询 OrderHistory
,您可能会通过 Order
ID 进行查询。因此,在创建 Order
对象时,客户端可以根据需要使用 returned 服务器为该对象生成的 ID 来查询 OrderHistories
。
最后,听起来这里的混乱来自错误的观念,即 RESTful 服务基本上是一组传递到数据库表的操作。它不是。消费客户端不应该负责维护事务完整性或关系完整性。服务器端操作保持这一点。