私はODataが好きで、ASP.NETWebAPIによる採用に特に満足しています。
内部アプリケーションが使用するためのサービスをいくつか作成しましたが、公開用には作成していません。主な理由は、ODataのオープンな性質により、悪用に対して「安全」にすることが非常に困難になっているように見えることです。
具体的には、任意のクエリを実行する能力があれば、ユーザーが複雑なクエリを表現して、他のすべてのユーザーのエクスペリエンスが悪くなるまで運用システムに負荷をかける可能性があるのではないかと心配しています。
WebApiコントローラーでは、ODataエンドポイントは次のように公開されます。
public class OrderController
{
[Queryable]
public IQueryable<Orders> Get()
{
// Compose and return the IQueryable<Orders>
}
}
これにより、クエリの作成と実行のプロセスを完全に制御できますが、複雑なIQuerable<T>
インターフェイスを介して制御できます。ユーザーに情報のサブセットを提供するのは簡単です。たとえば、Where
アクセス許可のあるレコードのみを含めるようにaを追加します。
IQueryable<T>
既存のIQuerable<T>
インスタンスをラップして、ユーザーが実行できるクエリに制限を設けることができる実装はありますか?クエリの複雑さを制限することに最も関心がありますが、ユーザーがアクセスできないはずのリソースへの関連付けをトラバースしないようにすることもできます。