WebサービスをSOAPまたはRESTサービスとして公開することを選択する決定要因は何ですか?


30

SOAPの消費にはSOAPスタックが必要であることがわかります。したがって、クライアントは消費するのが難しくなります。つまり、POSTデータとヘッダーを正しくフォーマットしてから、データ構造ですが、RESTではクエリ文字列の引数を使用してHTTP GETリクエストを作成し、おそらくXMLであると思われるテキストを取得します。

それでは、SOAPの余分なオーバーヘッド/複雑さは何をあなたに与えますか、いつそれを必要としますか?

回答:


17

以前にREST APIを実装したことがあり、本当に気に入っています。一般に、REST over SOAP を実装する場合、クライアント/サーバーはより直交的であるため、クライアントに影響を与えることなく、サーバーをより自由に変更できます。この直交性は、HTTP動詞を介した、より抽象的で既に十分に定義された通信を使用しているためです。また、REST応答に埋め込まれたハイパーリンクを使用すると、APIを比較的簡単に拡張および拡張できます。クライアントは、これらの埋め込まれたリンクをたどって、人間がWebページ上のリンクをたどって詳細を「ドリルダウン」するような新しいリソースにアクセスすることになっています。

そうは言っても、SOAPを使用しなければならないと言われた同僚が何人かいて、いつもSOAPについて不満を言っていました。それで、私はこの2つをもう少し詳しく調べに行きました。

一般的に私が見つけたのは、何百、何千、何百万のクライアントがいるときに、RESTが高度に分散したアプリケーションに適しているということです。1つの理由は上記の直交性であり、もう1つはHTTPを使用しているため無料で取得できるキャッシュです。

SOAPは、クライアント用に小さなAPIをすばやく必要とし、スケーラビリティについてあまり心配していない場合に、より迅速に実行できる方法です。リソースを中心に構造化されたアーキテクチャがない場合も、RESTを実装できるようにアプリを再構築するのに時間がかかる可能性があるため、より適している場合があります。


2
キャッシュを取得するのは、HTTPではなく、リソースパラダイムと状態の不足です。
-Dietbuddha

@dietbuddha HTTPは、無料で実装を提供します。
ジェイコブライレ

17

些細な点かもしれませんが、RESTは完全にHTTPに基づいています。

SOAPはHTTPを必要とせず、好きなトランスポートを自由に使用できます。

SOAPメッセージは非同期かつ確実にルーティングできますが、RESTはほぼ同期パラダイムです。

RESTは、送信および受信するデータがどのように見えるかについては何も伝えません。WADLがありますが、ほとんどの場合、APIのドキュメントが正しいことに依存しています。SOAPには、データ記述にエラーが発生しにくいようにするためのXMLテクノロジーのサーカスがあります。WSDL、スキーマ...

結局のところ、RESTは基本的にHTTPに基づいたファイルシステムを取得します。あなたのシステムがそのパラダイムに適合することができるなら、それは良い選択かもしれません。


複数のトランスポートに言及する場合は+1。トランスポートに依存しないプロトコルが本当に必要な場合(SMTPなどの操作をサポートします)、RESTは使用できません。通常、HTTPは十分ですが、
...-sleske

6
RESTがどのようにHTTPに結び付けられているかわかりませんか?それが実装の詳細です。ほとんどのREST実装はHTTPを介して行われますが、FTPなどの他のプロトコルを介してRESTを実装できなかった理由はわかりません。
エダロルゾ

RESTは特定のプロトコルへの通信を制限しませんref:ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
nmtoken

7

それでは、SOAPの余分なオーバーヘッド/複雑さは何をあなたに与えますか、いつそれを必要としますか?

2つの間の最大の違いは、RESTはステートレスであると想定されているのに対し、SOAPはそうではないことです。実際には、多くのREST実装は、OAuthのようなものを介して、セッションの状態を実際に実装します。

もう1つの違いは、RESTは非常に「リソース」または名詞指向です。CRUD操作を介してリソースと対話します。このパラダイムに合わないものはすべて面倒で扱いにくいものになります。

一方、SOAPはRPC(リモートプロシージャコール)プロトコルです。パラダイムではなく、単なるトランスポート層です。


