はじめに
近年、Googleが提供しているようなWebベースのサービス型アプリケーションが注目を集めています。一般にWebサービスと呼ばれる(またはWeb API として提供される)これらのソフトウェアは、何らかのリソースや機能を提供するインターフェースを公開し、外部からサービスに接続することで、さまざまなソフトウェアの部品として機能することができます。
多くの場合、Webサービスはインターネットに接続されたデバイスとブラウザがあれば利用することができるため、通常のプラットフォーム固有のアプリケーションに比べて配置や管理が容易で、利用者の負担も少ないというメリットがあります。インストールやアンインストールといった作業が不要であり、自分がどこにいて、どのデバイスを使っても同じソフトウェアとデータを共有できるためです。
ある程度Webサイトやアプリケーションの開発経験があれば、何らかのWebサービスを利用したことがあるでしょう。GoogleやYahoo!、Windows Liveなどが提供している地図や、Amazonが提供している商品検索などが代表的な例だと思います。これらのサービスは、公開されているAPIに基づいてサーバーに要求し、目的の情報を取得することができます。
Webサービスを広く公開するには、永続的にWebサーバを運用し続けなければならないため、Webベースのサービス型アプリケーションの開発は、個人や小規模な組織にとって敷居が高く、実装する機会も少ないかと思います。そこで、本稿では模擬的なWebベースの辞書サービスを開発し、「Webサービス発信側」を体験していきます。
本稿のサンプルプログラムはPHP 5を用い、WebサーバにはApache 2.2を利用しています。クライアントの動作確認はInternet Explorer 6で行っています。
Webアプリケーションとの違い
WebアプリケーションとWebサービスは、基礎となる概念が異なります。Webアプリケーションは、ブラウザ上で動作するWebベースのアプリケーション全体を指しますが、Webサービスはクライアント側のプラットフォームを特定しません。これは、サーバ側のプログラムの応答に大きな違いがあるからです。
Webアプリケーションは、HTTPリクエストを受けるとサーバ側アプリケーションでデータを処理し、結果をHTMLに整形してクライアントに返します。そのためWebアプリケーションは常にWebサイトを閲覧しているブラウザを対象としていると言えます。HTMLの本来の目的は文書を表すことなので、データの構造化は「見出し」や「段落」といった文書構造でしか表すことができません。
これに対して、Webサービスは要求の結果を抽象化された構造的なデータで返します。要求に応じて画像や音声を自動生成するサービスも考えられますが、多くの場合はXML形式が利用されます。XMLにはデザインを強制する情報を含まないため、データをどのように視覚化するかはクライアントに委ねられます。Webサービスの場合は、データモデルとビューが完全に分離されているのです。
もともとWebサービスはXML形式のSOAPプロトコルを利用したリモートプロシージャコールによるソフトウェアを連結させるための仕組みのことを表しました。そのため、厳密には「応答結果がXMLであればWebサービス」というのは乱暴です。しかし、現在ではURIが何らかのソフトウェア的なリソースを表し、URIにアクセスすることでリソースを入出力できる一連のシステムをWebサービスと呼ぶ傾向があります。この場合でも、URIが一種のリモートプロシージャのように機能するという点ではSOAPの思想を受け継いでいます。