在 oData 4.0 中,经常提到操作和功能。我无法理解它们是什么以及它们有何不同。功能是否与我们在任何编程语言或其他语言中的功能相同?什么是行动?以及两者有何不同。谢谢你的帮助。
4 回答
操作- 可用于对实体执行 CRUD 操作。这意味着,如果默认操作 (POST/PUT/DELETE) 不支持您的要求,您可以使用自定义操作创建、更新、删除实体。您还可以使用自定义操作从多个实体中获取复杂类型的数据。操作类似于 SQL 中的存储过程,它允许 SELECT 以及 DML 查询。
函数- 理想情况下,您应该只使用函数来获取数据,而不是用于数据修改。这些类似于 SQL 中只允许 SELECT 查询的函数。
似乎更好,您应该了解一般的“副作用”,这与 OData 无关,但如果您想弄乱 OData,您需要知道!
每个计算机系统都有一种“状态”,其中一部分是可以从外部观察到的(例如,通过一些查询)。上述 OData 定义中的函数“没有副作用”,因为它不会更改数据库的状态,例如对某些单元格内容的 GET 请求。您可以一遍又一遍地重复它,每次都会得到相同的结果。
与此相反的是上述定义中的“可能有副作用”的动作。意味着该操作的执行可能会更改数据库内容,如果您多次执行它,您每次可能会得到不同的结果。例如。对某个实体的 DELETE 命令。第一次调用可能会成功,但每次后续调用都会以“未找到”的形式退出。所以这个调用有一个副作用,它删除了一个对象。像 PATCH 这样的变异动作也是如此,对象不是被删除而是被修改。所以它有副作用。
从 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)