kagamihogeの日記

kagamihogeの日記です。

RESTful Webサービス

REST っていう考え方は、すんごく大雑把に言うと「せっかくだから俺はこの Web をもっと活用するぜ」というもの。本来の REST の思想は Web とは無関係で、もっと抽象的な、本書の言葉を借りれば「アーキテクチャスタイル」と呼ばれるもの。ただ、全国的に Web という上手くいってる実例があるから、REST は Web の上にのっかちゃえばいいじゃん、と言った現実主義的な側面もある。この辺の定義や各概念の関係ってゴチャゴチャしてるんで、一回整理したり振り返りたくなった時に本書を参照するとよさそう。

RESTful Web サービスというのを、自分なりにこれまた大雑把にまとめてみる。

まず、HTTP には GET,PUT,DELTE,POST,HEAD というメソッドがあるから操作はこれに限定すればシンプルになるよね、という統一インタフェース。他にも HTTP でいいじゃん的な思想は随所に見られて、たとえば操作の結果のエラーというかステータスは HTTP のステータスコードに頼っちゃえばいいよね、とか。

次に、HTTP メソッドの対象となるのはリソース。ぶっちゃけ URL のこと。世の中の色んなモノをリソースというか URL で表現して、メソッドは統一インタフェースだけ、にしちゃえばシンプルにならね? というのがいわゆる ROA(リソース指向アーキテクチャ)というもの。

メソッドの結果はテキストなり HTML なり XML なり JSON なり何でもいいけど、この「表現」の設計は RESTful Web サービスでは重要になる。本書でも議論されてるんだけど、上手く設計できれば Web アプリケーション(ブラウザで人が見る)と Web サービス(プログラムで処理される)と区別する必要なくなるかも? という論点はかなり大事な気がする。キーワードは (X)HTML。

HTTP のステートレス性とか URL の接続性とか、他にも色々あるんだけど……続きは本書で、ってことで。

とまぁ、本書の内容をざっと自分なりにまとめて見た。そこで思うのは、REST の考え方はシンプルで良く出来てるな、と。ただ、コレをきちんと設計するのってやっぱ骨だと思うんだよね、現状では。ここまで「分散」を意識して設計するほどの価値のアプリケーションってどんなものだろう? とか俺のような木っ端プログラマは思ってしまうわけですよ。や、Web アプリと Web サービス区別する必要なくなったらスゲー利益得られるよね、とか、REST の利点ってソレナリに理解はしたつもりなんだけども。

それを踏まえた上で、たとえば、S2Flex2 なんてシロモノがあって、コレはバイナリ通信なんていうある種先祖返り*1的なことを行う。けど、ソレで間に合っちゃうというか充分なシステムってのもあるわけで。

まぁ結局のところは場合によりけり・ケースバイケースなんだろうなぁ。俺が関わって [る|きた]アプリや興味あるテクノロジの文脈において REST にそこまでの旨味とか興奮を感じてないってだけの話なのかもー、とも思うし。

ちょっと話は飛ぶけど、本書の最後の方で Java のクラスに REST の概念をマッピングするフレームワークとして Restlet ってのを紹介してた。コレ面白いなぁと。てか、Restlet の説明見ててやっと、Microsoft Tech-Ed 2008 Yokohama - 8/29(金) - kagamihogeのblog のときのセッションで「REST 時代のアーキテクチャは、URL で表現される REST のインタフェース層と、OOP で表現されるアプリケーション層のマッピングが重要になるのでは、と考えている。それはまるで、RDBOOP のレイヤ間で O/R マッピングの技術が発展したように」という発言してたのが腑に落ちてきたというか。ああ、うん、これはクールだわ。

あと、本書をちゃんと読みこなすのって結構難易度高いよね、とも思った。なんでかっていうと、抽象的な理論の部分と、現実こうなっちゃってるよね、を両方抑えないといけないから。HTTP や HTML の仕様、それらを現実に動かしてるサーバとかブラウザの挙動、実装するためのプログラミング言語、ネットワーク上でセキュリティをどう確保するか*2トランザクションの話、WS-* なんちゃらー関連で定義される代物たちとの比較、AJAXJSONP みたいな黒魔術的ハッキング技術との絡み……挙げ始めればキリないほど色んな技術があるんだよね、REST の周辺って。

何の技術をどのレベルまで理解すべきか、っていう戦略立てないとやってらんなさげだねー。RESTful な Web サービス作ろうと思ったら。そうはいっても現実は勝手に変化してくから「射撃しつつ前進」なアプローチが巡り巡って正解なんだろうなぁ。

RESTful Webサービス

RESTful Webサービス

*1:AMF の仕様は公開されてるから、単純に先祖返りって言うのもちょっと違うかなーと思うけど

*2:認証と認可の違いが未だによくわからん……