供应商要求将rest api暴露为odata,试图理解它在odata世界中是如何工作的,我的假设是数据模型本身作为实体存在,然后通过查询字符串启用过滤器,但odata查询如何工作关系数据模型,例如在客户订单上,我不能简单地加入整个客户和订单表然后返回整个数据集! (或者我可以将它们作为分页数据返回?)有人可能会指出设计odata webapis的最佳实践吗?非常感激!!感谢!!!
答案 0 :(得分:0)
我想,您正在使用Entity Framework作为OData的模型。 所以
return Ok(myDb.Customers)
可以解决多行提取问题。
基本上,使用整个EF模型自动应用$ expand(其他表上的JOIN)和$ filter和$ select。
但是,如果您担心私有数据或安全数据会暴露,您必须应用预过滤。 返回Ok(myDb.Customers.Where(w => w.CustomerId == myCustomerId))
Odata内置设置,以避免它返回说,10.000行。 你可以自由配置所有这些。但是期待一些学习曲线,因为毕竟,您可能需要额外的建模和导航属性优化。
此外,默认情况下,您具有OData控制器,GET / POST / PUT / PATCH / DELETE方法,但您也可能需要定义自定义函数/操作。
在Github上,微软有很多样本。