我正在开发基于云的业务线应用程序。用户可以将文档和其他类型的对象上传到应用程序。用户上传了相当多的文档,总共存储了数百万个文档。我使用 SQL Server。
今天我有一个有点安静的 API,它允许用户传入一个 DocumentSearchQuery 实体,他们在其中提供关键字以及请求排序顺序和分页信息。他们返回一个 DocumentSearchResult,它本质上是对实际文档的引用的排序集合。
我现在想将搜索 API 扩展到文档以外的其他实体类型,并且我正在研究为此使用 OData。但我的印象是,如果我使用 OData,我将面临几个问题:
- 用户可以查询的字段没有内置限制,这意味着性能将取决于他们是否查询索引字段,或者我必须自己解析传入的 OData 请求以确保它们只查询索引字段. (因为它是一个多租户应用程序并且它们共享物理硬件,所以慢查询是不可接受的,因为这会影响其他客户)
- 无论我使用什么来访问后端数据都需要支持 IQueryable。我目前正在使用执行此操作的实体框架,但将来我可能会使用其他东西。这意味着我可能需要再次自己解析传入的查询。
- 没有内置支持限制用户可以访问的数据。我需要验证传入的 Odata 查询,以确保他们访问他们实际上有权访问的数据。
我认为我不想走手动解析传入表达式树的道路,以确保他们只尝试访问他们有权访问的数据。这似乎很麻烦。
我的问题是:考虑到上述情况,在客户编写自己的客户端访问实体的多租户环境中使用 OData 是否是一种合适的协议?