Nov 21, 2006

[思い付き]On-browser Mashupを支援する JavaScript API

On-browser Mashupを支援する、「汎用の」JavaScript APIって存在するのだろうか。私の知る限りはないような気がするのだけれども。もしこうした試みをご存知の方がいらっしゃったらご連絡いただけると幸い。

ここではとりあえずJSON/JSONPだけ考える(が、XMLをレスポンスとして返すAPIであっても話は同じである)。あるJSON形式でレスポンスを返すWeb APIがあったとする。このWeb APIを使うには、APIのURLと入出力の形式を知っていなければならない。また、JSONPにはコールバック用のインタフェースが用意されているが、ただのJSONには用意されていない。また、そのコールバック関数の名前が何であるのかはそのJSONP Web APIに依存している。

つまり何が言いたいかと言えば、これらのWeb APIは、確かに外部インタフェースを提供するものとして有意義だが、抽象化の度合いが「インタフェース」と呼ぶのに十分なほどには高くはないし、統一性もない、ということだ。

このことが、Mashupと言えば、サービス事業者やサービス個人が提供する、Google Maps APIを利用したサービスばかりが取り沙汰される理由なのではないか、もっとOn-browserというかClient-side Mashupが流行るためには何をすべきなのか、というのが私の問題意識である。

さて、であるならばまず抽象化してやればよい。そのために、Web APIと、それをwrapしたClient APIを実現するJavaScriptモジュールのペアで提供する。いや必ずしもペアである必要はなく、Client APIモジュールを別途提供するリポジトリを運営してもよいし、ひとつのWeb APIに複数のClient APIモジュールが対応付けられてももちろんよい。また、Client APIの入出力の型は厳密に(しかしルーズに)定める必要がある。

結果的に以下くらいのごく簡単なインタフェースでプログラムできるようになるとよい。

var weatherSearch = new LivedoorWeatherSearch();
weatherSearch.setDate(new Date());
var result = weatherSearch.execute("東京");

コンポジションも簡単に実現できるだろう。単純な例を挙げると、郵便番号を入力して住所を検索し、その住所の天気予報を知りたければ、

var postalNumberSearch = new PostalNumberSearch();
var postalNumberResult = postalNumberSearch("110-0013");
var weatherSearch = new LivedoorWeatherSearch();
weatherSearch.setDate(new Date());
var weatherSearchResult = weatherSearch.execute(postalNumberResult.address);

と書けるとかね。もっとまじめに考えるならイベントを定義して、イベント駆動型のコードを書けるようにしても面白いね。郵便番号欄を更新した場合には住所を検索し、その住所を元に天気予報を検索して表示する。住所を更新した場合には郵便番号を検索して郵便番号の入力フォームを更新、同時に天気予報を検索して表示する、とかね。

こうしたClient APIの提供に関しては、先例がないわけではない。例えば、Google AJAX Search APIは、内部的にはGoogleの提供する検索サービスのWeb APIをwrapするClient APIモジュールと、その結果をレンダリングするためのサポートモジュールのセットであると言ってよい。

だが当然のことながら、どうしようもなく汎用性に欠ける。「腹へった」を検索しても、ピザ屋の広告は出るかもしれないが、ピザの出前は届かない。

まず、現状はGoogleのWeb APIしか利用できない。将来的にはextensiveに外部Web APIを利用するためのClient APIが追加されるかもしれないけれど。だが、もしそうなったとしてもレンダリングモジュールはGoogle AJAX Search APIの提供するものを使わざるを得ないため、結果の利用方法についてのオプションが限られる。

もうひとつはコンポジションに制約がある。Google AJAX Search APIを使ってできることは、一入力に対してひとつ以上の検索サービスに対して一段階の問い合わせを行い、それぞれの結果を得られるというだけである。

まずは軽くジャブ程度に。

(そのうち続きを書く)

冒頭にも書きましたが、もしこうした試みをやっている方、もしくはやっている方をご存知の方がいらっしゃったらコメント欄やトラックバックなどでご連絡いただければ幸いです。ここには書けませんが、当方ではこうした試みを前提とした、もう少しadvancedな技術シーズを研究・開発中です。協業できるかもしれません。NDAが必要な場合を含めてご相談できると思います。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com