oData v4简单来说函数和操作是什么?

时间:2016-06-29 03:14:24

标签: .net asp.net-web-api asp.net-web-api2 odata odata-v4

在oData 4.0中经常引用操作和功能。我无法得到它们是什么以及它们是如何不同的。功能是否与我们在任何编程语言中的功能相同?什么是行动?以及两者是如何不同的。谢谢你的帮助。

4 个答案:

答案 0 :(得分:5)

操作 - 可用于对实体执行CRUD操作。这意味着,如果默认操作(POST / PUT / DELETE)不支持您的要求,您可以使用自定义操作创建,更新,删除实体。您还可以使用自定义操作从复杂类型的多个实体中获取数据。操作类似于SQL中的存储过程,它允许SELECT和DML查询。

功能 - 理想情况下,您应该使用函数来获取数据而不是数据修改。这些与SQL中的函数类似,只允许SELECT查询。

答案 1 :(得分:2)

Spec

复制的简短说明

Actions 是由OData服务公开的操作,在调用时可能会产生副作用。动作可以返回数据,但不能再用其他路径段组成。

Functions 是由OData服务公开的操作,必须返回数据并且必须没有可观察到的副作用。

路径段
OData URL的每个单独部分都是路径段。 URI /Products(1)/Supplier有三个路径段。

  • 实体集 - Products
  • 键 - 1
  • 导航 - Supplier

答案 2 :(得分:0)

根据OData.org中的规范,它们是操作,差异是否有副作用。

在WebAPI / OData的实现中,您可以参考以下文档:

http://odata.github.io/WebApi/#04-06-function-parameter-support

http://odata.github.io/WebApi/#04-07-action-parameter-support

你可以看到签名很明显:

行动:

[HttpPost]
public IHttpActionResult PrimitiveAction(ODataActionParameters parameters)

功能:

[HttpGet]
public string ComplexFunction([FromODataUri]Address c1, [FromODataUri]IEnumerable<Address> c2)

答案 3 :(得分:0)

似乎你应该更好地了解一般的“副作用”,这不是OData相关的,但如果你想弄乱OData,你需要知道!

每个计算机系统都有一种“状态”,其中一部分是从外部可以观察到的(例如通过某种查询)。来自OData定义的函数“没有副作用”,因为它不会改变数据库的状态,例如: G。一些单元格内容的GET请求。你可以一遍又一遍地重复它,每次都会得到相同的结果。

与此相反,上述定义的行为“可能有副作用”。表示操作的执行可能会更改数据库内容,如果您多次执行该操作,则每次都可能获得不同的结果。 E. g。某个实体的DELETE命令。第一次通话可能会成功,但每次连续通话都会以“未找到”为止。所以这个调用有副作用,它会删除一个对象。对于像PATCH这样的变异动作也是如此,该对象不会被删除而是被修改。所以它有副作用。