質問

XML-RPC または REST を使用したソリューションの単純さに関する議論は理解しやすいですが、反論するのは困難です。

また、SOAP のオーバーヘッドの増加が、使用帯域幅や、場合によっては遅延にまで大きな影響を与える可能性があるという議論もよく聞きました。影響を定量化するテストの結果を見てみたいと思います。誰かそのような情報の良い情報源を知っていますか?

役に立ちましたか?

解決

これに関しては、有益な研究がいくつか行われています。以下を参照してください。

このトピックに関する (やや古い) 興味深いパフォーマンスの会話もあります。 MSDN フォーラム.

つまり、これらのソースのほとんどは、SOAP と REST が汎用データに対してほぼ同じパフォーマンスであることに同意しているようです。ただし、一部の結果は、バイナリ データを使用すると、実際には REST のパフォーマンスが低下する可能性があることを示しているようです。詳細については、私がリンクしたフォーラムのリンクを参照してください。

他のヒント

SOAP と SOAP の速度における主な影響REST はワイヤ速度ではなく、キャッシュ可能性と関係があります。REST は、XML を介して Web をトンネリングしようとするのではなく、Web のセマンティクスを使用することを提案します。そのため、RESTful Web サービスは通常、キャッシュ ヘッダーを正しく使用するように設計されており、プロキシのキャッシュやローカル ブラウザ キャッシュなどの Web の標準インフラストラクチャとうまく連携します。また、Web のセマンティクスを使用するということは、ETag や自動 zip 圧縮などの効率を向上させる方法がよく理解されていることを意味します。

...そして今、ベンチマークが必要だと言いました。さて、Googleの助けを借りて、私は見つけました 一人の男 そのテストでは、REST が SOAP などより 4 ~ 6 倍高速であることが示されています。 それはRESTにも有利です。

プロトコルとしての REST はメッセージ エンベロープの形式を定義していませんが、SOAP にはこの標準があります。

したがって、この 2 つを比較するのはやや単純化されており、リンゴとオレンジのようなものです。

とはいえ、SOAP エンベロープ (データを除く) はわずか数キロなので、SOAP と REST の両方を介してシリアル化されたオブジェクトを取得する限り、速度に目立った違いはありません。

XML を使用する SOAP およびその他のプロトコルは一般にメッセージをかなり肥大化させます。これはコンテキストによっては問題になる場合もあれば、問題にならない場合もあります。

JSON のようなものはよりコンパクトで、シリアル化/逆シリアル化が高速になる可能性がありますが、その理由だけで使用しないでください。その時点で理にかなっていると思われることはすべて実行し、問題がある場合は変更します。

通常、HTTP を使用するものはすべて (HTTP 1.1 キープアライブ接続を再利用する場合を除き、多くの実装では再利用しません)、リクエストごとに新しい TCP 接続を開始します。これは、特に遅延の長いリンク上では非常に悪いことです。HTTPS はさらに悪質です。1 人の送信者から 1 人の受信者への短いリクエストが多数ある場合は、このオーバーヘッドを取り除く方法を検討してください。

あらゆる種類の RPC (SOAP であれ他のものであれ) に HTTP を使用すると、常にこのオーバーヘッドが発生します。他の RPC プロトコルでは、通常、接続を開いたままにすることができます。

「pjz」の答えを拡張します。

INFORMATION(get* タイプの呼び出し) ベースの SOAP 操作を大量に取得している場合、現時点ではそれらをキャッシュする方法はありません。ただし、REST を使用してこれらと同じ操作を実装した場合、前述したように、データ (ビジネス コンテキストに応じて) がキャッシュされる可能性があります。SOAP は操作に POST を使用するため、サーバー側で情報をキャッシュできません。

SOAP は明らかに遅いです。ペイロードは大幅に大きくなり、組み立て、転送、解析、検証、処理が遅くなります。

ベンチマークの質問に対する答えはわかりませんが、SOAP 形式についてわかっていることは、確かにオーバーヘッドはありますが、そのオーバーヘッドはリクエストごとに増加しないということです。Web サービスに送信される要素が 1 つある場合は、オーバーヘッド + 1 要素の構築が必要になります。Web サービスに送信される要素が 1000 個の場合は、オーバーヘッド + 1000 要素の構築が必要になります。XML リクエストが特定の操作用にフォーマットされているときにオーバーヘッドが発生しますが、リクエスト内の個々の引数要素はすべて同じフォーマットになっています。

反復可能な短いバースト データ (たとえば 500 要素) にこだわる場合、速度は許容範囲内であるはずです。

ここでの主な疑問は、RPC と SOAP をどう比較するかということだと思います。

どちらも、操作するスタブ オブジェクトと、その下ですべてがどのように処理されるかを実際には知らずに取得するプリミティブ/複雑なデータ型を使用することで、同じ通信抽象化アプローチを提供します。

私は常に (JSON-)RPC を好むでしょう。

  • 軽いです
  • 世の中にはあらゆるプログラミング言語に対応する優れた実装がたくさんあります
  • 学習/使用/作成が簡単です
  • 速いです(特にJSONの場合)

ただし、SOAP を使用する必要がある理由はあります。パラメータの正しい順序に依存するのではなく、パラメータに名前を付ける必要がある場合

このスタックオーバーフローから得られる詳細情報 質問

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top