繁体   English   中英

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

[英]oData v4 what are Functions and Actions in simple terms?

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

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

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

规范中复制的简短说明:

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

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

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

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

根据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)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM