web-dev-qa-db-ja.com

休息と石鹸RESTより良いパフォーマンスですか?

Soap and Restに関して既に投稿されたいくつかの質問を読みましたが、探している答えが見つかりませんでした。 Soap Webサービスを使用して構築されたシステムがあります。このシステムはあまりパフォーマンスが良くないため、すべてのSoap WebサービスをREST Webサービスに置き換えることを検討中です。Restのほうがパフォーマンスが良いと主張しています。これが本当かどうかはわかりません(これは私の最初の質問でした)これが本当だと仮定すると、Soapの代わりにRESTを使用することで不利な点はありますか?(何かを失いますか?)

前もって感謝します。

30
Luixv

パフォーマンスは幅広いトピックです。

サーバーの負荷を意味する場合、RESTはHTTPのオーバーヘッドを最小限に抑えるため、パフォーマンスが少し向上します。通常、SOAPはスタックをもたらしますとにかく、パフォーマンスの違い自体はそれほど大きくはありませんが、サーバー側のセッションがないため、RESTfulサービスのスケールアップはより簡単です。

ネットワークのパフォーマンス(帯域幅など)を意味する場合、RESTはパフォーマンスがはるかに優れています。基本的にはHTTPのみです。オーバーヘッドはありません。さらに、XMLではなくJSONで表現をエンコードすると、さらに多くのバイトを節約できます。

要するに、私は「はい」と言うでしょう、あなたはRESTでよりパフォーマンスが良くなるでしょう。また、(私の意見では)それはあなたのインターフェースをあなたのクライアントにとって使いやすくします。したがって、サーバーがスリムになるだけでなく、クライアントもスリムになります。

ただし、考慮すべき点がいくつかあります(「何を失いますか?」

RESTfulインターフェースはもう少し「おしゃべり」になる傾向があるため、ドメインとリソースの設計方法によっては、より多くのHTTP要求を行うことになります。

SOAPは非常に幅広いツールをサポートしています。たとえば、コンサルタントはツールを使用してインターフェイスを定義してwsdlファイルを生成できるため、開発者は別のツールセットを使用してそのwsdlファイルからすべてのネットワークコードを生成できるため、それを気に入っています。さらに、表現としてのXMLにはスキーマとバリデータがあり、場合によっては重要な問題になる可能性があります。 (JSONとREST同様の機能がありますが、ツールのサポートはかなり遅れています)

46
wuher

SOAPでは、XMLメッセージを解析し、すべての<riduculouslylongnamespace:mylongtagname> extra </ riduculouslylongnamespace:mylongtagname>のすべてを送信および受信する必要があります。

RESTは通常、より簡潔でJSONのように簡単に解析されるものを使用します。

しかし、実際には違いはそれほど大きくありません。

XMLからDOMを構築するには、通常、C++のXERCESやJavaのような超高速で最適化されたコードを実行します。

高速ネットワーク環境(LANまたはブロードバンド)では、1〜2 Kの送信と10〜15 Kの送信に大きな違いはありません。

14
James Anderson

質問をRESTとSOAPは既存のシステムで何らかの形で交換可能です。そうではありません。

SOAP(テクノロジー))を使用すると、実際にはRPCを処理しているため、通常は「メソッド」で定義されたシステムがあります。

REST(テクノロジーではなくアーキテクチャースタイル))を使用すると、メソッドではなく「リソース」の観点から定義されたシステムを作成します。1:1はありませんSOAPとRESTの間のマッピング。システムアーキテクチャは根本的に異なります。

または、単に「URI経由のRPC」について話しているだけです。これはしばしばRESTと混同されます。

11
jbrendel

SOAP vs RESTとなると、私は間違いなくエキスパートではありませんが、私が知っている唯一のパフォーマンスの違いは、SOAP XMLベースであるため、パケットを送受信します。SOAPヘッダーなどが必要です。RESTはURL +クエリ文字列を使用してリクエストを行うため、その数kBを有線で送信します。

SOより良い、より詳細な答えをくれる人がいますが、少なくとも私は試してみました;)

5
KBoek

他の答えが見落としているように思われることの1つは、REST HTTPのキャッシュおよびその他の利点のサポートです。SOAPはHTTPを使用しますが、 SOAP 1.1バインディングはPOST動詞の使用のみを定義します。これはGETバインディングの導入によりバージョン1.2で修正されましたが、これは古いバージョンを使用しているか、適切なバインディングを使用していない場合に問題が発生します。

