在oData 4.0中经常引用操作和功能。我无法得到它们是什么以及它们是如何不同的。功能是否与我们在任何编程语言中的功能相同?什么是行动?以及两者是如何不同的。谢谢你的帮助。
答案 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这样的变异动作也是如此,该对象不会被删除而是被修改。所以它有副作用。