web-dev-qa-db-ja.com

WSDL vs REST長所と短所

関連:

Webサービスの代わりにRESTを使用する理由は?

SOAPまたはREST(RESTfulな方法でHTTP/XMLを意味します)を使用してWebサービスを実装するかどうかを決定するとき、何を意識し、何を考えるべきか?私はこれがすべてのものに適合するサイズではないと思うので、どのように使用するかをどのように選択するのですか?.

100
Howard May

次のリンクは、長所と短所を含むWSDLとRESTに関する有用な情報を提供します

いくつかの重要なポイントは

1)SOAPは分散コンピューティング環境向けに設計され、RESTはポイントツーポイント環境向けに設計されました。

2)WADLを使用して、RESTサービスのインターフェースを定義できます。

http://www.ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest
http://ajaxonomy.com/2008/xml/web-services-part-2-wsdl-and-wadl

33
Howard May

2つのプロトコルの使用法は、実際には非常に異なります。

SOAP(WSDLを使用)は、ドキュメントの受け渡しを中心とした重いXML標準です。これの利点は、要求と応答を非常に適切に構成でき、DTDを使用できることです。欠点は、XMLであり、非常に冗長なことです。ただし、これは、2つの当事者が厳密な契約を結ぶ必要がある場合(銀行間通信など)に適しています。 SOAPを使用すると、ドキュメントにWS-Securityなどを重ねることもできます。 SOAPは一般にトランスポートに依存しないため、必ずしもHTTPを使用する必要はありません。

RESTは非常に軽量であり、HTTP標準に依存して動作します。便利なWebサービスをすぐに起動して実行できるのは素晴らしいことです。厳密なAPI定義が必要ない場合は、これが最適です。ほとんどのWebサービスはこのカテゴリに分類されます。古いバージョンを使用しているユーザーがバージョンを指定している限り、APIの更新によってAPIが破損しないようにAPIをバージョン管理できます。 RESTは本質的にHTTPを必要とし、形式に依存しません(XML、JSON、HTMLなど何でも使用できます)。

一般にRESTを使用します。これは、派手なWS- *機能が必要ないためです。ただし、WSDLを使用してコンピューターにWebサービスを理解させる場合は、SOAPが適しています。 REST仕様は通常、人間が読める形式のみです。

108
Kekoa

WSDL(「SOAP」を意味する)を「重量級」と見なす。どうして重い?ツールセットがすべての「重いリフティング」を行っている場合、なぜそれが重要なのでしょうか?

複雑なREST AP​​Iを使用する必要はありません。私がそうするとき、私はWSDLが欲しいと思うと思います、私のツールは喜んでプロキシクラスのセットに変換するので、メソッドと思われるものを呼び出すことができます。代わりに、重要なRESTベースのAPIを使用するには、かなりの量の「軽量」コードを手で記述する必要があると思います。

それがすべて終わったとしても、人間が読むことのできるドキュメントをコードに翻訳していることになり、人間がそれを間違って読むリスクが付随します。 WSDLは機械で読み取り可能なサービスの説明であるため、「間違って読む」のははるかに困難です。


ご注意:この投稿以降、私はhaveがやや複雑なRESTサービスを扱う機会がありました。実際、WSDLまたは同等のものを望みました。実際、多くのコードを手書きで書かなければなりませんでした。実際、開発時間のかなりの部分が、異なるサービス操作を「手作業で」呼び出すすべてのコードのコード重複の除去に費やされました。

19
John Saunders

これはおそらく上記の投稿のいくつかのコメントとして実際に属しますが、それを行う担当者がまだいないので、ここに行きます。

SOAPとRESTでよく引用される多くの賛否両論が、2つの技術の実際の価値や限界とほとんど関係がないことは興味深いと思います。おそらくRESTで最も引用されている長所は、「軽量」であるか、「人間が読める」傾向があることです。あるレベルでは、これは確かに真実です。RESTはエントリに対する障壁が低くなります-SOAPよりも必要な構造が少なくなります(ただし、優れたツールは主にここでの答え-SOAPツーリングのあまりにもひどいは非常に恐ろしいです)。

ただし、初期エントリコストを超えて、RESTの印象は、リクエストURLの形式とほとんどのRESTサービスによって交換されるデータの複雑さの組み合わせから来ると思います。 RESTは、よりシンプルで人間が読みやすいリクエストURLを推奨する傾向があり、データもより消化しやすい傾向があります。しかし、これらはRESTに固有であり、単なる偶発的なものです。より単純なURL構造は、アーキテクチャの直接的な結果ですが、SOAPベースのサービスにも同様に適用できます。より消化しやすいデータは、定義された構造の欠如の結果である可能性が高くなります。これは、データ形式をシンプルに保つか、多くの作業に取り組むことを意味します。したがって、ここで利点となるSOAPの追加の構造は、実際にずさんなデザインを有効にし、そのずさんなデザインがテクノロジーに対するDigとして使用されることです。

