SOAPベースのサービスの代わりにRESTを使用するのはなぜですか?[閉まっている]


153

今日、RESTに関する興味深いデモに参加しましたが、RESTがSOAPベースのサービススタックよりも使いやすく、実装が簡単である1つの理由(または1つの理由もありません)を考えることができませんでした。

「実世界」の誰もがSOAPベースのサービスの代わりにRESTを使用する理由のいくつかは何ですか?


37
Webサービスとは、SOAPスタイルのWebサービスを指しますか?私が知る限り、RESTful Webサービスも利用できるからです。
ジェームズマクマホン

回答:


160

オーバーヘッドが少ない(すべての呼び出しをラップするSOAPエンベロープがない)

重複が少ない(HTTPは、そうでなければSOAPエンベロープで表す必要があるDELETE、PUT、GETなどの操作をすでに表しています)。

より標準化された-HTTP操作はよく理解され、一貫して動作します。一部のSOAP実装は厄介なものになる可能性があります。

人間がより読みやすく、テスト可能(ブラウザだけでSOAPをテストするのは難しい)。

XMLを使用する必要はありません(SOAPの必要もありませんが、既にエンベロープの解析を行っているため、ほとんど意味がありません)。

ライブラリにより、SOAP(一種)が簡単になりました。しかし、私が指摘したように、あなたはその下にある多くの冗長性を抽象化しています。はい、理論的には、SOAPは他のトランスポートを経由して、同じようなことをするレイヤーの上に乗ることを回避できますが、実際には、SOAPの作業のほとんどすべてがHTTPを介して行われます。


1
プラットフォーム間のSOAP通信もPITAにすることができることを追加したいと思います(SOAPのポイントの一部ではありませんでしたか?!?)。
ジャスティンボゾニア2008

7
また、HTTPインフラストラクチャとの連携も良好です。たとえば、GETは、最後に変更されたタグとetagの使用とともに積極的にキャッシュされます
James Strachan

Webブラウザーと連携してサービスにユニバーサルクライアントを提供することも役立ちます:)
James Strachan

2
SOAPは十分に標準化されていると私は主張します。実装が未成熟であることを意味している場合は、それをより明確にすることをお勧めします。あなたがこれを示唆しているなら、私はこの見解のいくつかの証拠を評価します。RESTの方が人間が読めるかどうかについても質問します。これは、コンテンツのフォーマット方法の選択に完全に依存しています。また、XMLは人間が読めるように設計されていますが、誰もが知っているように冗長です。
ハワード5

6
HTTPはSOAPと同じくらい標準化されており、実装期間が長いため、実装は全体的に非常に安定しており、真に相互運用可能です。また、SOAPは、コンテンツがラップされているエンベロープのため、本質的に同じコンテンツであっても読みにくくなります。実際、過去数年にわたって、JSON over HTTPが最適な組み合わせであることがわかりました。さらにコンパクト。
Kendall Helmstetter Gelner

36

RESTfulサービスは、SOAPベースの(通常の)サービスよりもはるかに簡単に使用できます。これは、RESTが通常のHTTPリクエストに基づいているため、行われるリクエストのタイプ(GET =取得、POST =書き込み、DELETE =削除など)からインテントを推測できるためであり、完全にステートレスです。一方、リクエストコンテキストを含むメッセージエンベロープの概念がなくなるため、柔軟性が低いと主張できます。

私の経験では、SOAPは企業内のサービスに、RESTはパブリックAPIとして公開されるサービスに好まれています。

.NETフレームワークのWCFなどのツールを使用すると、サービスをRESTまたはSOAPとして実装するのは非常に簡単です。

関連する読み物:


9
私の理解では、WSDLファイルを使用してクラスを生成し、Webサービスメソッドを公開できます。確かに、これにより、関数の呼び出しと同じくらい簡単にサービスを利用できますか?あなたの見解をもう少し説明してください。
ハワード5

1
ハワード・メイ:プリミティブ・データ型のみを使用して関数を呼び出すと仮定すると、これは確かに当てはまります。しかし、その場合、SOAPが他の方法よりも簡単であると正確に主張することはできません。複雑なデータ型がある場合、WSDL処理は、同じWSスタックを持つ2つのマシン間で正常に機能する可能性があります。ただし、スタックを混在させるとすぐに問題が発生します。非互換性をデバッグするために手動でWSDLを掘り下げる必要があると、それほど簡単ではなくなります。
ジョセフ・ホルステン

