web-dev-qa-db-ja.com

SOAPベースのWebサービスがRESTfulでないのはなぜですか?

RESTfulはアーキテクチャスタイルですが、SOAPベースのWebサービスがRESTfulに数えられない理由は何ですか?

以下のポイント( Wikipedia から)がSOAPに準拠していないことは、私にはわかりません。

  1. クライアントサーバー
  2. ステートレス
  3. キャッシュ可能
  4. 階層化システム
  5. オンデマンドコード(オプション)
  6. 均一なインターフェース
    • リソースの識別
    • これらの表現によるリソースの操作
    • 自己記述的なメッセージ
    • アプリケーション状態のエンジンとしてのハイパーメディア

[〜#〜] edit [〜#〜]:偶然出会ったばかり this 要約するとかなりうまくいきます。

RESTはRPCではない、RPCは「何かを行ういくつかのメソッドを定義する」と言いますが、RESTは「いくつかのリソースを定義すると、これらのメソッドを持つようになる」と言います。事前定義された一連のメソッドを介してやり取りし、代わりに標準のHTTP応答を受信できることを誰もが知っているURIが与えられた場合 http://www.peej.co.uk/ GETして、意味のある何かを受け取ります。それを変更するためにPUTを試行し、それに干渉する権限がないため、意味のあるHTTPエラーコードを受け取ります。

47
bryantsai

SOAPはRPCパターンに従います。 A SOAP APIは、コードから呼び出すことができる一連のメソッドとそのパラメーターおよび戻り値を記述します。これをネットワーク表現に変換するマーシャリングステップがあります。

RESTがRPCになることはありません。 REST APIは、一連のリソースと、それらに作用する一連の動詞(通常、HTTPのGET、POST、PUT、DELETE)を記述します。

質問に直接回答するには:SOAPは主にポイント6に違反します(API全体で動詞の統一されたセットを提供しません)。また、ポイント2に違反します(サーバーは各クライアントの状態を維持できます) 、およびその結果としてポイント3も(状態がキャッシングを防止します)。

47
Trevor Johns

RESTとSOAPは同等の概念ではありません。

残り:

  • 1つのトランスポートプロトコル(HTTP)に依存します。
  • そのプロトコルの特定の機能(動詞GET、POST、PUT、DELETE、キャッシング、ヘッダー、および事前定義されたエラーコード)を最大限に活用します。
  • やり取りされるメッセージの形式については何も述べていません。ただし、HTTP動詞とURLは実行するアクションをすでに定義しているため、メッセージ本文にはデータのみが含まれている必要があります。
  • メッセージセキュリティは、トランスポートプロトコル(HTTPS)によって提供され、ポイントツーポイントのみです。メッセージをエンドツーエンドで保護する場合は、自分で行う必要があります。
  • もともとはオブジェクトに対する単純なCRUD操作を目的としていました。

石鹸:

  • トランスポートプロトコルに依存しない(HTTP、FTP、TCP、UDP、名前付きパイプ、共有メモリ、または電子メール)。
  • トランスポートプロトコルがテキストを送受信できることのみが必要です(たとえば、HTTPではPOST動詞のみが使用されます)。
  • やり取りされるメッセージの形式を厳密に定義します。 SOAPメッセージには、データ、その上で実行するアクション、ヘッダー、および失敗した場合のエラーの詳細が含まれます。
  • メッセージのセキュリティはWS- *標準によって提供され、エンドツーエンドです。
  • もともとは任意のRPC呼び出しを対象としています。

上記のリストの項目2と3は、非互換性の主なポイントです。

56

REST=の目的の1つはキャッシュ可能性です。これは、リソースをuri(クエリ文字列)で識別する必要があるためです。soapでリクエストが投稿されます。そのため、異なるリクエストに対して同じuriがありますしたがって、リソースはurによって一意に識別できません

5
Piotr Zolnierek

RESTはhttpプロトコルにのみ準拠しています。

4
Pierreten

SOAPプロトコル:SOAPは、定義済みの構造を持つプロトコルです。

  1. POST:SOAPリクエストは常にHTTP本文を必要とするため、HTTPメソッドはPOSTです。将来のHTTPメソッドの詳細POST(これらは、 REST)、しかし今のところ、これは常にPOST SOAPの場合)であると仮定しましょう
  2. SOAPアクション:空は、HTTPリクエストURIの意図を意味します。
  3. Content-Type:SOAPは通信の言語としてXMLを使用するため、これは常にtext/xmlです。
  4. これがSOAP要求であることを示すには、XML名前空間(xmlns)が必要です。
  5. はルートSOAP要素で、リクエストとレスポンスを記述します。

RESTful API設計では、リソースの観点からシステムを破壊し、WebサービスのベースURIで定義されたエンドポイント(操作とも呼ばれる)を介してこれらのリソースへのアクセスを提供します。アクセスは、標準のHTTPメソッドを使用して行われ、認証メカニズムによって制御されます。リソースの構成は、ステータスを伝えるHTTPステータスコードを使用したリクエストとレスポンスを通じて提供および取得されます。 1.リソースは、RESTfulにされるシステムに存在するエンティティです。たとえば、ブログのウェブサイトの場合、これらはブログ、投稿、コメントにすることができます。 2. EndPointまたは操作は、これらのリソースにアクセスできるメカニズムを提供します。たとえば、特定のブログのすべてのブログ投稿をリストするエンドポイントは、/ blogs/{blogId}/postsのGETになります。 3.ベースURIは、エンドポイントを介してリソースを利用できるWeb URIの場所を定義します。実際の例として、Googleブロガーのbase_uriは https://www.googleapis.com/blogger/v です。 4. HTTPメソッドは、RESTのシンプルさがあります。RESTfulAPI設計では、リソースに対する操作は、標準のHTTPメソッド、主にGET、POST、PUT、DELETEを通じて行われます。その他のHTTPメソッド- OPTIONS、HEAD、PATCHも使用される場合があります。

2
somya4 jain4

Restful: RESTは、HTTPプロトコルを使用してWebサービスを構築するためのアーキテクチャスタイルであり、Webサービスはリソースとして扱われ、GET、POST、DELETEなどの基本的なHTTPメソッドが使用されます。リソースに対する標準アクションを識別するため。RESTfulWeb API(RESTful Webサービスとも呼ばれます)は、HTTPおよびREST原則を使用して実装されたWeb APIです。

Soap: SOAPは、もともとSimple Object Access Protocolとして定義されていたもので、構造化された情報をXML形式で交換するためのプロトコル仕様です。

2
Android Genius

SOAP vs REST Webサービス

1)SOAPはプロトコルですが、RESTはアーキテクチャスタイルです。

2)SOAPは使用できませんRESTこれはプロトコルなので、RESTはSOAP Webサービスは概念であり、HTTP、SOAPなどの任意のプロトコルを使用できるためです。

3)SOAPはサービスインターフェイスを使用してビジネスロジックを公開するのに対し、RESTはURIを使用してビジネスロジックを公開します。

4)SOAPは厳密に準拠する標準を定義していますが、RESTはSOAPのような標準をあまり定義していません。

5)SOAPはRESTよりも多くの帯域幅とリソースを必要としますが、RESTはSOAPよりも少ない帯域幅とリソースを必要とします。

6)SOAPは独自のセキュリティを定義しますが、RESTful Webサービスは基になるトランスポートからセキュリティ対策を継承します。

7)SOAPはXMLデータ形式のみを許可しますが、RESTはプレーンテキスト、HTML、XML、JSONなどの異なるデータ形式を許可します.

RESTful Webサービスは、SOAP Webサービスよりも優先されます。

1
themoonraker13