2013-03-13 12 views
8

"能力が提供されただけでは、それが良いアイデアにはならない"という警告は、あらかじめ理解しておいてください...ODataを使用することも良い考えですか?

見た目からは、OData compliant signatures require you return IQueryableです。例えば


  • Leaky
  • 'Causing Heavy Lifting' 例:

    [Queryable] 
    public IQueryable<MyModel> Get() 
    { 
        return _repo.GetAll().AsQueryable(); 
    } 
    

    はしかし、最近のとそれほど最近でない過去に多くの記事としてのIQueryableを記述:ユーザーがテーブル全体をつかむことを可能にする

  • は、クエリ自体
  • のそれallows for heavy modificationとして&スケーリングの問題も(なぜならその照会可能な性質の)遅延実行の問題を引き起こす可能性がありますセキュリティ

を持って、私の質問は IS:
は能力をあなた感じます上記の問題は、IQueryableとODataのアウトウェイトですか?答えは

、私は人々がについて話すことを期待する:

  • それはなぜ?
  • いつ使用しますか?
  • 一部のWebAPI呼び出しでのみ使用するのか、すべてのWebAPI呼び出しでのみ使用しますか?
  • IEnumarableオブジェクトではない個別のモデルはどうですか?

...そのようなもの。

: 私は上記の項目のためにだけではありません。しかし、ODataがツールボックスのツールではなく「業界標準」として販売されているためです。したがって、これを実装すると、WebAPI呼び出しの戻り値が根本的に変更されます(私が現在働いているところ)。 IResult独自のリターンシグネチャ(非常に便利です)から問題があるように見えるIQueryable(つまり便利なこともあります)に行く必要があります。

IRESULTの例:
最低でも、返品の署名は大幅に変更されます。そして、私はODataを実装するWebAPIコールに "Cインスタンス"を "IQueryable Instance"(意味をなさない)に変更することで作業するつもりはないと言われています。

public interface IResult<C> 
{ 
    [JsonProperty(PropertyName = "hasErrors")] 
    bool HasErrors { get; } 

    [JsonProperty(PropertyName = "errors")] 
    IList<String> Errors { get; } 

    [JsonProperty(PropertyName = "instance")] 
    C Instance { get; set; } 
} 
+0

サンプルは現実的ではありません。 GetAll()を行うべきではありません。AsQueryable()! – Hylaean

+0

@Hylaean Understood。素晴らしいコメント。しかし、IQueryableは、(現在は基本的に)URL構成可能な問合せ...の遅延実行です...そうですか? –

+0

はい、しかし、それはあなたが何かをすることができるので、あなたがするべきではありませんので、制限する、許可を確認する、最大Takeなどを課すAPIコーダーの責任のままです。 – Hylaean

答えて

3

Web APIを使用したOData照会のサポートでは、IQueryable<T>は必要ありません。 IQueryable<T>を使用すると、より速く、より少ないコードでそこにアクセスできます。 IQueryable<T>には、着信するODataクエリをLINQクエリに変換するために必要な抽象概念があります。フレームワークはすでにそれを定義しており、Entityframework、NHibernate、Linq2Objects、RavenDB、Linq2ODataなどのさまざまなバックエンドにわたる豊富なサポートがあります.Web APIを使用してIQueryable<T>を豊富にサポートすることにしました。合意した、IQueryable<T>は、巨大なインターフェースであり、OData照会に必要なものよりもはるかに多くを公開します。しかし、それは無料で来るものです:)。

つまり、非IQueryableのケースではODataQueryOptions<T>でサポートされています。これについての私のブログの投稿を確認してくださいhere

また、ODataのクエリセマンティクスをODataと混同しています。豊富なクエリのサポートは、ODataの一部に過ぎません。 ODataはHTTP上に構築され、

  • のような便利な機能を備えています。RESTとHTTPのベストプラクティスの両方を十分に考慮したアプリケーションです。
  • jsonとxmlのリソースの明確な表現。
  • $ metadata。
  • 標準的な関係の記述方法。
  • 投影、フィルタリング、クライアント駆動のページング、およびサーバー駆動のページング(次のページのリンク)をサポートする豊富なクエリ。
  • ビッグecosystem
関連する問題