7

在 oData 4.0 中,经常提到操作和功能。我无法理解它们是什么以及它们有何不同。功能是否与我们在任何编程语言或其他语言中的功能相同?什么是行动?以及两者有何不同。谢谢你的帮助。

4

4 回答 4

11

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

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

于 2016-06-29T12:55:06.397 回答
5

从Spec复制的简短说明:

操作是由 OData 服务公开的操作,在调用时可能会产生副作用。动作可以返回数据,但不能进一步由额外的路径段组成。

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

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

  • 实体集 -Products
  • 钥匙 -1
  • 导航 -Supplier
于 2016-06-29T10:48:23.083 回答
1

似乎更好,您应该了解一般的“副作用”,这与 OData 无关,但如果您想弄乱 OData,您需要知道!

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

与此相反的是上述定义中的“可能有副作用”的动作。意味着该操作的执行可能会更改数据库内容,如果您多次执行它,您每次可能会得到不同的结果。例如。对某个实体的 DELETE 命令。第一次调用可能会成功,但每次后续调用都会以“未找到”的形式退出。所以这个调用有一个副作用,它删除了一个对象。像 PATCH 这样的变异动作也是如此,对象不是被删除而是被修改。所以它有副作用。

于 2018-03-13T08:49:00.683 回答
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)
于 2016-06-29T07:01:58.527 回答