2012-03-13 4 views
3

新しいASP.NET WebAPI(DbDataController)のEntity Frameworkデータのデフォルトのコントローラ/プロバイダが厳密にはRESTベースのサービスではなく、RPCスタイルのサービスに似ているというコメントを、 。私は、WebAPIフレームワークがあらゆる種類のHTTPサービス、RESTなどを作ることを許していると理解していますが、本当のRESTサービスではないDbDataControllerによって公開されたサービスについて具体的に説明できますか?DbDataProviderをRESTfulにしないものは何ですか?

答えて

4

設計が自由に個々のコンポーネントの実装を残しながら、RESTアーキテクチャ・スタイルは、建築に適用される次の6つの制約について説明します。

クライアントサーバー

統一されたインタフェースは、クライアントを分離サーバーから。このような分離は、サーバが内部にあるデータである のストレージには関係しないため、クライアントコードの移植性が向上することを意味します。 は、サーバーはユーザーインターフェイスまたはユーザーの状態が に関係しないため、サーバーはよりシンプルになり、 のスケーラビリティが向上します。サーバーとクライアントは、それらの間のインターフェイスが変更されていない限り、個別に交換して を開発することもできます。

ステートレス

クライアント - サーバ通信は、さらに、要求間サーバー上に格納されないクライアント 文脈によって制約されます。 からの各要求には、 要求を処理するために必要なすべての情報が含まれており、セッション状態はすべてクライアントに保持されます。サーバは でステートフルにすることができます。この制約は単に、サーバー側の状態がリソースとしてURLによってアドレス可能な であることを要求します。これにより、監視のためにサーバをより多くの人々に見せてくれるだけでなく、ネットワークの部分的な障害である の信頼性を高めるとともに、スケーラビリティをさらに向上させることができます。キャッシュ可能な

World Wide Web上のとおり、クライアントが応答をキャッシュすることができます。応答は、 を暗黙的にまたは明示的にキャッシュ可能と定義する必要があります。 クライアントは、それ以降の要求に応じて古くなったデータや不適切なデータを再利用しません。部分的によく管理されたキャッシュまたは は、クライアントとサーバー間のやりとりを完全に排除し、さらに スケーラビリティとパフォーマンスを向上させます。クライアントは通常、それは エンドサーバへ、または途中の仲介に直接接続されているかどうかはわかりません

レイヤードシステム

。中間の サーバーは、ロードバランシングを有効にしてシステムのスケーラビリティを向上させ、共有キャッシュを提供することによって を向上させることができます。また、セキュリティポリシーを実施することもあります。

コードオンデマンド(オプション)

サーバが実行可能なコードの転送によるクライアントの機能 を拡張またはカスタマイズすることが一時的に可能です。この例には、Javaアプレットなどのコンパイル済みコンポーネントや、JavaScriptなどのクライアント側の スクリプトが含まれています( )。

統一インターフェース

均一以下に説明クライアントとサーバとの間の界面、 簡素化され、独立 進化する各パーツを可能アーキテクチャを切り離します。このインタフェースの4つの基本原理は、以下に詳述されています。

http://en.wikipedia.org/wiki/Representational_state_transfer#Constraints

「RESTアーキテクチャの唯一のオプションの制約は、オンデマンドでのコードです。サービスは、他の制約に違反した場合、それは厳密にRESTfulなと考えることはできません。DbDataControllerクラスはHTTPサービスとしてEntity Frameworkのモデルを公開します。これらのCRUDサポート、メタデータ、リクエストバッチ処理などのWCF Data Servicesとの重複機能があり、ODataのクエリ文字列フォーマットを部分的に模倣しています。これらのサービスはRESTfulではなく、ODataを使用しないRPCスタイルに従います。 "このサイトからqouteは:

WCF Data Services and ASP.NET Web API

+0

役立ちますが、この答えはDbDataControllerによって破られ、または特にその制約に違反している理由をどの制約指していません。また、RPCスタイルのサービスとは何ですか? –

+1

RPCはクライアントから開始され、既知のリモートサーバーに要求メッセージを送信して、指定されたパラメータを指定したプロシージャを実行します。リモートサーバーはクライアントに応答を送信し、アプリケーションはその処理を継続します。これは、DBDataControlが任意のリレーショナルデータベースからデータを取得および編集するための高速で効率的な方法を提供するのと同じです。つまり、RPCスタイルのサービスのようなものです。 –

+1

この定義では、サーバー側が対応するプロシージャー呼び出しで各種類のREST要求を実装した場合、ALL RESTサービスをRPCサービスと呼ぶこともできます。 「純粋な」REST APIとDbDataControllerとの間に実質的な違いがありますか、このRPCコンセプトを完全に理解していませんか? –

関連する問題