2010-11-30 6 views
16

あなたはそれに言及する前に、私はこの質問がWCF4の発売以来尋ねられたが、WCF4の発売以来ではないことを知っている!今日、.NETでRESTfulアーキテクチャを実装する最良の方法は何ですか?

多くの読書の後、私はRESTfulアーキテクチャがデータ提供APIを開始する方法であると判断しました。リリースWCF 4、ASP.NET MVC 2、WCF RESTスターターキットを考慮して、今すぐRESTfulアーキテクチャーを実装する最善の方法は何ですか?

Me: 私はASP.NET MVCに非常に精通していますので、私はそこではかなり快適に感じるでしょう。しかし、私のWCFの知識は欠けています。

so WCF4またはASP.NET MVC?(またはwcf restスターターキットのようなもの)?私はASP.NET MVCではなく、WCFを知って

  • 実装
    • やすさ:具体的に私が探しています。 WCFは学習曲線に値するでしょうか?
    • REST用のWCF4のオーバーキルですか?またはASP.NET MVCがある時点で短くなりますか?
    +1

    質問に回答するのに十分な情報がありません。すでに答えを見てください。彼らは物質を持っておらず、ちょうど「私が持っているのでこれを使う」。これらの質問に答える唯一の方法は、正確な要件と機能を比較することです。 「低帯域幅」以外のものは提供していないため、基本的なフレームワークとは関係がなく、RESTの定義である「多くのクライアント」は、あなたにどんな忠実なアドバイスをも与えることはほとんど不可能です。 – jfar

    +0

    @Alex:/彼は "ベスト"と "WCF 4、ASP.NET MVC 2とWCF REST"を引用していると考えると、質問の奇妙な解釈 – jfar

    +0

    @Alexありがとう。 @jfar私はあなたのためにそれをより具体的にしようとしました。私はちょうど誰かが彼らがどちらかのルートに長い道のりで戦って、それが完全であるか欠陥であることを発見したら、私に知らせてほしい – BritishDeveloper

    答えて

    20

    私は実際に実装している、または現在、投稿されたオプションの3つすべてを使用していますので、私はそれを見せます。これであなたの探しているものが少しわかりやすくなりました。

    のOData

    ときのODataは、内部アプリケーションに最適です:あなたは、サーバーとクライアントの両方である

    1. Entity Frameworkを使用しています。
    2. モデルで継承を使用せず、サブコレクションを照会することを期待していません。

    クライアント側でIQueryableを使用できるため、Odataはすばらしいです。しかし、これにはいくつかの制限があります。私の頭の上の2つは、あなたが継承されたモデルを使って作業することがやや厄介であり、あなたはcan't do nested collectionsです。

    実際にはsupported LINQ capabilities areがわからないという問題もあります。

    ODataは、サービスレイヤが絶対必要であり、単純なCRUD操作のみを実行することを期待しています。すべてのOData問題の主な問題は、たまには回避できないハード壁になります。クライアントのコンシューマーコードは本当に最高の部分であり、C#を使用していない場合はおそらくその価値はありません。

    また、EF自動メタデータサポートを使用しないと、コンシューマがスキップしているかどうかにかかわらず、同じ量のコードを書くことになります。 OData用のRailsラッパーがありますが、これはすべて比較的新しいものです。本当に大きなMSパートナーの他に、野生のODataはまだ見えません。

    Oデータ認証とフィルタリングは、かなり裸のATMです。データを制限する必要がある場合は、あなた自身が多くの許可関連コードを書くでしょう。 SELECT * FROM TABLEを権限で制限する必要がある場合は、厄介なコードを書く準備をしてください。

    MVC 2

    MVCは、RESTfulなサービスを作成するためのかなり良いです。あなたは動詞をサポートしており、それは簡単にreturn JSONResultです。唯一の潜在的な欠点は、コーディングで多くのエラー処理が行われ、すべてのビューモデルがステータスコードとエラーメッセージを示す基本クラスから継承されることです。

    また、メッセージの返信を希望するファンシーやコンベンションの駆動方法に応じて、表示エンジンを微調整することもできます。 MVCの大きな利点は非常に拡張性があり、あなたが望むものを何でもほとんど行うことができます。私はform/ajax calls /とrestサービスを同じコントローラアクションに組み合わせることが大変です。一度実装すると、同じ操作の3つのフレーバーが得られます。 MVCを短くすることは難しいでしょう。なぜなら、あなたが必要とするほとんどすべてを行うためにねじれている可能性があるからです。

    MVCサービスの大きな利点は、サービスと一緒に配備されたアプリケーションで少しの管理UIを盗み見ることができることです。非常に便利な2つのサイトを展開する必要はありません。

    WCF REST

    だから私は、ごく限られた容量でWCFの残りの部分を使用していますし、それは大丈夫...私は3年間、WCFを使用しました...ようだと私はいつもに不満ですどのようにイライラして複雑にするかは、それを拡張することです。 ODATAのように、密かな道を歩いていくと密閉されたクラスと機能の拡張不能な洞窟に入るでしょう。これは、MVCの拡張性とは正反対です。

    もう1つの問題は、WCFの上に構築された建物とそれに沿ったすべての狂気です。私はいつもPhDがWCFを効果的に使うことが必要だと言ってきました。 Rick Strahlにはpain points of WCF RESTについての良い記事がありました。物事は変わったが、価値があるとは分からない。

    WCF RESTは本当に有望であり、私はそれを使用しています。私はそれを推薦するのに十分ではありません。

    要点

    1. 、あなたの消費者がわからない場合、私はあなたがあなたのAPIを知らないと仮定と思います。ユースケースがあり、それをコードするまでサービスを構築しないでください。

    2. MVCは最も拡張性があります。MVCは、ODataとWCFのようなMSの機能を拡張することよりも優れています。

    3. Facebook、Amazon、PayPal、Ebayのようなすべての「大きな男の子」は、ODataのような既知のパターンやスキーマに実際に準拠していないAPIを持っています。あなたのRESTサービスは本当にあなたがそれを作るものです。これは#1に関連しています。消費者が最初に作業するのを容易にすることに集中する。

    +0

    あなたは単に "メインポイント#1"のためにupvoteを取得します:-)多くの人が、単にデータを公開するというアイデアに基づいてAPIを設計しようとしており、その使い方を理解する必要はありません。 –

    +0

    すてきな回答ありがとうございます。再:#1 Webサイトのデータサービスは、すべてasp.net mvcのWebサイトを介して書かれて配信されます。 「iPhoneアプリのためにはAPIを必要とし、将来は別のものが必要になる」という新たな要件があります。私はこのエリアについて少し知っているので、助けてくれてありがとう! – BritishDeveloper

    +0

    +1 jfar - 本当に素敵な要約があります。私はwcf(http)とmvcの両方をこのタスクに使用しました。私は認証がとても好きですが、wcfではとても簡単ですが、mvcではもっと苦痛があります。これが認証の世話をするmvc-rest実装で解決された場合、私はそれが私たちの安らかなサービスのための私のプラットフォームであると思う。現在のところ、wcfだけが実現できるという要件(セキュリティ上の賢明さ)があります。 –

    1

    私は、Visual Studio Extension Managerで利用可能なWCF Rest Serviceアプリケーションテンプレートを多く使用しました。あなたが早く始めることを望んでいるなら、それは私が行くところです。

    1

    プロジェクトがORMフレームワークの上に構築されている場合、またはすべてのデータをメモリコレクションに保持できる場合は、ODataを使用します。 WCF HTTPサービス(a.k.a. WCF REST)

    ODataは本当に有望で、IQueryableインターフェイスの上に構築された大きな柔軟性を備えています(ストアドプロシージャなどでデータを取得する場合)。実際にはRESTful LINQのようなものです。しかし、いくつかのORMがある場合を除き、ORMの実装に似ているIQueryableを自分で実装する必要があります。この時点で、より制御しやすい下位レベルのWCF HTTPサービスを使用し、必要な方法でリソースを整えることができます。クライアントライブラリは強力ではありませんが、サービスがすべてのクエリ演算子を実装するとは期待しません。

    7

    決定を下す前に、WCFのHTTP/RESTサポートが大幅に変更されていることに注意してください。 http://wcf.codeplex.com/を参照してください。多くの下位互換性がありますが、新しいライブラリはHTTPとWCFの観点から完全に書き直されています。

    ODataは、アプリケーションの特定のサブセットには役立ちますが、汎用のRESTフレームワークではありません。

    何かが必要な場合は、今すぐRESTをやりたい、OpenRastaを見てください。マーケティングの話題が良いだけなのでRESTをしたいのであれば、ASP.NET MVCで十分でしょう。あなたが実験的な段階にいるなら、私は新しいWCFライブラリを見続けるでしょう。

    12

    OpenRastaをチェックアウトする必要があります。これは、.NETでRESTfulなアーキテクチャを実装するために明示的に設計されたリソース中心のフレームワークであり、HTTPコンテンツのネゴシエーションやダイジェスト認証などの強力なサポートを備えています。

    OpenRastaのアプローチは、動詞(アクション)に関してAPIを実装するのではなく、リソース(APIエンティティモデルに密接に関連しています)とコーデックを定義する必要があります。これらのリソースをXML、JSON、HTML、またはAPIがサポートする必要があるその他のコンテンツ形式で表現できます。

    これは、.NETで完全に書かれたオープンソースで、IoCと依存性注入の組み込みサポートが含まれています(これは内部で多くのものが接続されています)。

    バージョン2.0は現在しばらくの間安定しており、いくつかの場所、特にHuddleなどの生産で使用されています。

    私の意見では、OpenRastaのリソースに重点を置いていることは、WCFやASP.NET MVCを含む多くの「多目的」Web/HTTPフレームワークよりも、Roy FieldingのRESTfulアーキテクチャのビジョンに非常に近いことを意味します。

    +1

    私の経験は、リソースをエンティティにマッピングすることは悪い考えです。私はViewModelsやDTOのよ​​うなリソースを扱うのに成功しました。 –

    +0

    ああ - それは "ドメインモデル"とは対照的に "APIエンティティモデル"の意味です...あなたは絶対に正しいです、私はそれをひどくうまく説明しませんでした。 –

    関連する問題