2009-07-08 14 views
34

私は自分自身のAjax Webサイトを構築していますが、私はRESTとRPCの間で検討しています。PHPのRESTとRPCの比較

サーブレットをサポートしているサーバーの場合は、persevereをインストールして問題を終了しますが、サーバーはサーブレットをサポートしていません。

RPCはコード化(IMO)が簡単で、PHPで簡単に記述できます。私が必要とするのは、データベースクエリの実行者です。私はDojo ToolkitとJSONを使用しています。

RPC over RESTまたはREST over RPCを選択する必要があるのはなぜですか?

+1

を理解することはできません。 – minghua

答えて

21

オム...入れて、それ簡単な、両方のは非常に抽象的モデルです...ので、抽象的、彼らは自然にどこにでも起こる...

RESTは、グローバル識別子(URIとリソースを持つというアイデア対処されますCRUD方法でアクセスされたHTTP)の場合には(

RPCが考えここで...、)それはアイデアだ少なくとも、ウェル...入れ、HTTPの場合にDELETE POSTGETを使用して別のマシン上でプロシージャを呼び出し、いくつかのパラメータを渡して戻り値を取得します。

There is a nice short comparison on Wikipedia

頑張れはがRPCインターフェイスを公開(それだけでこれを達成するためにHTTP-機能を使用していないが)、それはRESTfulです...(確かに、非常にエレガントな方法で)両方できるサービスを作成します最後に...

ほとんどの人は、あなたがRPC APIを(それがXMLまたはJSONに基づくか、何でもすること)で、おそらく羽目になるだろうとして、あなたは...あなたのアプリケーションが行う必要があるかを見なければなりません、それは部分的にRESTfulなサブシステムのためのトランスポート層が含まれています...これは、持っRESTfulnesので、柔軟性を意味します...クライアントは、多かれ少なかれ自由に簡単なCRUDのセットを介して、サーバ上のデータを(横断できるなら、私それはAPIを介して公開されている限られた(問題固有の)メソッドセットに依存せず、ロジックをクライアントにシフトすることができます...

+25

RESTはCRUDとは関係ありません。 – aehlke

+8

CRUDに関してRESTを考えるのは許されるかもしれません。それはよくある誤解です。説明は次のとおりです: "... CRUD(Create、Retrieve、Update、Delete)マッピングをGPPD(GET、POST、PUT、DELETE)から切り離すことによって、RESTを使用するはずの方法を使用できます。あなたが適切なリソースにPOSTしている限り、POSTを使用してリソースを削除、更新、または作成してください。 - http://blog.jonnay.net/archives/642-REST-!-CRUD!.html –

+0

あなたのリンクには残念ながら、そのメッセージを怒らせるRESTの誤解が含まれています。リソースを削除する場合は、IDを指定しません。削除するリソースのURIを指定します。 – aehlke

55

これを理解する最善の方法は、Roy T. Fieldingの論文blogの関連記事では、純粋なRESTアーキテクチャとRPCアーキテクチャの違いについて説明しています。

もう1つ注目すべきことは、RESTに関するWikipediaの記事は陰鬱な状態であり、Fielding自身、RESTの「発明者」は、記事が不正確であることを示唆しています。

人々がRESTで見逃せない最大のものは、検出可能性です。リソースには、帯域外で標準化されていないURI命名規則に頼るのではなく、ハイパーテキスト内の他の関連リソースのURIが含まれている必要があります。

SOAPやXML-RPCのような一般的なRPC実装の大きな問題は、PUT、GET、DELETEなどのHTTPのさまざまなプロパティをすべて利用するのではなく、独自のアーキテクチャの下でHTTPを使用することです。 「がトンは、同様に従来のWebスタックをフィット - 真ん中のキャッシュサーバは、RPCコールの内容の意味について知らなくても、例えば、動作しません。

これは、RESTとRPCに不完全紹介ですが、私はしばしば見落とされ、重要なポイントのいくつかを強調したと思います。 RESTには間違った情報がたくさんあるので注意してください。

つまり、RESTはすべてではありません。それはアーキテクチャなので、実装する方法は柔軟です。しかし、主にリソースとして物にアクセスするのが理にかなっていない場合、RESTは適合しないかもしれませんし、アプリケーションの一部にしか適合しないかもしれません。

+0

Hypermediaコントローラは、休憩サービスの検出可能性を大きく助けました。 – Amir

+6

あなたの目標が何であるかに応じて、 "一般的なRPCの大きな問題"と呼ぶことが大きな利点になることを指摘したいと思います。 HTTPの動作動詞に頼ると、HTTPに結び付けられます。多くのシステムアーキテクチャでは、さまざまな異なるトランスポートメカニズム(HTTP、ソケット、メッセージキューなど)でRPC呼び出しを行うことが望ましい場合があります。多くの場合、HTTPの選択は、実際には理想的なトランスポートプロトコル(HTTPなどのさまざまなブラウザソリューション(BOSHなど)を参照してください)よりも偏在と関連しています。考慮すべきトレードオフはたくさんあります。 – DougW

+0

@DougW、本当に本当です。 HTTPなしでRESTを使用する方法はありますが、プロトコルに依存しないRESTについてはわかりません。 – aehlke

5

サービスの三つの異なるスタイルがあります。

  • のRPC API - クライアントは、サービスへの手順とパラメータを送信し、サービスには、コマンドの実行と結果を返すために責任があります。
  • メッセージAPI(ドキュメントAPI) - クライアントはRPC API呼び出しよりも複雑な構造であるDOM(要素)を送信します。これは操作を直接暗示しない傾向があるためです。
  • リソースAPI - リソース(データベースタプル、ファイル、イメージなど)にアクセスするために使用されます。一般的には、良好なメディアタイプネゴシエーションも提供する必要があります。

SOAPとRESTはW3Cから規格の編集であり、主な違いは、トランスポートプロトコルとRESTアプリケーション・プロトコルとしてそれを使用するようにSOAPはHTTP、SMTP等を使用することで、AKAがGET(サポートする必要があり、PUT、 PUSH、DELETE、およびPOST)。 SOAPはXMLを使用することを意味し、RESTは任意のデータ型(JSON、XML、HTTPなど)を使用できます。さらに、SOAPの主な利点の1つは、Service Descriptor(WSDLファイル)です。これにより、クライアントへのService Connector(プロキシ)の自動生成が可能になります。

silver bulletはありません。 Webサービスのタイプとアーキテクチャは実際のクライアントとテクノロジの要件に依存します。対象の一般的な考え方については

、Martin Fowler氏の署名ブックのいずれかを参照してください - stackoverflowのは、大規模な大きな影響を与えているQA年代を閉じている理由Service Design Patterns

+0

WSDL 2.0またはWADLを使用してRESTサービスを文書化できます。http://rest.elkstein.org/2008/02/documenting-rest-services-wsdl-and-wadl.html – icc97