RESTfulなリソース同士が繋がっていくと何か面白そうじゃね?

前の記事で「近日中に書くよ」と言っておきながら近日中ではなくなってしまいましたが、記事を上げておこうと思います。

色々と夢物語を書こうかとも思ったんですが、今回はもうちょっと要点を絞って、「RESTfulなリソース同士が繋がっていくと、何か面白そうじゃね?」という話をしたいと思います。

まずは"リソース"の定義

リソースとは、それ自体を参照するに値するほどの重要性を持つものである。「それに対してハイパーテキストリンクを作成する、それに対して意見または反論する、その表現を取得またはキャッシュする、あるいは他の操作を実行する」ことがある場合は、それをリソースにすべきである。

RESTfulWebサービスの本を見るとこう書いてある訳ですが、"とにかく誰かが世界に向けて発信したいと思っている情報"がリソースかなと…自分的に解釈して話を進めていきます。
ここで、リソースを"データ自身"と"表現"に分けて考えてみます。リソースのURIにアクセスすると、内部的にはゴリゴリと色々動くかもしれないけど、結果的に、定義された表現形式に従って情報を返します。

こんな感じ…。

リソースを直列に繋げてみる

今度は2つのリソースを持ってきて、これを繋げてみる事を考えてみます。

URI Aにアクセスした場合(青い線)は、リソースが1つだけの場合と変わらず、表現Aが適用されて情報を取得する事ができます。
リソースBは、リソースAの情報を利用した上で何らかのデータ処理を行うリソースとして定義されたものとします。
今度はURI Bにアクセスした場合(赤い線)を考えると、リソースBの内部で処理が行われる訳ですが、リソースAと関連付いている為、リソースAにアクセスしてデータを取得した上で、それも利用してデータ処理を行います。
処理されたデータは最終的に表現Bが適用されて、レスポンスを返します。

リソースをいっぱい繋げてみる

2つ繋がるなら、後はいっぱいリソースを持ってきても、どんどん繋いでいけますよね。

ここでのリソースは、(これを処理するシステムがうまい事できたならば…)別にシステムの内部に閉じたものでなくても、外部のリソース同士を繋げて新しいリソースを定義するとかも簡単にできそうですよね。

何か面白そうじゃない?

こんな感じで、DBのテーブルをjoinするかのようにリソース同士を関連付けていけたならば、情報同士が掛け算的に結び付いていくので、何だか面白そうな情報を提供するサービスが作れそうな気がしませんか?
実際にインパクトのある具体例が思い付いたら、"何か面白そう"という感覚がもっと伝わるとは思うんですが、今のところあまり面白そうな例は思い付かないですね。(^^;ゞ
LL futureの前日Hackathonではid:kunitさんとこんな話をしていて、Maple4はこんな機構を持ったフレームワークになりそうです。

今度は、思い付かなかった具体例を考えてみながら、RESTで実現できる世界について、もうちょっと夢物語的な話を書いてみようかなと思っています。