WCFデータサービス(OData)対ASP.NET Web API?ハイパーメディア?


12

RESTサービスとさまざまなクライアント(Silverlight、iOS、Windows Phone 7など)で構成される分散アプリケーションを設計しています。WCF Data Services(OData)を使用してRESTサービスを実装することを決定する準備ができていましたが、MVC 4 Web APIによってその決定に疑問が生じました。

ODataで気に入ったのは、無料で入手できるURIクエリ機能とハイパーメディア機能です。私が嫌いなのは、ODataペイロードの冗長性です。多くの不要なキャラクターがネットワーク上に来ます。

私がWeb APIで気に入っているのは、ペイロードがはるかに簡潔であり、ODataのURIクエリ機能を備えていることですが、ハイパーメディアが欠けているようです(少なくとも、箱から出して)。私の上司もWeb APIを推し進めています。「Microsoftの力がそれを後押ししており、ODataが勢いを増していないからです」。

そこで、2つの質問があります。

1)誰でもWeb APIとODataのバッキング/トラクションについてコメントできますか?

2)Web APIは、リリース時間までにハイパーメディアをネイティブにサポートすることを期待されていますか、または検討すべき市販の実装または例がありますか?

ありがとう!


2
これまでの質問1に対する適切な回答。誰も私の2番目の質問に対する洞察を持っていますか?
レイモンドサルトレリ

ちょっと見逃しましたが、この言葉は見ましたが、技術的な意味でハイパーメディアとは何なのかわかりません。リンクはありますか?
ワイアットバーネット

2
基本的に、RESTのコンテキストでのハイパーメディアは「遅延負荷」を意味します。たとえば、RESTサービスへのリクエストが別のオブジェクトへの参照を持つオブジェクトを返す場合、その参照は、参照オブジェクト全体を含めるのではなく、XMLドキュメント内のリンクとして表されます。参照されたオブジェクトに関する情報が必要な場合は、単にリンクをたどってください。dret.net/lectures/ppos-spring11/reading/…–
レイモンド

1
RESTに関するハイパーメディアのもう1つの優れた説明。timelessrepo.com/haters-gonna-hateoas
レイモンドサルトレリ

回答:


2

Web APIはodataを実行します。Scott Guthrieのブログ投稿を参照してください。具体的には:

クエリ構成:Web APIを使用すると、OData URL規則によるクエリを簡単にサポートできます。Web APIからIQueryableのタイプを返すと、フレームワークは自動的にODataクエリサポートを提供し、ページングとソートを簡単に実装できるようにします。

また、多くの場合、同じクラスが従来のWCFクラスとWeb APIクラスになる可能性があると思いますが、これらは相互に排他的ではありません。


2

Web APIは、httpプロトコルをよりネイティブに活用します。Odataは、多くの大手企業が採用しているオープンスタンダードです。私は、Odataをいじくり回し、最近Web APIを発見し、いくつかの調査を行った経験からしか話せません。

ODataは実際の標準なので、クールです。データベースを簡単に作成し、HTTPで公開できます。これは、設定なしでテーブル構造をトラバースできることを意味します(大まかに言って)。いくつかの軽いLINQを含むことができるURLを介してクエリを実行することもできます。

/products/orders/[put some linq-ish query here]

これは間違いなく良いか悪いです。認証は標準であり、構築されています。

Web APIは、私の観点からはより興味深いものです。HTTP機能(エラーメッセージなど)を利用し、真のRESTfulリクエストに対してもう少し「ネイティブ」です。私は実際にあまり遊んでいませんでした。しかし、私は読み返し、MVCとWeb APIがいつか「結婚」するかもしれないという「聞いた」ことがあります。

ODataで遊んでいたとき、ストアドプロシージャを作成し、エンティティサーフェスにマッピングし、強い戻り値の型を構成してから、URLリクエストとBANGにフックしました。それはかなり簡単で、必要なものを正確に入手できました。

結論として、 私はWCF APIを詳細に扱う機会はありませんでしたが、RESTへのより純粋なアプローチであるため、クライアント開発に進む方法だと思います。多かれ少なかれ「ストレート」な往復呼び出しを行い、「モデルの表示」を取得する場合、よりネイティブなインタラクションが提供されます。

一方。クライアントとのやり取りに基づいてデータに対して複雑な(っぽい)クエリを作成し、クエリロジックを「構築」してパラメータとして渡したい場合、Odataを使用できます。

私がそれを見る方法は、構造形式(テーブル/関係構造を意味する)でデータを公開し、クライアントから直接クエリする必要がある場合です、Odataは最適に動作します。また、「その他」が(適切な認証などを使用して)データにアクセスできるようにするのにも適しているため、ODataプロトコルに準拠しています。

URL(/ products / orders / 22を指定し、「隠された」マネージコードとデータ構造から複雑な「結果セット」を作成するRESTfulリクエストが必要で、HTTP応答メッセージも役立つ場合があります。 Web APIがおそらく最善の策でしょう。

繰り返しになりますが、これはすべて研究とおもちゃです。実稼働/本格的なアプリシナリオのいずれにも実装していません。彼らは両方とも長所と短所を持っていると思うし、間違いなくいくつかの重複がある


2

ハイパーメディアの観点からは、間違いなくWeb APIです。AtomPubに基づいたODataは、HTTPを使用してデータベースを公開する方法であり、事前定義された状態転送(CRUD)の限られたセットのみを取得します。一方、ハイパーメディアサービスは、クライアントに合わせたアプリケーションのようなものです。Web APIを使用すると、必要なすべてのリンクを埋め込むことができ、さらにODataクエリ構文を使用することもできます。実際、HTMLを基本形式として使用する場合、Microsoftスタックで最も優れたハイパーメディアソリューションはASP.NET MVCです。


2
Web APIを使用してこれを実装する方法のオンライン例はありますか?
レイモンドサルトレリ


odata v3(odata.org/media/30002/OData.html#actions)にアクションを追加することで、この意見を引き続き支持しますか?
クリスDaMour
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.