したがって、コンピューターシステム間の構造化データの交換で使用する場合、RESTがSOAP(またはその逆)より本質的に優れているかどうかはわかりませんが、それらはまったく異なります。上記のREST vs SOAPの比較は、動的タイピングと静的タイピングの比較に適しています。動的言語がトラブルに陥りがちなのは、システムの長期的な保守と維持です(長期的には、1年または2年と言っていませんが、5または10と言っています)。 RESTが時間とともに同じ課題に直面するかどうかを確認するのは興味深いでしょう。分散型の情報処理システムを構築している場合、通信メカニズムとしてSOAPに引き寄せられると思いがちです(これは、送信およびアプリケーションプロトコルの階層化と柔軟性のためです)上記の通り)。

しかし、他の場所ではRESTがより適切だと思われます。 AJAXは、ペイロードとは関係なく、クライアントとサーバーの間で1つの大きな例です。このタイプの接続の寿命についてはあまり気にしません。使いやすさと柔軟性は最低限必要です。同様に、外部サービスにすばやくアクセスする必要があり、時間の経過に伴う相互作用の保守性を気にかけようとは思わなかった場合(これもRESTが終わる場所であると想定しています)何らかの方法で費用がかかります)、すぐに乗り降りできるようにRESTを選択します。

とにかく、それらは両方とも実行可能なテクノロジーであり、特定のアプリケーションに対してどのようなトレードオフを行うかによって、適切に(または不十分に)役立ちます。

15
sfitts

RESTはプロトコルではありません。それは建築様式です。または必要に応じてパラダイム。つまり、SOAPであると定義されている方がはるかに緩やかです。基本的なCRUDの場合、Atompubなどの標準プロトコルに頼ることができますが、ほとんどのサービスでは、それ以上のコマンドがあります。

消費者として、SOAPは、言語サポートに応じて、祝福または呪いになる可能性があります。 SOAPは厳密に型付けされたシステムで非常にモデル化されているため、静的に型付けされた言語で最適に機能します。動的言語の場合、それは簡単に不要で不必要になります。さらに、クライアントライブラリのサポートは、Javaおよび.NETの世界以外ではそれほど良くありません。

5
troelskn

私にとって、Word Webサービスを使用するときは注意が必要です。 SOAP Webサービス、REST Webサービス、または他の種類のWebサービスについて話しているかどうかを常に指定する必要があります。すべてをWebサービスと名付けた場合はもうできません。

基本的にSOAP Webサービスは長年非常に確立されており、SOAP仕様に基づいてそれらと通信する方法を説明する厳密な仕様に従っています。 REST Webサービスは少し新しくなり、通信プロトコルを使用していないため、基本的にシンプルに見えます。基本的に、REST Webサービスを使用するときに送受信するものはプレーンXMLです。人々は、SOAPのようなより洗練された通信プロトコルを扱う必要なく、望むようにxmlを解析できるため、それが好きです。

私にとってRESTサービスは、SOAP Webサービスの代わりにサーブレットを作成する場合とほとんど同じです。サーブレットはデータを受け取り、データを返します。データの形式はxmlベースです。必要に応じて、xml以外のものを使用することも考えられます。たとえば、xmlの代わりにタグを使用できますが、これはRESTではなく、何か他のものになります(xmlは本質的に軽量ではないため、重量の点でさらに軽くなる可能性があります)。それをまだWebサービスと呼びますか?はい、できますが、それは現在の標準に準拠しません。すべてのWebサービスを呼び出し始めると、これがここでの主要な問題になりますが、やりたいようにできるので、物事の相互運用性の側面を失います。つまり、Webサービスと交換されるデータの形式は、もはや標準化されていません。そのため、サーバーとクライアントはデータの形式に同意する必要がありますが、SOAPではこれはすべて事前に定義されており、サーバーとクライアントは同じ標準に従っているため互いに知らずに相互運用できます。

SOAPで嫌いなのは、理解するのが難しく、手動でクエリを生成できないことです。しかし、コンピューターはそれを非常に上手く行うことができるので、ここで明確にする必要があります。エンドユーザーがWebサービスのクエリと応答を直接使用することを想定していますか、またはWebサービスが、正規化された標準?

4
Laize Laville

SOAP:SMTP経由で転送することもできます。これは、Eメールの単純なテキスト形式を使用してサービスを呼び出すことができることを意味します

SOAPメッセージをさまざまな言語のそれぞれのオブジェクト構造に変換するには、Webサービスコンシューママシンに追加のフレームワーク/エンジンが必要です。

REST:WSDL2.0はREST Webサービスの記述もサポートするようになりました

サービスを軽量にしたい場合に使用できます。たとえば、携帯電話、PDAなどのモバイルデバイスからの呼び出しなどです。

3

システムが企業内に限定されているエンタープライズシステムの場合、クライアントをほぼ制御できるため、石鹸を使用する方が簡単で適切です。クラス(プロキシ)を作成するさまざまなツールがあり、OOPまたは.net環境(ほとんどの企業が使用する)に一致する通常のJavaを実行しているように見えるため、簡単です。 。

クライアントはタイピングが厳密ではないjavascriptやhtmlまたはその他を使用できるため、インターフェイスを公開するためのインターネット向けアプリケーション(Twitter APIなど)にはRESTを使用します。 RESTは、よりリベラルであることの方が理にかなっています。

