我正在使用WebApi实现OData v4服务,我还使用https://damienbod.wordpress.com/2014/08/14/web-api-odata-v4-batching-part-10/中的代码实现了对OData变更集的支持
基本上这是有效的,但现在我想知道在一个变更集中从多个请求修改同一个实体时的正确行为。 考虑这个例子:
Content-ID:1 - POST~ / Entity
- >创建新实体。
Content-ID:2 - PUT~ / Entity($ Entity-ContentID1)/ Company / $ ref?$ id = URI
- >使用ContentID创建从新实体到现有公司的链接。
Content-ID:3 - POST~ / Entity($ Entity-ContentID1)/ ChangeState
- >执行操作以更改新创建的实体的状态。
如果公司已关联,则只能执行ChangetState。如果客户端按此顺序发送所有请求,并且我按顺序执行请求,则一切正常 但根据OData Spec,变更集中的请求无序。
如果客户端在请求2之前发送请求3,预期结果是什么?使用我当前的实现,此更改集将失败,但这是否真的没问题? 我很难理解变更集的正确语义......
答案 0 :(得分:0)
批处理请求作为单个HTTP POST请求提交给服务的批处理终结点,Changeset中的这些请求应该发送到服务并按原始顺序继续。
我认为,规范意味着:Changeset中的请求将按顺序处理,在我们的实验室中,我们处理原始订单,但不同的服务可以使用不同的订单,您不关心的是什么,客户应该不期望对于类似于您的场景的变更集,结果相同,否则它们应该放入不同的变更集,然后结果应该相同。