我有一个问题,我们的后端使用一个OData-"类似"的处理器,它有一些特殊的功能。它是面向OData_2.0的所以问题是:对于以下请求,最像OData的方法是什么
我们的后端数据模型没有单属性键。但是,如果可能的话,建议使用OData-Like。
首先:我需要通过一个OData请求删除几个对象。我的第一个想法是使用过滤器来定义应该删除哪些对象。但我不确定这是否是正确的方法。
例如:我想删除所有价格大于10.00的item
http://.../<oDataServiceX>/Item?$filter=ItemPrice gt 10.00
第二种:当我想要删除一个不能被单个键属性识别的对象时。如何在经典的OData-Delete-Request-Syntax中定义呢?
下面的odata类似吗?
http://.../<oDataServiceX>/Item(1,54,2) //3 Attributes which define the key for the Item
或者我应该再做一次过滤器?(如果过滤器是一个合适的方法)。
http://.../<oDataServiceX>/Item?$filter=keyAttr1 eq 1 and keyAttr2 eq 54 and keyAttr 3 eq 2
您不能在单个OData查询中删除多个条目,您需要首先检索它们的键,然后发送多个删除请求。有两种方法可以改进此过程:
- 使用OData批处理在单个HTTP调用中发送所有删除请求。
- 使用一些可以使用过滤器模拟删除的库(在内部,它们将发出多个请求,但对于应用程序来说,它看起来像一个调用)。其中一个库是Simple.OData.Client.
Odata v4支持DELETE/entity(key1= ", key2= ")等格式。
然而,对于oData v2,一种选择是使用请求体传递一些数据。DELETE/entity,主体中有数据。文档说明约定是按键删除实体。但是,当我们必须为odata v2服务按多个键进行删除时,采用的就是这种方法。此外,在使用oData v2库实现此功能时,我们必须添加一个路由约定来支持不带键的Delete。