質問: SOAPについての質問です。 色々調べているのですが、いまいち分かりません。 というのもその説明にあたって、「Webサービス」と言う言葉が登場してくることが多いのですが、その「Webサービス」と言う言葉がいまいちわからないからです。 まず、wikipediaによると、 https://ja.wikipedia.org/wiki/Webサービス にありますように 「HTTPなどのインターネット関連技術を応用して、SOAPと呼ばれるXML形式のプロトコルを用いメッセージの送受信を行う技術、またはそれを適用したサービス」 とあります。 また、 https://thinkit.co.jp/free/books/2/5/1/ には 「Webサービスとは、ネットワーク上で、マシンとマシンをつなぐソフトウェアシステムのことです。この場合の「サービス」とは、プログラム処理のことをあらわします。」 とあります。 また、 http://www.utj.co.jp/xml/dev/soap/soap1_1.html には 「まずWebサービスとは何でしょうか。WEBサービスの「サービス」とはプログラム処理のことを指します。 通常のプログラムでは入力を受け取り、処理を行って出力を返します。同様の流れをWeb上で行うのがWebサービスです。 つまりインターネット経由でのメッセージを「入力」として受け取り、処理を行ってから「出力」を返します。 従ってWebサービスとは、Webサイトに限られるわけではなくWeb経由でアクセスすることのできるあらゆるサービス(プログラム)と捉えることが出来ます。」 とあります。 以上をまとめると、webサービスとはソフトウェアシステムでマシン間の通信を担うのがSOAPと言うことになりそうですが、webサービスがいまいち分かりません。 amazonのようなサイトで検索フォーむに文字を打ち込み、検索結果を得ることを考えます。 大体の流れとしては、コントローラがリクエストを受け取り、そのリクエストを見て、そしてデータベースサーバ等にアクセスすることになると思うのですが、この時の「webサービス」というのはこのAPサーバとDBサーバを含めたソフトウェアシステムを指すのでしょうか? クライアント(検索をしたノード)は通常含めないのですよね? 質問がわかりづらいかもしれませんが、よろしくお願いします。
回答: SOAPのことを解説する文脈で「Webサービス」という言葉が出てくるのはなぜかと言いますと⋯ マシン間の通信を、どうプログラミング的に扱い易くするかという問題はずっと以前からあって、その方法の一つが「分散オブジェクト」と呼ばれる手法です。いきなりややこしそうな言葉が出てきました。 こう考えてください、普通「オブジェクト」といったらメモリ上に存在するデータであり、それに対してアクセスするのも自機のメモリ内での話です。他のマシンに存在するオブジェクトのメソッドをまるで自機のメモリ内にあるものであるかのようにアクセスできるようにする仕組み、ということです。 これができれば、オブジェクトのメソッドを叩くコードを書けばそれが通信処理になっています。メソッドを叩くのは、引数を渡して呼び出し戻り値を受け取るという行為ですから、これはリクエストを投げてレスポンスを受け取る一問一答型の通信ですね。 あっそれHTTPに似ている! というのはもう少し先に気付くことにするとして。 こういう分散オブジェクト技術は90年代くらいにいろんなのが出てきました。WindowsのDCOMとかJavaのRMIとか。あとすべての開発言語で使える大統合分散オブジェクト技術だ!と華々しく登場して大コケして消えていったCORBAとか。 そういう戦国の動乱をやっている中で順調にWebが成長してきたことで、一問一答型の通信ならもうHTTPに乗せるのが当たり前でしょという時代になってきたことからMicrosoftあたりが中心になってまとめたのがHTTPベースのSOAPなわけです。 メソッド呼び出しというものを特定の言語にあまり縛られない形でXMLで表現してHTTPに載せてやりとりします。便利なんですよ。C#でクラス書いてメソッド書いてVisualStudioにWebサービス化させればそれがサービスのコントローラになって、そのWebサービスには仕様情報も自動的に付属しています(WSDLといいます)。このWSDLをVisualStudioに読ませると、アクセスするためのクライアント側クラスが勝手に生成されて、そのクラスのメソッド呼ぶだけでサーバの同じメソッドが実行されるようになるんです。 なぜ「Webサービス」というのか、それはもともと一問一答式のサーバを実現する手法としていろいろあった分散オブジェクト技術のうち、Webを通り道にしたもの、という意味合いになります。 その上で⋯ > > この時の「webサービス」というのはこのAPサーバとDBサーバを含めたソフトウェアシステムを指すのでしょうか? > > クライアント(検索をしたノード)は通常含めないのですよね? > > > その理解で合っています。