また、インターネット向けクライアント(World Wide Web)の場合、soapインターフェースからの純粋なxmlよりも、restインターフェースからのjsonまたはxmlの解析が簡単です。 javascriptでプロキシを使用するのは難しく、javascriptはオブジェクトを自然にサポートしません。 JavaScriptでRESTを使用している場合、通常はjson文字列を解析するだけで、すぐに終了します。インターネットに面したインターフェイスは通常非常にシンプルであるため(ほとんどの場合、その単純な解析)、通常は一貫性を要求しないため、RESTで十分です。

エンタープライズアプリケーションの場合、RESTは適切ではないと思います。なぜなら、トランザクション、セキュリティ、厳密な型指定、スキーマはエンタープライズアプリケーション開発において非常に重要であり、SOAPがより適しているからです。

私の結論は、SOAPはエンタープライズシステム用、RESTはインターネットまたはWWW用です。交換して使用することもできますが、最終的にはジョブに適切なツールを使用しないと困難になることがあります。

私の悪い英語でごめんなさい。

3
monte

RESTを防御するために、HTTPおよびアドレス可能度の原則に厳密に従います。読み取り操作ではGETを使用し、更新操作ではPOSTなどを使用します。これははるかにクリーンなアプローチであることがわかります。 Oreillyの本RESTful Web Servicesにはこれよりもはるかに優れた説明があります。読んでいただければ、RESTアプローチを好むと思います

2
Nick Allen

以前の回答には多くの情報が含まれていますが、指摘されていない哲学的な違いがあると思います。 SOAPは、「RPCの後継となる、オブジェクト指向のプラットフォームおよびプロトコルに依存しない最新のオブジェクトを作成する方法」に対する答えでした。 RESTは、「HTTPをWebで非常に成功させた洞察をどのように利用し、それらを分散コンピューティングに使用するか」という質問から開発されました。

SOAPは、分散プログラミングをプログラミングのように見せるためのツールを提供するものです。 RESTは、分散インターフェースを簡素化するスタイルを課そうとします。これにより、分散HTMLページが相互に参照できるように、分散リソースが相互に参照できるようになります。それを行う1つの方法は、リソースの「CRUD」操作(作成、読み取り、更新、削除)を(ほとんど)制限しようとする試みです。

RESTはまだ若いです。「人間が読める」サービス向けですが、イントロスペクションサービスなど、またはプロキシの自動作成を排除していません。ただし、これらは標準化されていません(執筆中)。 SOAPはこれらのことを提供しますが、(IMHO)はこれらのことを「のみ」提供しますが、RESTによって課されるスタイルはその単純さからWebサービスの普及をすでに促進しています。初心者のサービスプロバイダーは、使用する必要がある特定のSOAP提供機能がない限り、RESTを選択することをお勧めします。

私の意見では、「グリーンフィールド」APIを実装していて、可能なクライアントについてあまり知らない場合、推奨するスタイルとしてRESTを選択し、インターフェイスをわかりやすくする傾向があります。簡単に開発できます。クライアントとサーバーについて多くのことを知っていて、両方の生活を楽にする特定のSOAPツールがある場合、RESTには信心しません。

1
shaunc

クライアント側のツールセットは1つです。また、SOAPに精通していると、他のサービスも利用できます。最近、ますます多くのサービスがRESTfulなルートを進んでいます。そのようなサービスのテストは、簡単なcURLの例で行うことができます。ただし、両方の方法を実装し、クライアントからの幅広い利用を可能にすることはそれほど難しくありません。

いずれかを選択する必要がある場合は、RESTをお勧めします。簡単です。

1
ahanson

私はこの議論が古いものであることを知っていますが、すべての答えを読んでコメントした後、私は誰もが2つのシステムの違いに関する最も重要な点を見逃したと信じています:SOAPデータを確認しますが、検証し、定義された厳密な型指定に保持します。 WSDLは、データ形式、データ型、および正規表現パターンスタイルルールの追加を許可し、データの一部が要求/応答で許可される回数と許可される回数を定義します。 。他方の休息には、これらのメカニズムはありません。

SOAPは、複雑で重い階層データを送信できるため、複雑で重いです。 RESTはプレーンテキストであり、起点と終点がルールをソートします。

SOAPはすべてのデータルールがドキュメントに埋め込まれているため、ビジネスに依存しません。

SOAPとRESTの違いは、SOAPが自己完結型のビジネス指向スキーマであることです。 RESTはテキストドキュメントです。

0
CrazyMerlin

構成設定を変更するだけで、WSDLを展開するWCF Webコンポーネントを他の用途に簡単に移行できます。コードを変更することなく、HTTPを介して名前付きパイプ、tcp、カスタムプロトコルなどを使用できます。 WCFコンポーネントは、セキュリティ、双方向呼び出し、トランザクション、同時実行性などの設定も簡単にできると思います。

RESTでは、HTTPにほとんど制限されます(多くの場合これで問題ありません)。

0
Tad Donaghe