2006-03-04

REST ってやっぱり難しいかも。

前のエントリでこんなことを書いたばかりだけれど、REST ってやっぱりどうよ、という気分になったので久々に blog を更新してみる。

ただただしさんのおれだったらフォト蔵APIをこうするを読んで、僕が del.icio.us に書いた感想は

+1。ID == URI ですよね。Cool URI は名詞であるべき、というのは強調したい。「日本REST協会」入りたくないなー(笑)。みんな休んでそう

というもの。たださんのエントリでは URI と書くべきところが ID になっててちょっと気になったり、「作法」は「アーキテクチャ」じゃなくて「アーキテクチャスタイル」だ、とか思ったのだけれど、でも本筋としては納得の内容だった。

しかし、たださんのエントリの、たかはしさんmizzy さんのコメントを読んでうーんと唸ってしまった。

僕にはお二人の言いたいことがわかる。んで両方間違っていないと思う。

たとえばたかはしさんの言うとおり、RoyF の元論文では GET/POST/PUT/DELETE を使えなんて一言も書いてないわけで。そうじゃなくて単に Uniform Interface が重要だよ、というだけの話。

でも今回のフォト蔵 API に関して言えば、Uniform Interface の間違った使い方をしちゃっているので、ちゃんと RESTful に設計するなら HTTP の GET/POST/PUT/DELETE をたださんが指摘したように使うのがまっとうな方法だとも思う。

mizzy さんのコメントの最後

ここでたださんが言っているRESTというのは、正確には「RESTアーキテクチャスタイルのアーキテクチャであるHTTPを利用したAPI」のことだと思われますので、アーキテクチャの話に絞って問題ないかと思います。

というのは重要で、問題の根源はここにある気がする。異なる次元の別の話(アーキテクチャスタイルの話、HTTP の話、Web API 設計の話)が全部 REST という名前の下で行われていうので、混乱してしまう。これは僕にも一因があって、これまでのこの blog のエントリでも上記をごっちゃで使ってしまっている。

言葉を正確に使おうとすると非常にメンドウなので、僕自身の文章力ではなんともならないのだけれど、ここではせめてそれぞれの次元がどう違うのかを下記に列挙しておきたい。

REST アーキテクチャスタイル
RoyF の元論文に基くアーキテクチャスタイルについての議論。 ここでは HTTP のメソッドがどうしたという話は原則関係ない。 REST アーキテクチャスタイルを基にした Web アプリのアーキテクチャを設計する段で、 たとえば GET/POST/PUT/DELETE を使うのがいいのか、 GET と POST だけを使えばいいのか、という議論もありえる。 このレベルの話を、下記の偶然 REST っぽい Web API に適用してもあまり意味がない。 プログラミング初心者にいきなり最先端のデザインパターンの話を聞かせるようなもの。
偶然 REST っぽい Web API
いわゆる XML を HTTP でやりとりしますよ的な API を REST API と呼んでいるケース。 この場合の REST という言葉は非常に矮小化されてしまっていて、 僕としてはこれは POX over HTTP と呼びたい。 個人的には正直あんまり興味なし。
Restful Web サービス
RoyF の論文はそこらの××な(自己規制)博士論文の1万倍凄いんだが、 それでもやっぱり脇が甘いところもあるし古くなっちゃってるところもある。 それに REST アーキテクチャスタイルを実装(アーキテクチャ)に落そうとすると とたんに色々な問題が出てきて、そう単純な話では済まないのも事実。 一方で2000年以降、このような設計・実装の議論はずっとされてきて、進化してる。 実際にいろいろな試みがなされていて、Paul Prescod の経験則とか Mark Baker の蘊蓄とか、すごく蓄積されている。 たとえば POST は新規作成とか URI は名詞でとかいう話はより実装に近い話。 APP(AtomPP) はここでの重要な成果の一つ。
その他にも REST にまつわる現在進行形の議論はたくさんあって、 たとえば OOP と REST とか SOA/WS-* と REST とか Ajax と REST とか XML vs YAML vs JSON とか階層化ファイルシステムと単一階層モデルとか microformats と REST とか。まさに Web 2.0 が表現するアルファギークの気分の中でフワフワ浮いているような話題なんだけれど、この話題、まだ体系的に言語化/文書化されてないので 現在進行形の文脈を共有している人とじゃないと議論できない。 僕が今一番興味があるのはここ。

実は今 REST の入門記事を某誌向けに書いているんだけど、 この原稿でも上記の次元の異る REST が無意識にまざってしまっていて、 困ったなあと思っていたりする。締切も近いしどうするかなあ。

0 件のコメント:

コメントを投稿