web-dev-qa-db-ja.com

SOAP Webサービスは「POST」httpメソッドのみをサポートしますか

インタビューの1つでこの質問に直面したので、SOAP Webサービスが「POST」httpメソッドのみをサポートするか、サーバー側で他のメソッドを受け入れる方法があるかどうかを教えてください。

62
evgeniy44

私は常にPOSTを使用しましたが、 W3C標準 に従って、SOAPはPOSTとGETメソッドの両方をサポートします。

編集:いくつかの調査の後、 ここ を見ることができるように、それは完全に真実ではないようです。 POSTとGETはHTTPトランスポートプロトコルのメソッドであり、SOAPはできるため、GETを使用することは理論的に可能ですHTTP経由で使用されます。

しかし、ご存じのとおり、GETはクエリ文字列にリクエストを含めます。 SOAP要求(XMLメッセージ)は通常、クエリ文字列に含めるには複雑すぎて冗長なので、ほとんどすべての実装(たとえばJAX-WS)はPOSTのみをサポートします。

79
Eaque

スレッドは3歳ですが、これと同じ質問を自分に与え、ウェブで間違った答えを見つける人がまだまだたくさんいると思います。質問に対する答えは「いいえ」です。GETメソッドも使用できます。

ここにあるSOAP仕様によると、 https://www.w3.org/TR/2007/REC-soap12-part0-20070427/#transport GETとPOSTメソッドを使用して、httpでSOAPメッセージを交換できます。 HTTP要求の本文でPOSTメッセージを伝達するためのHTTP SOAPメソッドの使用は、SOAP要求応答メッセージ交換パターン。 HTTP GETの場合、SOAP応答メッセージ交換パターンと呼ばれるパターンが使用されます。この2つのパターンの主な違いは次のとおりです。

最初のタイプの対話では、HTTP POSTの本文内のデータを使用して、HTTP要求の宛先であるURIによって識別されるリソースの状態を作成または変更できます。 2番目のタイプの相互作用パターンは、HTTP GETリクエストを使用して、リソースの状態を変更せずにリソースの表現を取得する機能を提供します。最初のケースでは、SOAP固有の懸念事項は、HTTP POST要求の本文がSOAP処理モデルに従って)処理する必要があるSOAPメッセージであることです。 POSTセマンティクスに準拠するために必要なアプリケーション固有の処理の一部。 2番目の場合、予見される典型的な使用法は、要求されているリソースの表現がHTMLまたは実際のXMLドキュメントではなく、SOAPメッセージとして返される場合です。つまり、応答メッセージのHTTPコンテンツタイプヘッダーは、メディアタイプが「application/soap + xml」であることを識別します

そのため、GETメソッドとPOSTメソッドの両方を使用できます。もう1つは、実際には主にPOSTメソッドが使用されることです。

悪いことは、SOAPがPOSTのみを使用するため、RESTfulサービスをRESTサービスと比較すると、SOAPの利点として、SOAPでは使用できないキャッシングをもたらすことです。これはまったく間違っています。

16