1
SOAPとRESTはどちらも、最終結果を達成するための手段にすぎません。タスクに適している場合とそうでない場合があります。したがって、RESTもトランスポート層と見なすことができます。ステート/レスビューでも保持されません。両方の種類のAPIと他の種類のAPIを使用して両方のフレーバーを設計できます。SOAPとRESTエンドポイントの両方を備えたデュアルAPIを使用することもできます。そして、XML-RPCエンドポイント。そして、Apache Thriftエンドポイント。Google Protocol Buffersエンドポイント。そして、他に何。結局のところ、すべては単なるRPCです。
JensG

4

RESTもポストを使用します。事実上、RESTを使用する場合、http動詞はどの操作が行われているかを示します。

RESTとSOAPは、インターネット経由でデータを渡すための異なる標準です。

両方を使用した場合、Webサービスを使用する人が.netとVisual Studioを使用していることがわかっていない限り、SOAPではなくRESTを使用することをお勧めします。通常、SOAPを使用するときにほとんどの作業を行う.net VSを除き、REST Webサービスを使用する方がはるかに簡単です。


4
JavaでもSOAPが適切にサポートされています。

4

言及することの1つは相互運用性です。.NETで記述されたアプリからサービスを呼び出し、サーバーがJava(またはその他の組み合わせ)で記述されている場合は、RESTを使用します。SOAP実装間のわずかな非互換性があまりにも多く見られたため、これ以上考慮する必要はありません。


2
同意する。SOAPは業界標準ですが、非常に複雑であるため、実装が壊れたり不完全なものになります。それに加えて、SOAPは通常、他のアプローチと比較してパフォーマンスとトラフィックに関して最大​​のフットプリントを持っています。
JensG

1

アプリケーションの要件に対してSOAPとRESTを測定するのに役立つシンプルで視覚的なガイドが必要な場合...

Vijay Prasad Guptaは、シンプルで役立つフローチャートをまとめました。

フローチャートへの直接リンク:https : //drive.google.com/file/d/0B3zMtAq1Rf-sdVFNdThvNmZWRGc/edit

記事へのリンク:https : //www.linkedin.com/pulse/20140818062318-7933571-soap-vs-rest-flowchart-to-determine-the-right-web-services-protocol-for-your-needs


それは実際にはかなりまともなフローチャートです。ここでの1つの答えがRESTに対するSOAPの利点を扱っていないことに驚きました。しかし、そのフローチャートはそうです。答えに固執するために、フローチャートにリンクする代わりに、ここにフローチャートを画像として含めることができると思いますか?
jleach

-2

今は2015年です。SOAPがもう死んでしまうことを期待していましたが、それでも悪臭のように残ります。最も基本的な「サンプル」アプリケーション以外の場合、SOAPサービスとの統合には課題が伴います。複雑なアーキテクチャであり、複数のレベルで多くのオプションがあり、複数の実装の癖と微妙な(それほど微妙ではない)非互換性が組み合わされています。私は一度も良い経験をしたことがありません。一方、RESTは簡単です。誰もがHTTPを理解しています。ほとんどの場合、JSONにはXML InfoSetよりも多くのユーティリティがあります。

SOAPの複雑さを理解するには、SOAPライブラリをプロジェクトに統合してみてください。Javaの場合、最も単純なApache Axis2クライアント(単純なADBデータバインディングを使用)は23個の新しいJARを取り込みます。23!ライブラリの膨張20MB。CXFも同様です。最後にカウントしたときの21個のJAR。

本当にしたい場合は、単純なHTTPライブラリでRESTを実行できます。


1
これは、より多くの暴言のように読み、見回答する方法
ブヨ

あなたが正しい。申し訳ありませんが、私は当時、SOAPスープにあふれていました:D
コーネルマッソン

1
90年代のCORBA / IDLについても同じ苦情がありました。その後、突然「Simple Object Access Protocol」..それは簡単になります!かっこいい!速くなります。10年後、それは複雑すぎると考えられています。JSON(IMAOは、学生のラボ設定でのデータ転送操作や、制限された "自分が何をしているのかを知っています"クイックフィックスの状況のた​​めの実際の四角い車輪)とRESTful opsが付属しています。リンス、繰り返し...
デヴィッドTonhofer

私は、SOAPに関するすべての本当の声明が暴言として読まなければならないことを恐れています。設計上企業向けであり、データを送信するだけのオプションが多数用意されています。私が使用したいくつかのSOAPインターフェースに関しては、それぞれが非常に冗長な混乱でした(正確にはSOAPの障害ではありませんが、SOAPへの親和性はブロートウェアへの親和性と相関します)。暴言して申し訳ありません。
-maaartinus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.