web-dev-qa-db-ja.com

REST対RPC PHP

私は自分のAjax Webサイトを構築していて、 [〜#〜] rest [〜#〜] とRPCの間で考えています。

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

RPCはコーディングが簡単(IMO)で、PHPで簡単に記述できます。必要なのはデータベースクエリ実行プログラムだけです。 Dojo Toolkit とJSONを使用しています。

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

39
the_drow

うーん...簡単に言えば、どちらも非常に抽象的なモデルです...とても抽象的なので、どこでも自然に発生します...

RESTは、 [〜#〜] crud [〜#〜] の方法でアクセスされるグローバル識別子(HTTPの場合はURI)でアドレス指定されるリソースを持つことを目的としています( [〜#〜] post [〜#〜][〜#〜] get [〜#〜] 、PUTおよびDELETEを使用HTTPの場合...まあ、少なくともそれは考えです)...

RPCは、別のマシンでプロシージャを呼び出し、いくつかのパラメーターを渡して、戻り値を取得するという考えです...

ウィキペディアに素敵な短い比較があります

Persevereは両方を許可するサービスを作成します(非常にエレガントな方法で、確かに)... RESTful です(ただし、これを実現するためにHTTP機能を使用するだけではありません)andはRPCインターフェイスを公開します...

最後に、アプリケーションが実行する必要があることを確認する必要があります...ほとんどの人は、おそらくRPC API( [〜#〜] xml [〜 #〜] または [〜#〜] json [〜#〜] または何でも)、部分的にRESTfulなサブシステムのトランスポート層を含みます...これは、RESTfulnesを持っているため、柔軟性を意味します...クライアントが(単純なCRUDメソッドのセットを介して)サーバー上のデータを多かれ少なかれ自由にトラバースできる場合、公開されているメソッドの限られた(問題固有の)セットに依存しませんAPIを使用して、ロジックをクライアント側にシフトできます...

25
back2dos

それを理解する最良の方法は、ロイT.フィールディングの論文、または彼の blog に関する関連記事を読むことです。ここでは、純粋なRESTと単にRPCアーキテクチャの違いについて説明しています。

もう1つ注意すべき点は、RESTに関するWikipediaの記事は悲惨な状態にあり、RESTの「発明者」であるフィールディング自身が記事が不正確であると示唆していることです。

RESTで見落としがちな最大の問題は発見可能性です。リソースには、帯域外で標準化されていないURI命名規則に依存するのではなく、ハイパーテキスト内に他の関連リソースのURIを含める必要があります。

SOAPやXML-RPCなどの一般的なRPC実装の大きな問題は、PUT、GET、DELETEなどのHTTPのすべての異なるプロパティを利用するのではなく、独自の独自のアーキテクチャの下でHTTPを使用することです。これは従来のWebスタックにも適合しません。たとえば、中間のキャッシュサーバーは、RPC呼び出しの内容の意味を知らなければ機能しません。

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

とはいえ、RESTはすべてに使用できるわけではありません。これはアーキテクチャーであるため、実装方法はかなり柔軟です。しかし、主にリソースとしてアクセスすることが意味をなさない場合、RESTが適合しないか、アプリケーションの一部にしか適合しない可能性があります。

56
aehlke

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

  • RPC API-クライアントはプロシージャとパラメータをサービスに送信し、サービスはコマンドの実行と結果の返却を担当します。
  • Message API(Document API)-クライアントはDOM(要素)を送信します。DOM(要素)は通常、RPC API呼び出しよりも複雑な構造です。直接操作を意味します。
  • Resource API-リソース(データベースタプル、ファイル、画像など)にアクセスするために使用されます。一般的には、適切なメディアタイプネゴシエーションも提供する必要があります。

SOAPおよびRESTは W3C からの標準のコンパイルであり、主な違いはSOAPがHTTP、SMTPなどを使用することです。トランスポートプロトコルおよびRESTアプリケーションプロトコルとして使用します。別名、GET、PUT、Push、DELETE、およびPOSTです。)SOAPは、XMLの使用も意味します。およびRESTは任意のデータ型(JSON、XML、HTTPなど)を使用できます。さらに、SOAPの主な利点の1つはサービス記述子( WSDLファイル)。サービスコネクタ(プロキシ)をクライアントに自動生成する可能性を提供します。

銀の弾丸 はありません。 Webサービスのタイプとアーキテクチャは、実際のクライアントとテクノロジーの要件によって異なります。

この件に関する一般的なアイデアについては、Martin Fowlerの署名入りの本の1つを参照してください- Service Design Patterns

6
Kalina Todorova