セキュリティもパフォーマンス上の重要な問題です。 RESTアプリケーションは通常TLSまたは他のセッション層セキュリティメカニズムを使用します。TLSはWSセキュリティなどのアプリケーションレベルのセキュリティメカニズムを使用するよりもはるかに高速です(WSセキュリティは セキュリティの欠陥 )。

ただし、SOAPとRESTベースのサービスを比較するとき、これらはほとんどマイナーな問題だと思います。SOAPまたはRESTのパフォーマンスの問題の回避策を見つけることができます。個人的な意見では、SOAPもREST(by REST HTTPベースのRESTサービス)はこれらのタイプのサービスについては、Apache Thrift、0MQ、または他の無数のバイナリRPCプロトコルのようなものを使用することをお勧めします。

5
Shawn H

Wuherの答えに少しだけ追加します。

Chrome Webブラウザーを使用してこのページを要求するときのHTTPヘッダーバイト:761
wikipedia 記事のサンプルSOAPメッセージに必要なバイト数:299

私の結論:RESTがうまく機能するのは、ワイヤ上のバイトサイズではありません。

単にSOAPサービスをRESTに変換するだけでは、パフォーマンスが大幅に向上することはほとんどありません。 RESTの利点は、制約に従うと、HTTPがスケーラブルなシステムを生成するために提供するメカニズムを利用できることです。キャッシュとパーティション分割は、ツールベルトのツールです。

4
Darrel Miller

それはすべて依存しています。 RESTは、リクエストデータが大きくなる可能性のある状況に対して(良い)答えを実際に持っていません。RESTを宣伝するときに時々見落とされている場合、このポイントを感じます。

数千の異なるアイテムの情報データを要求できるサービスを想像してみましょう。

SOAP開発者は、1回の呼び出しで1つまたは任意の数のアイテムの情報を取得できるメソッドを定義します。

REST開発者は、URIが長くなりすぎて、単一の項目をパラメーターとして使用するGETメソッドを定義することを懸念します。その後、これを複数回呼び出す必要があります。データを取得するための各アイテム。クリーンでわかりやすい...しかし。

この場合、RESTサービスで1回の呼び出しで何ができるかを達成するために、SOAPサービスに必要な往復がさらに多くなります。

はい、RESTシナリオで大規模なリクエストデータを処理する方法の回避策があることを知っています。たとえば、リクエストの本文にコンテンツをパックできます。しかし、その後、慎重に定義する必要があります(これらの状況では、RESTは実際には(SOAPのような)標準ではなく、より多くの方法であるという苦痛を感じるようになります。物事を行うの。

比較的限られた量のデータのみが交換される状況の場合、RESTは非常に良い選択です。結局のところ、これはユースケースの大部分です。

3
peterh

一般に、RESTベースのWebサービスは、そのシンプルさ、パフォーマンス、スケーラビリティ、および複数のデータ形式のサポートのために好まれます。 SOAPは、サービスがセキュリティとトランザクションの信頼性に対する包括的なサポートを必要とする場合に好まれます。

答えは、実際には機能的要件と非機能的要件に依存します。以下にリストされた質問をすることは、あなたが選ぶのを助けるでしょう。

REf: http://Java-success.blogspot.ca/2012/02/Java-web-services-interview-questions.html

サービスはデータまたはビジネスロジックを公開しますか? (RESTはデータを公開するのに適した選択肢です。ロジックにはSOAP WSが適しているかもしれません)。消費者とサービスプロバイダーは正式な契約を必要としますか? (SOAPにはWSDLを介した正式な契約があります)複数のデータ形式をサポートする必要がありますか? AJAX呼び出しを行う必要がありますか? (RESTはXMLHttpRequestを使用できます)呼び出しは同期ですか、非同期ですか?コールはステートフルですか、それともステートレスですか? (RESTは統計のないCRUD操作に適しています)どのレベルのセキュリティが必要ですか? (SOAP WSはセキュリティのサポートが向上しています)どのレベルのトランザクションサポートが必要ですか? (SOAP WSはトランザクション管理のサポートが向上しています)帯域幅に制限はありますか? (SOAPはより冗長です)サービスのクライアントを構築する開発者にとって最適なものは何ですか? (RESTは実装、テスト、および保守が簡単です)

選択する必要はありません。最新のフレームワークでは、最小限の変更でこれらの形式のデータを公開できます。ビジネス要件に従い、特定の実装の負荷テストを行ってスループットを理解してください。特定のシステムの正しい負荷テストなしでは、この質問に対する正しい答えはありません。

0
serg.nechaev