我对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作为资源来实现这一目标。
感谢您的回答。
答案 0 :(得分:4)
对于初学者,可能不希望OrderHistories
中的PUT和DELETE操作。能够改变/删除历史通常不是一个好主意。 (您可能甚至不希望对该资源执行POST操作。服务器端逻辑应在创建/修改/删除OrderHistory
时创建自己的Order
对象。)
除此之外......
您不跨多个HTTP请求维护事务(或更一般地说,一个工作单元)。每个请求本身就是一个孤立的原子工作单元。
基本上,您在此处要做的是向Orders
资源发出POST以创建Order
对象。此操作中的服务器端逻辑将在同一工作单元内,在OrderHistories
中创建任何必要的相应记录。
根据您从这些资源中选择的方式,您将从查询它们所需的POST操作返回信息。例如,您不太可能希望立即通过自己的标识符查询OrderHistory
,您可能需要通过Order
ID进行查询。因此,在创建Order
对象时,客户端可以使用返回的服务器生成的ID来查询OrderHistories
是否需要。
最终,这听起来像混淆是因为RESTful服务基本上是对数据库表的一组传递操作。事实并非如此。消费客户端不应负责维护事务完整性或关系完整性。服务器端操作维护着这一点。