web-dev-qa-db-ja.com

RESTとWebサービスの違い

RESTとWebService(SOAP)の違いは何ですか、facebook apiを見て、HTTPヘッダーといくつかのパラメーター(おそらくxmlまたはnon)を使用し、xmlで結果を返します。それ以外の場合はSOAPはまったく同じ、HTTPヘッダー+ xmlパラメーターを実行し、ヘッダー+ xmlを返します。

RESTは、認証されたトークンも必要とします。それ以外の場合、SOAPは、認証およびその他の情報に使用されるトークンとまったく同じトークンであるhttpセッションを使用します。 SOAPはRESTの少し高度なバージョンであることがわかりますか?

または、パフォーマンスに関する他の考慮事項はありますか? RESTについて読むと、非常に高レベルのクライアントサーバー通信について話すだけですが、SOAPでもまったく同じことが言えます。 RESTとSOAPの正しい境界を定義できる場所を誰かに教えてもらえますか。

多くのSOAPを.netで透過的に使用しますが、現在すべてが非常にスムーズに実行されているRESTに注意を払う価値があるかどうかを知りたいだけです。

私はRESTがアーキテクチャであり、SOAPがプロトコルであることを知っていますが、私の質問は詳細です。現在、SOAPのASP.NET WebService実装はRESTアーキテクチャ?

57
Akash Kava

SOAPは、HTTP経由でXMLとしてデータを送受信するためのプロトコルです。

典型的なWebServiceは、それを呼び出す方法を記述するWSDLのメソッドです。これらをどのように構成するかについての実際の規則はないため、常に多くのAPIドキュメントが必要です。

通常、これは次のようなものになります(ASP.NETの場合):

  • HTTP POST to mysite.com/products.asmx/ListAllProducts-製品のXMLリストを返します
  • HTTP POST to mysite.com/products.asmx/GetProduct-投稿されたコンテンツのSOAP XML)に基づいて製品のXMLを返します
  • HTTP POST to mysite.com/products.asmx/UpdateProduct-SOAP投稿コンテンツのXMLに基づいて製品を変更

RESTは、すべてのメソッドを構造化するための規則です。

  • HTTP GET from mysite.com/products-すべての製品をリストするXMLまたはJSONを返します
  • HTTP GET from mysite.com/products/14-製品14のXMLまたはJSONを返します
  • HTTP POST to mysite.com/products/14-製品14をHTMLフォームで投稿したものに変更します。
  • HTTP DELETE to mysite.com/products/14-製品14を削除します
  • HTTP PUT to mysite.com/products-新しい製品を追加します

だからRESTはブラウザのURLが期待するように動作します。そのようにすると、より自然であり、慣例として理解するのがはるかに簡単です。すべてのREST API同様の方法で動作するため、各システムの癖を学ぶのに長い時間を費やす必要はありません。

70
Keith

私にとって、RESTfulアプローチを使用して実装されたサービスは、アクセシビリティの点でSOAPまたはRPCを使用するサービスに勝ちます。WSDLに基づいてスタブとタイを生成するツールが利用可能な比較的クローズドシステムただし、これはそれほど重要ではありません。ただし、幅広いクライアントがアクセスして利用できるサービスを作成する場合は、RESTサービスの均一性とそれらのサービスの使いやすさ大きなプラスです。つまり、重いRPCスタックは必要なく、HTTP要求を作成するだけです。

これがあなたの質問に完全に答えているかどうかはわかりませんが、あなたが言うように、SOAP(そしてあなたがクライアントとサーバーを制御する)に基づいて動作するシステムを持っている場合、私は理由がわかりませんまた、一部のサービスは当然、RPCベースのアクセスにより適しています。その場合、SOAPインターフェイスがより適切です。

パフォーマンスの観点から、SOAPを使用しない場合、1つ以上のレイヤーがクライアントおよびサーバーテクノロジースタックから効果的に削除されるため、他のすべてが同等であれば、RESTfulインターフェイスを公開するサービスがそこに勝ちます。

13
Andy