この話を見て REST、再利用、セレンディピティ スティーブヴィノスキによる、greenfieldプロジェクトにビジネスケースがあるかどうか疑問に思います(XML-)RPC-ish設定、RESTはより良い方法で解決できませんでした。
彼が言及するいくつかのRPC問題:
少しドラマ化するために、RPCとRESTのGoogleインスタント結果をいくつか示します。
一般に、RPCはRESTよりもはるかに多くの言語統合を提供します。あなたが述べたように、これは、特に単一の分散システムが複数の言語で書かれたコードを実行する複数のホストを含む場合、規模、エラー処理、タイプセーフなどの面で多くの問題を伴います。ただし、RPC、REST、およびその両方を同時に使用するビジネスシステムを記述した後、RESTの場合よりもRPCを選択することにはいくつかの正当な理由があることがわかりました。
以下は、RPCの方が適しているとわかった場合です。
IDLに関するポイントについては、RESTシステムでは、REST要求と応答のデータを、内部データ表現に変換するコードを記述する必要があります。 IDLソース(適切なコメント付き)は、REST APIに対して個別に作成および保守する必要があるインターフェースのドキュメントとしても機能します。
上記の3つの項目は、より大きなシステムの1つのコンポーネントを構築しようとしているときによく発生します。私の経験では、これらのコンポーネントは多くの場合、それらのサブシステムが独立して障害を起こし、他のサブシステムまたはコンポーネント全体の全体的な障害を引き起こさないようにする必要があるコンポーネントです。多くのシステムは、これらの目標を達成するためにErlangで記述されており、場合によっては、他の言語でシステムを記述し、RPCを使用してこれらの利点を得るためにErlangを選択する方がよい場合があります。
ほとんどのエンジニアリング問題と同様に、プロセス間通信の問題に対する単一の解決策はありません。設計しているシステムを見て、ユースケースに最適な選択をする必要があります。
あなたは実際に両方を持つことができます。 RestRPC for Grailsのようなプラグインは、メソッドへの呼び出しをインターセプトし、それらを安静に処理しながら、必要な数だけ(RPCのように)使用できるようにするアノテーションを提供します。
RESTにはいくつかの主要な利点があります。製品がデータセンター全体に拡大され、高可用性と負荷分散を行っている場合です。
ただし、小規模なプロジェクトについて考えてみてください。 1時間に数百のリクエストがあるWebサービスが必要ですか? WCFはすべてのトランスポート問題を扱います。ネットワークを介してオブジェクトを送信するための便利なインターフェイスを備えており、application.configファイルのみを使用して、プログラミングなしでネットワーク接続を構成、暗号化、認証できます。