Webアプリケーションのマッシュアップおよびクロスドメイン通信のアーキテクチャ、分類

あらかじめ、結構勝手な観点から語った内容なので、その辺ご容赦ください。


Webアプリケーションのマッシュアップおよびクロスドメイン通信のアーキテクチャについて、一度文章として整理してみたほうがよいかなと思ったので、まとめてみる。まず前提として、この議論における主体は3種類に分類されている。*1

マッシュアップWebアプリケーション
Webサービスプロバイダの提供するデータを利用したサービスを提供する主体。
Webサービスプロバイダ
元となるデータをWeb経由で配信するサービス主体。マッシュアップWebアプリとは異なるサイト(ドメイン)で提供されるものとする。
ユーザ
実際にWebブラウザを開いて上記のサービスを利用する主体。

マッシュアップ実現のためには、このうちのどれか1つがクロスドメイン通信に協力的である必要がある。
以下、それぞれの場合について詳細および利点/欠点を挙げる。

マッシュアップWebアプリケーションがクロスドメイン通信に協力的である場合

いわゆる、Cross-Domain Proxyを設置する方法による。ユーザからのリクエストを受け取り、代理でWebサービスプロバイダに送信し、レスポンスを返す。ここでは広義にプロトコルおよびデータ変換が含まれるものも含める。

利点
  • Webサービスプロバイダ側にクロスドメインの対応の必要がない。つまりXMLJSONなどの標準的なインターフェースのみでよく、スクレーピングを用いればそれすらも必要ない。
  • ユーザ側の事前対応や利用クライアントの制約がない。
欠点
  • マッシュアップサービス側に不必要なネットワーク/CPU処理負荷が発生する。
  • 認証コンテンツを扱う場合の処理がセキュアでない(ユーザのパスワードなどを直接取り扱う)、あるいはWebサービスプロバイダ側の協力が必要(OAuthなどの認証プロトコルの実装)
  • Webサービスプロバイダが非インターネット(≒イントラネット)上に存在している場合には、マッシュアップWebアプリも同一ネットワーク内に存在する必要がある

Webサービスプロバイダがクロスドメイン通信に協力的である場合

ここで「協力的である」とは、マッシュアップWebアプリケーションにクロスドメイン通信のために特殊な実装/運用負荷を与えないための配慮がなされているという観点で語る。具体的にはマッシュアップサービス側のサーバを介さず、ブラウザから直接マッシュアップするクライアントサイドマッシュアップを可能にするインターフェースを実装しているものとする。

ブラウザ上でのクライアントサイドマッシュアップの実現方法として、JSONP、crossdomain.xml、iframe fragment identifier、window.name などがある。その他 XMLHttpRequest level 2, XDomainRequest, Cross-document messaging、などがあるが個々については省略する。

利点
欠点
  • 実現方式が多様で一定していない。
  • 各実現方式は、現状 ugly hackであるか、将来の規格であるためブラウザの対応およびその普及が未知数

ユーザ側がマッシュアップに協力的である場合

クロスドメインマッシュアップ実現のために標準ブラウザ以外の機能、具体的にはGreasemonkey, AIR, Gearsなどを利用する。この場合、Webサービスプロバイダ、マッシュアップWebアプリの双方が非協力的であっても、マッシュアップは可能になる*2(例:はてなブックマークやdel.icio.usコメントをページに埋め込むGreasemonkeyスクリプト

ユーザ側が協力するべきこととして、ブラウザ拡張のようなソフトウェアをクライアントに事前インストールする形式が予期されるが、そこまで行かない場合もある。たとえばWebサービスプロバイダ側が協力的であるような場合においては、マッシュアップWebアプリが非協力的であってもユーザ側の若干の協力によりマッシュアップが達成できる場合がある。具体的にはブックマークレットが用いられる。(例:iKnowブックマークレット

利点
  • その他2者の協力は必須でないため、組み合わせおよび可能性は存在するWebアプリケーションの数あるとみてよい。
  • サービスリクエストに対する特殊な認証処理が必要ない(直接ブラウザCookieの利用やBasic認証などの仕組みが利用できる場合が多い)
欠点
  • ユーザ側の事前準備に対する協力が必要になる(Greasemonkey, AIR, Gearsのインストール、ブックマークレット登録など)ため、サービスとしてのスケール力が弱い。
  • マッシュアップできるデータの対象はユーザ自身がアクセス権限をもつ情報のみに限定される*3

*1:個々のケースにおいてはこれらの名称による分類は若干不適切な場合もある

*2:ただしこの場合、能動的にマッシュアップサービスを行っているわけではないので、マッシュアップWebアプリという名称分類は若干不適切か

*3:たとえば複数ユーザをまたがった統計、および与信情報などのデータは無理