"能力が提供されただけでは、それが良いアイデアにはならない"という警告は、あらかじめ理解しておいてください...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; }
}
サンプルは現実的ではありません。 GetAll()を行うべきではありません。AsQueryable()! – Hylaean
@Hylaean Understood。素晴らしいコメント。しかし、IQueryableは、(現在は基本的に)URL構成可能な問合せ...の遅延実行です...そうですか? –
はい、しかし、それはあなたが何かをすることができるので、あなたがするべきではありませんので、制限する、許可を確認する、最大Takeなどを課すAPIコーダーの責任のままです。 – Hylaean