設計次第といえばいいのかもですが、RDB(に限らないだろうけど)のデータ構造ってのは網目構造、いっぽうURLだと1次元構造になるので、どうもすっきりしないというか弱いなあと思った記憶が。>とりあえずRails2.2のroutes.rbを見てて思ったこと。
2010-04-13 10:56:06リソースを一個の独立したデータとして扱える場合についてはRESTが成り立つのは異論ないのだけど、Webをまたいだクライアント-サーバ間の汎用的な通信のプラットホームとして採用するのはなかなかうまくいかない、というのが2010年時点での私の評価
2010-04-13 10:56:39具体的かつ俺風にいえば「ゲッターロボ問題」つまりもともと順番が無い(自由)なものを「今ここでは」どういう順番に積めばいいのかが、一意に決まるわけじゃなく、そのへん厄介だなというか。
2010-04-13 10:57:01@nagise 一度 DB の CRUD から離れて、その URI で示されるリソースの DELETE とはどういう意味なのかを考える/設計するというのが大事だと思います。
2010-04-13 10:57:08.@t_wada だから、RIAとバックのDBをつなぐフレームワークの土台としてRESTを使う、というのはNGという結論なのですよ。URIで表現可能なリソースにデータ設計を落とし込まないといけませんよね?
2010-04-13 10:59:43@t_wada (R)DB設計のときも「このテーブルのデータの意味を考えて…それをDELETEするとはどういうことか考えて」みたいな設計上のフェースがあると思うんだけど、するとそれの上にRESTを載せると設計的に「屋上屋を架す」になる、のかな?
2010-04-13 10:59:47@mitukiii Webの自動巡回ソフトみたいなのはHEADメソッドを投げるものが結構ありますね。サーバ側がちゃんとLast-Modifiedヘッダとか返してくれないとむしろリクエストを多く投げることになるから微妙だったりもするのですがw
2010-04-13 11:01:12@naka_aki_spl @nagise ああなるほど! 主張がわかりました。確かに屋上屋を重ねるという側面はあると思います。追加で必要になる設計行為とそれに基づくインピーダンスミスマッチはあります。
2010-04-13 11:02:10.@t_wada そうか、これもインピーダンスミスマッチか。REST向きのデータ設計とRDBMSのデータ設計の間のインピーダンスミスマッチ。なるほど、なるほど。
2010-04-13 11:04:37@nagise む、ちょっとだけ誤読したかもしれません。データ設計を URI に合わせる必要はないと思います。中間層でデータ<->リソース変換すればいいし、だからこそインピーダンスミスマッチがあると言ったのです。
2010-04-13 11:05:50.@t_wada 中間層でデータ<->リソース変換をしたとして、完全に透過な変換が可能なのでしょうか? ごく単純にはあるリソースの排他制御みたいな例でもいいのですけど、バックヤードのDBのデータ構造に足を引きずられませんかね?
2010-04-13 11:08:42そういえばJSON形式もかなりやられたところはあって、JSONだとそのままでは参照型が存在しないから工夫しないと循環参照したオブジェクトを送ろうとして変換すると落ちる
2010-04-13 11:12:38@nagise うーむ、ちょっとこれは想像ですが (なんというか古めかしい感じの) DB 設計が既にある場合に、それに引きずられるというのはあるかもしれません。私自身の場合は、あまり困難を経験していません。答えになってませんね、すみません。
2010-04-13 11:12:38.@t_wada なるほど。新規開発ならうまくやれるかもしれませんね。僕の場合はRIAとバックヤードのサービスをつなぐ汎用フレームワークの部分を作ったんですが、既存システムありだし、単純なマスタだったらRDBMSのレコードをまんまリソースとして扱いとか要求が無茶だったのかも
2010-04-13 11:16:12@nagise 例えば RIA でファイルの排他制御をする場合とかは、 /some_file/lock みたいなロックを意味する URI を設計し、その URI に対する PUT/DELETE とそのレスポンスコードでロックを表現しています。
2010-04-13 11:17:12@nagise RDBMS のレコードをまんまリソースとして扱うというのは、うまく行くところとそうでないところがあると思います。なるほど文脈がわかりました。
2010-04-13 11:19:27ふむ。RESTが使えないわけじゃなくて、RDBMSとのインピーダンスミスマッチがでかいから、既存システムの移植とか、その土台みたいなところで採用するなら覚悟しろってことなのかな。
2010-04-13 11:21:19