この講義では、「Webサービス」の基本について知り、WebサービスにアクセスするプログラムをJavaで作成し、またWebサービスを自らで提供できるようにすることを目標とします。
Webアプリケーションは、図1.1.1.1[Webアプリケーション]のように「Webサーバ」が「Webブラウザ」と通信を行います。
それに対してWebサービスは、図1.1.1.2[Webサービス]のように「Webサーバ」が「プログラム」と通信を行うものです。
言い換えると、Webサービスとは、「Webのブラウザを使わずに、プログラム中からWebにアクセスして必要な情報を取り出せるサービス」ということになります。
Webサービスの具体例を見てみましょう。
もっともよく利用されているWebサービスに、"Google Web API"があります。このAPIは、Javaなどのプログラムから、Googleにアクセスするためのものです。プログラムからGoogleにアクセスして、検索結果をプログラムで処理できます。例えば、ある言葉に関するGoogleの検索件数を毎日カウントする、といったプログラムが作成できます。
輸入製品を扱うプログラムがあるとします。このプログラムでは、日々変化する円相場の情報を入力する必要があります。では、この円相場の情報は誰がどのように入力すのでしょう?やはり、人間が円相場の情報を探してきて、入力するのでしょうか?
ここで、どこかのサイトで、現在の円相場がわかるWebサービスが公開されていたとします。そうすると、プログラムからこのWebサービスにアクセスして、現在の円相場の情報を取得すればよいのです。円相場の情報を自分で入力しなくても、プログラムに反映することができます。
「札幌まで行きたい!」という人がいます。
JR,バス、飛行機などの各交通機関でWebサービスを提供していたとしましょう。プログラムは、○月○日の各交通機関のWebサービスにアクセスし、それぞれの料金を調べ、いちばん安い交通機関のチケットを購入しておきます。
「ギリシャまで旅行に行きたい!」
プログラムから旅行会社のWebサービスにアクセスします。旅行会社のWebサービスは、ほかのWebサービスにアクセスしながら、飛行機・宿泊などを自動的に決めていきます。
Webサービスは、クライアントとは(ネットワーク的に)離れていることが想定されています。しかし、ネットワーク的に離れたサービスにアクセスしようと思っても、たいていのサイトではファイアウォールによってWebとメール以外のポートは閉じられています。
しかし、80番のHTTPはだいたい使えます。そこで、Webサービスでは、トランスポート層のプロトコルとしてHTTPを使うのです。まれに、SMTPを使う場合もあります。
Webサービスで利用されるデータには、後で見るようにXMLが使われています。そのため、Webサービスを構成するプログラムは、どんな言語で記述されても良いのです。
SOAPとは、Webサービスに対する「要求」と、クライアントへの「応答」のフォーマットです。XMLで記述されています。
先ほどの具体例に出てきたGoogle Web APIでは、「こんな言葉を含むページを調べたい」という要求と、「こんなページがありました」という応答がSOAPで記述されています。
WSDLとは、Webサービスの具体的な内容を書いてある文書です。Webサービスを利用するためにはどこにアクセスすればよいのか、またどのようなメソッドが使えるのかなどの情報が記述されています。Java言語でのインタフェースのようなものです。SOAPと同じくWSDLもXMLで記述されています。
Google Web APIでも、このWebサービスの内容を示すWSDL文書が付属しています。
WSDLから、Webサービスにアクセスするクライアントプログラムを生成できます。例えばJavaのWebサービス開発キットであるJWSDPでは、wscompileというツールでWSDLからJavaプログラムを生成します。クライアントプログラムからはメソッドを呼び出すだけであり、具体的な処理内容はWebサービス側にあるので、これでうまくいくのです。
また、既存のプログラムからWSDLを生成することもできます。
企業内に2つの情報システムがあり、それぞれまったく別のスタイルで実装されているとします。そして、この2つシステムを統合する必要が生じました。しかし、2つのシステムはまったく違った構成となっており、簡単には統合できません。一から作り直すのも大変です。
そこで、それぞれの情報システムに、Webサービスの機能を追加してみます。
HTTPとXMLという標準技術によって、2つのシステムへのアクセスが楽になります。このことにより、システムの統合がやりやすくなります。