質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

SOAPについて

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 2,765
退会済みユーザー

退会済みユーザー

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サーバを含めたソフトウェアシステムを指すのでしょうか?
クライアント(検索をしたノード)は通常含めないのですよね?
質問がわかりづらいかもしれませんが、よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+1

サービスという言葉をわざと使うのは、そのシステムが提供するものに意識を集中したいからです。中がデータベースかどうかとかを気にしていると理解しにくいです。。
昔、Service Oriented Architecture が騒がれた時代があって、その時の有名な例題は航空会社ごとの飛行機予約システムとホテルの予約システムをAPIでつないで、旅行予約サービスを作ると言うものでした。
Webシステムが、形はないけど価値があるものを提供する時それをWebサービスと言います。
Amazoneのサービスは簡単に買い物ができて素早く届くというものであって、その付加価値で利益を出してるわけです。つまり、ものを売っているというよりもサービスを提供しているのです。
それで、サービスは形がないので、サービスとサービスを組み合わせて別のサービスを提供したり(マッシュアップと呼ばれています)、利用者に便利なように変形することが可能です。
そのようなことをしようとすると、各サービスがAPIを提供してなければなりません。かつ、そのAPIが標準化されてなければなりません。
そこで産まれたのがSOAPです。
まあ、その後歴史的にいろいろあったのですが、海外のメジャーなサービスが必ずAPIを提供していることを考えると、その考え方は間違ってなかったと思われます。
日本のITでは、サービスという考え方が弱く、APIを提供しているシステムが少ないので、このあたりを理解しにくいかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/15 23:08

    Web UIの時、サーブレットを用いるとすると、サーバサイドではサーブレットのUI部分(html生成部分)から解釈クラスを呼び出し、そして、その結果生成するhtmlをクライアントに送るのですよね?
    そうすると、mit0223さんの解答においては、Web UIの時の話というのはブラウザのようなものがクライアントサイドのソフトウェアになるのでしょうか?

    また、そこにSOAPを用いると、さらにSOAPを使うための(解釈するための)SOAPクライアントが必要となり、サーバーサイドではSOAPを使って、情報を送信するためのSOAPサーバが必要になる、ということでしょうか?

    キャンセル

  • 2016/09/16 00:24

    はい、そういう意味です。

    キャンセル

  • 2016/09/16 08:44

    ありがとうございました。
    おかげで理解できましたが、今度そういった本を読んでみようと思います。

    キャンセル

+1

※以下は、言葉の正確な正しさより、
意味の分かりやすさを優先した説明です。


インターネット経由でのメッセージを「入力」として受け取り、
処理を行ってから「出力」を返します

この説明をベースに、イメージをふくらませてみましょう。

function ()

おなじみの関数やメソッドにたとえますと、

function ("http://sample.com/somthing/1234")

引数にURLなどを与えて呼び出し、戻り値が目的のものが「WebAPI」、
副作用が目的のものが「Webサービス」と考えると分かりやすいです。
逆に副作用や動的要素がなく、たんにHTMLを返すものが「Webサイト」。

もちろん、「SOAPが~DBが~」と、いくらでも複雑化できますが、
べつにSOAPじゃなくてRESTでも、DBがなくても、
Webサービスと言っていいので、実装を隠蔽して捉えましょう。

一番シンプルな理解としては、パソコンの内側のオブジェクト指向と、
外側のネットワークを、「分散システム」として同一視します。
つまり、PCでもWebでも、APIやアプリを区別せず同一視します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/13 09:15

    「副作用」でしょうか?
    ちょっとイメージつかないです。。
    どういったものがこの「副作用」に当たるのでしょうか?

    キャンセル

  • 2016/09/14 10:41 編集

    ここで言う「副作用」とは、たんなる戻り値やHTMLではなく、
    コンピュータを使って何らかの効果が生じることを意味します。

    たとえば、タスク管理のWebサービスから、
    リマインダーのメールが届くとか。
    通販サイトで注文すると、商品が送られてくるとか。

    キャンセル

  • 2016/09/14 18:58

    回答ありがとうございました。

    キャンセル

0

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サーバを含めたソフトウェアシステムを指すのでしょうか? 
クライアント(検索をしたノード)は通常含めないのですよね? 

その理解で合っています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/13 09:13

    なるほど、こういった事情があるのですね。
    非常に参考になります。

    SOAP以外の分散オブジェクト技術(DCOM、RMI、CORBA)というのはHTTPベースではいということでしょうか?
    HTTPベースではないから駆逐されていったのかなといった印象を持ちました。

    >C#でクラス書いてメソッド書いてVisualStudioにWebサービス化させればそれがサービスのコントローラになって、そのWebサービスには仕様情報も自動的に付属しています(WSDLといいます)。このWSDLをVisualStudioに読ませると、アクセスするためのクライアント側クラスが勝手に生成されて、そのクラスのメソッド呼ぶだけでサーバの同じメソッドが実行されるようになるんです。

    「Webサービス化させる」という表現がありましたが、これはyubaさんが提示された例で言いますと、C#でコントローラを書く、という意味でしょうか?
    そして、そのインターフェースの仕様書のことをWSDLと言って、それを見ると、どのようにメソッド呼び出したらいいかわかる、ということでしょうか?
    さらに、「アクセスするためのクライアント側クラス」というのは同一のマシン上ではなく、別のマシンからアクセスするときに使われるもので、このクラスは別のマシンに生成されるのでしょうか?
    それとも同一のマシン上に生成されるのでしょうか?

    質問が多くて、申し訳ありませんが、お答えいただけると、嬉しいです。

    キャンセル

0

もう少しだけ視野を広げたほうが理解が深まるかもしれません。
通信の勉強をすると出てくるプロトコルというものがあります。
このプロトコルは階層に分かれており、電気的・物理的規約な決め事をしているPhysical層から、
電子メール(SMTP),ファイル転送(FTP),WWW(HTTP)などの決め事をしているApplication層まで様々な通信の決め事があります。
SOAPについてもService層の1つと言われており、他にメジャーなものでいうとJSONなどが使われています。
Webサービスとはプログラムだけでなく、そのプログラムを構成している言語やそのプログラムが利用するDBやそれらを動かすOSのようなミドルウェア、そのミドルウェアを動かすためのハードウェア、通信するためのネットワーク回線を指すと思っています。
「このWebサービス遅くてイライラする・・・」というのはもしかするとサーバーのスペックが足りない、ネットワークに負荷がかかりすぎている、そもそもプログラムのアルゴリズムが複雑すぎるなど色々な要因があります。
Webサービスはこの層の組み合わせと、その組み合わせを動かすためのものすべてであると僕は思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/13 11:34

    Service層について調べてみましたところ、OSI参照モデルのアプリケーション層をさらに分割した時に現れる層の一つという結果が得ましたが、s.t.さんはこの意味でService層という言葉を使われていますでしょうか?

    キャンセル

  • 2016/09/13 11:44

    はい、そうです。ただ僕も、プレゼンテーション層のUIプロセス・コンポーネントと明確な使い分けができていないのでこのあたりは曖昧になってしまっています。

    キャンセル

  • 2016/09/14 18:58

    回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる