一般に、RPCはRESTよりもはるかに多くの言語統合を提供します。既に述べたように、特に単一の分散システムに複数の言語で記述されたコードを実行する複数のホストが含まれる場合、これにはスケール、エラー処理、型安全性などの点で多くの問題が伴います。ただし、RPC、REST、およびその両方を同時に使用するビジネスシステムを記述した後、特定の場合にRPCよりもRPCを選択する理由がいくつかあることがわかりました。
RPCの方が適していることがわかった場合を次に示します。
- 密結合。システムの(分散)コンポーネントは連携して動作するように設計されており、1つを変更すると他のすべてに影響を与える可能性があります。将来、他のシステムと通信するためにコンポーネントを適合させる必要はないでしょう。
- 信頼できるコミュニケーション。コンポーネントは、完全に同じホスト上で、または遅延問題、パケット損失などが発生する可能性が低いネットワーク上で相互に通信します(ただし、これらのケースを処理するようにシステムを設計する必要があります)。
- 統一言語。すべての(またはほとんどすべての)コンポーネントは単一の言語で記述されます。異なる言語で記述されたコンポーネントが将来追加されることはほとんどありません。
IDLについてのポイントに関して、RESTシステムでは、REST要求と応答のデータを、使用している内部データ表現に変換するコードを記述する必要もあります。IDLソース(適切なコメント付き)は、REST API用に個別に作成および保守する必要があるインターフェイスのドキュメントとしても機能します。
上記の3つの項目は、大規模なシステムの1つのコンポーネントを構築しようとしているときによく発生します。私の経験では、これらのコンポーネントは多くの場合、サブシステムが独立して故障する必要があるものであり、他のサブシステムまたはコンポーネント全体の全体的な故障を引き起こさないものです。多くのシステムは、これらの目標を達成するためにErlangで作成されており、場合によっては、これらの利点を得るためだけにRPCを使用して別の言語でシステムを作成するよりもErlangの方が適している場合があります。
ほとんどのエンジニアリングの問題と同様に、プロセス間通信の問題に対する単一の解決策はありません。設計しているシステムを見て、ユースケースに最適な選択をする必要があります。