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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

4回答

6094閲覧

SOAPについて

退会済みユーザー

退会済みユーザー

総合スコア0

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2016/09/12 14:16

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

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


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

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

function ()

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

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

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

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

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

投稿2016/09/12 16:19

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/13 00:15

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

2016/09/14 01:50 編集

ここで言う「副作用」とは、たんなる戻り値やHTMLではなく、 コンピュータを使って何らかの効果が生じることを意味します。 たとえば、タスク管理のWebサービスから、 リマインダーのメールが届くとか。 通販サイトで注文すると、商品が送られてくるとか。
退会済みユーザー

退会済みユーザー

2016/09/14 09:58

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

0

ベストアンサー

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

投稿2016/09/12 15:10

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/12 23:57

質問が二点あります。 一点目です。 >Webシステムが、形はないけど価値があるものを提供する時それをWebサービスと言います。 私自身そのような認識だったのですが、wikiによりますと、「WebサービスというのはSOAPを用いているもので、そうでないものはWebアプリケーションと言う。(ただし、現在は単にWeb上で提供されるサービスといった意味合いで用いられる。」 といった記述があります。 mit0223さんの言われているWebサービスは「Web上で提供されるサービス」といった意味でまちがいないでしょうか? 二点目です。 APIと言う言葉の意味について確認したいです。 提示されている航空会社の例で言いますと、それぞれの航空会社の提供するAPIを用いることで、それぞれの航空会社の提供する予約システムを用いることができるわけでしょうか? APIはプログラムにアクセスするためのインターフェースという認識でよろしいでしょうか?
mit0223

2016/09/13 00:22

1点目 Wikiの「WebサービスというのはSOAPを用いているもの」は狭義でかつ古いといえると思います(まだ Microsoft, IBM, HP に聞くとこの答えが変えるかもしれませんが・・Google,Facebook, Amazone に聞けば鼻で笑われるでしょう)。今や、Web の API は REST+JSON が主流ですし、もうすぐ WebSocket に変わっていくでしょう。 2点目 > APIはプログラムにアクセスするためのインターフェースという認識でよろしいでしょうか? ここは、あえて「サービスにアクセスするためのインターフェース」と言ってください。航空会社の予約サービスにアクセスするAPIです。航空会社は旅客サービスに加えて予約サービス(ここもあえて予約システムと言わずに予約サービスと呼んでください)を提供しているのです。APIのPが Programing なので API と呼ぶことがふさわしくないかもしれません。予約をプログラミングしたいわけではないので。どちらかというサービス間連携インタフェースです。
退会済みユーザー

退会済みユーザー

2016/09/13 02:45

Webに関する文脈でAPIという言葉が出てきた時は、サービス間を連携させるためのインターフェースであるといってよろしいのでしょうか? また、SOAP=APIなのでしょうか? インタフェースという意味ではこの等式は正しいと思うのですが、SOAPはHTTPの上でXMLを用いて、情報をやり取りできるプロトコルですが、これをAPIとしていいのでしょうか? 自分で書いていてAPIと言ってよさそうだとは思いましたが、どうなのでしょうか?
mit0223

2016/09/13 08:46

> Webに関する文脈でAPIという言葉が出てきた時は、サービス間を連携させるためのインターフェースであるといってよろしいのでしょうか? そう思います。 > また、SOAP=APIなのでしょうか? SOAP は、 API そのものというよりも API の標準化規格です。サービス間連携するときは、API の受け側と送り側の開発者の間で利害が対立しがちです。ロジック的なことで対立するならまだいいのですが、日付のフォーマットだとか、相手のアドレスの指定方法、認証方法などベースとなる部分で揉めたくないですよね。なので、標準化を作ったということです。その時代は OASIS に大きな権威があったので、そこで決まったことにはみんな従っていこうと言う空気でした。 参考: https://ja.wikipedia.org/wiki/Web_Services_Interoperability ここに出てくるメンバー(IBM、マイクロソフト、BEAシステムズ、SAP、オラクル、富士通、ヒューレット・パッカード、インテル)を見ると、その時代には権威があったことがわかると思います。今なら、Google、Facebook、Amazone ぬきで何いってんの?って感じですが。 ちょっと気になって調べてみると、楽天のAPIはSOAPとREST+JSONの両方をサポートしてますね。 参考:https://webservice.rakuten.co.jp/api/itemsearch/ あと、今までのご質問を見ていて思ったのですが、SOAの本を一冊読まれることをおすすめします。SOAP を広めようとしていた時代の考え方がわかると思います。 (正直、私のここの回答でちゃんと背景が説明できてるとは思えなく・・・)
退会済みユーザー

退会済みユーザー

2016/09/13 13:55

そうすると、SOAPはAPIの一つの設計の仕方と言えそうですね。 ちなみに、SOAPはWebサービス間だけではなく、クライアント側が使うことも可能ですよね? と言いますのも、私の使っている本には(単純な株価情報をクライアントに提供するサービスの構築を考えています) 「クライアントからのデータアクセスにSOAPのようなウェブサービスを提供することはできるでしょう。 作業の層が一段増えることになりますが、セキュリティを高めることになりますし、クライアントにとってもシステムの統合がしやすくなります。」 作業の層が一段増えることになる、と書かれているのですが、これはおそらく純粋なXMLファイルとSOAPを使った場合を比較しての話なのだと思うのですが、作業の量は一段増えるのでしょうか? さらにクライアントも別のシステムとの統合が可能になる、と書いていますが、これはSOAPを使って他のサービス(システム)から利用できるから、という認識でよろしいでしょうか?
mit0223

2016/09/13 14:38

> ちなみに、SOAPはWebサービス間だけではなく、クライアント側が使うことも可能ですよね? はい、使えます。 > これはおそらく純粋なXMLファイルとSOAPを使った場合を比較しての話なのだと思うのですが、作業の量は一段増えるのでしょうか? いえ、比較対象は Web UI だと思います。Web UI だけを作る場合と、 APIを作ってからクライアントUIを作るのでは、後者のほうが作業が一段増えているということだと思います。 > さらにクライアントも別のシステムとの統合が可能になる、と書いていますが、これはSOAPを使って他のサービス(システム)から利用できるから、という認識でよろしいでしょうか? いえ、ここでは、クライアント上でのマッシュアップの話をしていると思います。宿泊予約サービスをAPI とクライアントにわけて開発した後、航空会社の予約サービスに接続して格安パック予約システムに発展させることができるとか、そっち方向の話をしていると思います。もちろん、ご指摘のように宿泊予約サービスを他のサービスから利用できるというメリットも有りますが、統合ということばから反対方向だと思います。
退会済みユーザー

退会済みユーザー

2016/09/13 23:55

SOAPを使わないと、他のサービスのAPIを使うことはできないのでしょうか? この例で言いますと、株価の単純な情報を取得するようなWebサービスを構築し、クライアント側からのアクセスをSOAPで行った場合は他のサービスをSOAPにより利用することができるけれど、クライアント側からのアクセスをSOAPではなく、例えばただのXMLファイル形式でやりとりした場合は他のサービスを使うことはそれなりに難しくなるということでしょうか? これは自分がJavaでアプリを開発している時に、Javaで書かれた他のアプリのある部分を使うのは容易だが、PHPで書かれたプログラムを利用することはできないのと同じ理屈でしょうか?
mit0223

2016/09/14 03:41

> SOAPを使わないと、他のサービスのAPIを使うことはできないのでしょうか? APIは、実装上どんな方法でもできますが、そのインタフェース仕様を0から決めるよりSOAPベースにしたほうが開発が楽ですよね。さらに SOAP であれば、ライブラリもあるので、開発も楽です。また、別の開発者が開発したものと連携する場合、仕様の整合性をとるのも楽になります。ですので、SOAPを使いましょうということです。
退会済みユーザー

退会済みユーザー

2016/09/14 09:58

回答ありがとうございました。
退会済みユーザー

退会済みユーザー

2016/09/14 12:52

申し訳ないのですが、もう一点だけ質問させてください。 > これはおそらく純粋なXMLファイルとSOAPを使った場合を比較しての話なのだと思うのですが、作業の量は一段増えるのでしょうか? いえ、比較対象は Web UI だと思います。Web UI だけを作る場合と、 APIを作ってからクライアントUIを作るのでは、後者のほうが作業が一段増えているということだと思います。 と回答されていますが、この場合Web UIにはXMLファイルをどのように解釈するかという情報がコーディングされていると思います。 SOAPを使わない場合、表示などのUIの部分と解釈の部分があると思います。 一方で、SOAPを使った場合、その解釈の部分をSOAPが担うのですよね? そして、UIの部分はやはり実装する必要があります。 そうすると、作業が一段増えているようには思えません。 もちろん、SOAPを用いることにより、明確に層が別れる気はします。 「作業が一段増える」とはどういう意味なのでしょうか?
mit0223

2016/09/14 23:02

> 作業が一段増えているようには思えません。 たしかに、ロジックの開発量から言うとそれほど増えてないのかもしれませんが、UI部分と解釈部分の間にネットワーク経由のAPIをかませるという作業が増えるという意味だと思います。
退会済みユーザー

退会済みユーザー

2016/09/15 05:58

お返事ありがとうございます。 「ネットワーク経由のAPI」でしょうか? UI部分と解釈部分に存在するこの部分の意味がよくわからないのですが、これはどういうものなのでしょうか?
mit0223

2016/09/15 07:05

UI部分も解釈部分も Java で開発するとして、 Web UI ならサーブレットのUI部分から解釈クラスを呼び出せばすみますが、SOAP経由となると、クライアント:UI部分+SOAPクライアント、サーバ:解釈部分+SOAPサーバ という作りになるので、 SOAPクライアントとSOAPサーバの部分が追加で開発になります。これを作業が増えると言ってるのだと思います。
退会済みユーザー

退会済みユーザー

2016/09/15 14:08

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

2016/09/15 15:24

はい、そういう意味です。
退会済みユーザー

退会済みユーザー

2016/09/15 23:44

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

0

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

投稿2016/09/13 01:33

s.t.

総合スコア2021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/13 02:34

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

2016/09/13 02:44

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

退会済みユーザー

2016/09/14 09:58

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

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/12 15:55

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/13 00:13

なるほど、こういった事情があるのですね。 非常に参考になります。 SOAP以外の分散オブジェクト技術(DCOM、RMI、CORBA)というのはHTTPベースではいということでしょうか? HTTPベースではないから駆逐されていったのかなといった印象を持ちました。 >C#でクラス書いてメソッド書いてVisualStudioにWebサービス化させればそれがサービスのコントローラになって、そのWebサービスには仕様情報も自動的に付属しています(WSDLといいます)。このWSDLをVisualStudioに読ませると、アクセスするためのクライアント側クラスが勝手に生成されて、そのクラスのメソッド呼ぶだけでサーバの同じメソッドが実行されるようになるんです。 「Webサービス化させる」という表現がありましたが、これはyubaさんが提示された例で言いますと、C#でコントローラを書く、という意味でしょうか? そして、そのインターフェースの仕様書のことをWSDLと言って、それを見ると、どのようにメソッド呼び出したらいいかわかる、ということでしょうか? さらに、「アクセスするためのクライアント側クラス」というのは同一のマシン上ではなく、別のマシンからアクセスするときに使われるもので、このクラスは別のマシンに生成されるのでしょうか? それとも同一のマシン上に生成されるのでしょうか? 質問が多くて、申し訳ありませんが、お答えいただけると、嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問