我正在开发基于云的业务线应用程序。用户可以将文档和其他类型的对象上载到应用程序。用户上传了大量文档,并且存储了数百万个文档。我使用SQL Server。
今天我有一个有点宁静的API,它允许用户传入DocumentSearchQuery实体,在那里他们提供关键字以及请求排序顺序和分页信息。他们得到一个DocumentSearchResult,它实际上是对实际文档的引用的有序集合。
我现在想要将搜索API扩展到除文档之外的其他实体类型,我正在考虑使用OData。但我得到的印象是,如果我使用OData,我将面临几个问题:
我认为我不想走手动解析传入表达式树的路,以确保它们只尝试访问他们有权访问的数据。这看起来很麻烦。
我的问题是:考虑到上述情况,在多租户环境中使用OData是一种合适的协议,客户可以在其中编写自己的客户端来访问实体吗?
答案 0 :(得分:1)
我觉得这里很合适。让我就你认为你将面临的问题给出一些看法:
用户可以查询哪些字段没有内置限制 perf是否依赖于他们是否查询索引字段或 不,或者我将不得不实现我自己的传入OData解析 请求以确保它们仅查询索引字段。 (因为它是一个 多租户应用程序,他们共享物理硬件,速度慢 查询不是真的可以接受,因为那些影响其他客户)
真。但是,您可以检查过滤器中允许的字段以允许操作或拒绝它。
无论我用什么来访问后端数据都需要支持 IQueryable的。我目前正在使用Entity Framework来做到这一点,但是 我将来可能会使用其他东西。这意味着它 可能我需要再次自己解析传入的查询。
是的,EF有一个提供商。这意味着如果您将来使用其他东西,您将需要编写自己的提供商。如果你改变EF可能你早就做出了决定。在这种情况下,我不推荐使用WCF DS。
没有内置支持来限制用户可以访问的数据。一世 需要验证传入的Odata查询以确保它们访问数据 他们实际上有权访问。
对于WCF数据服务,没有任何开箱即用的支持,对吧。但是,这是您需要实施的授权机制的一部分。但是我有一个好消息:使用QueryInterceptors这很容易。简单地拦截查询,并根据用户权限。您必须独立使用您所使用的技术来实现它。
我的回答:考虑到上述情况,WCF数据服务是多租户环境中的合适协议,客户编写自己的客户端访问实体至少更改EF。你应该记住它为你节省的巨大努力。