1
2014年には、ほとんどすべてのプラットフォームが、古いプラットフォームを含め、WSDLをサポートしています。プロキシクラスにより、APIの使用が非常に簡単になります。プッシュサービスを実装していますが、RESTを検討していますが、メリットがまったくありません。
JohnOpincar 2014年

13

「Webサービス」とは、SOAPとWS- *標準セットを意味するものと想定します。(そうでなければ、RESTサービス「Webサービス」であると主張できます。)

正規の議論は、RESTサービスはWebの設計、つまりHTTPおよび関連するインフラストラクチャの設計により近いということです。したがって、RESTサービスを使用すると、既存のWebツールおよび手法との互換性が高くなります。

もちろん、詳細を掘り下げると、両方のアプローチが異なるシナリオで強みを持っていることがわかります。あなたが興味を持っているのはそれらの詳細ですか?


10

オーバーヘッドは、優れたアーキテクチャほど重要ではありません。

RESTはプロトコルではなく、優れたスケーラブルな設計を促進するアーキテクチャーです。RPCの自由度が高すぎると、設計が悪くなる可能性があるため、多くの場合、これが選択されます。

もう1つの理由は、既存のテクノロジー(主にプロキシ)を利用できるため、HTTPを介したRESTfulプロトコルの予測可能なコストです。RPCの初期コストは非常に低いですが、負荷が大きくなると大幅に増加する傾向があります。


7

RESTは実装に依存せず、はるかに透過的です。これは、パブリックAPI、特にAPIをマーケティングツールとして使用し、人々にデータを消費してもらいたいFlickr、Amazon、Diggなどの大きなWebサイトに最適です。彼ら、選択したスクリプト言語のバグの多いSOAPライブラリをデバッグしようとしている千人もの初心者開発者を手にしたくはありません。

SOAPとWSDLは、内部アプリケーションに適しています。ドロップインライブラリと既知の巧妙な人々が両端にいます。(そして、インターネット規模の負荷分散、HTTPキャッシングなどのことを気にする必要がないかもしれません。)次に、自己文書化されたAPIを取得し、ゼロの作業で型を保持します。


良い答えですが、SOAPがインターネット規模の負荷分散を実現できないということには同意しません。
HDave

7

このトピックに関するロイフィールディングの最も優れた論文を読んだ。彼は優れたケースを作り、間違いだったWAY先に、彼はそれを書いた自分の時間(2000年)の。



5

RESTを使用すると、変化しない操作(通常はGET動詞を使用)をキャッシュできます。つまり、クライアントによってキャッシュされるか、プロキシによってキャッシュされます。これは大きな勝利になる可能性があります。


8
それは単に「HTTPを正しく使用する」ことであり、RESTではありません。
aehlke 2009

3

RESTは基本的にWebサービスを実装するための単なる方法です。これは、HTTPを正しく使用して、ヒットしようとしているWebサービスにクエリを実行する方法にすぎません。

http://www.xfront.com/REST-Web-Services.html http://en.wikipedia.org/wiki/Representational_State_Transfer


1
RESTはHTTPとは何の関係もなく、完全にプロトコルに依存しません。ただし、一部のタイプのリソース中心のWebサービスに適しています。
aehlke 2009

0

超シンプルでスリムです。ブラウザでhttp動詞:GETを介して実行できます。ブラウザが一般的なhttp POSTリクエストを手動で簡単に実行できることがわかりません


1
チェックアウトフィドラー。これはブラウザではありませんが、コードなしでHTTP POSTを構築するための優れた方法です。fiddler2.com/fiddler2
Eric Sc​​hoonover、

私は通常、Charlesで既存の要求を変更してそれを行います。私もフィドラーを持っています。
Ray Lu

0

ここに1つのデータポイントがあります。AmazonはAPIをRESTとSOAPの両方の形式で提供しており、使用の85%はRESTです。

RESTは実装が簡単で、理解しやすく、パフォーマンスが向上しています。


7
「より高いパフォーマンス」についての言及はありますか?
James McMahon

3
85%の使用率はどこで得ましたか?これは知っておくと良いです(証拠が見られる場合)
schmoopy 2012年

3
手動でAPI仕様を読んだり、ページを印刷したりすることは、「右クリックしてサービス参照を追加する」よりも実装が簡単ですか?(VS2010)
BlueChippy

@schmoopy From Amazonブログ:aws.typepad.com/aws/2005/09/rest_vs_soap.html
joerage
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.