Photo by Pulpolux !!!
bobchinさんの日記から「やっぱRESTは厳しいのかな?」。
RESTでは、リソースに対して一意のURLに、これって結局データストレージとして使えるっていうだけなんだと思います。MVCでいうmodelの部分。
これは、これでとても大切な部分なのですが、モデルを検索したり、いろいろ機能をRESTで提供するのは、うまくいかないと思います。
Railsだと、create, show, update, destroyメソッドはいいのですが、index(list)メソッドをXMLで返すようにしても、あまりうまくいかないケースが多いと思います。1画面に出る情報が多岐にわたるので、きれいに表現できないんですよね。
1つのコントローラでHTMLとXMLを返す上での最大の問題は、メソッド名の変更が出来なくなることだと思います。APIとして外部に公開してしまうと、メソッドの変更も気軽にできません。
しかし、RESTfulにすることで、URLやコントローラの設計がきれいになる、Javascriptなど密結合な環境に限定されますが、外部からデータ参照できるなど、利点は多々あります。
RESTの最大の利点は、デザインパターンと同じで、「このシステムはRESTfulになってるから」っていうと、詳しく話さなくても、全体の把握をしやすくなります。
なので、システムをRESTfulにすることはいいことだと思います。RESTfulにして考えると、1つのコントローラにアクションを詰め込むのを止めようとか気がつきますし。
ただ、外部へサイトの機能を公開するためには、別途WebAPIを作る必要があり、それぞれは補完関係にあると思います。
L.star
Dr. Royの話をApacheCon2008 EUで聞いたのですが、RESTはそもそもWeb APIの代わりとして設計されたものでは*ありません*と熱弁してました。Webのありようを設計したものであって、そもそもWeb Serviceのようなデザインとは似て非なるものだと。比べられることを非常に嫌がっていましたね。RESTはbuzzwordになっちゃった!みたいな。
MVCの”M”を規定している、というのはまさしくその通り。REST自体ステートレスであり、クライアント側でstateful情報を持て!と言っています。完全にサービスとして提供できるレベルを規定しているわけでもありません。しかし、「RESTfulなデータはブックマークできるんだぜ!」というところはずいぶん強調していました;)
スライドはこれかな。
http://us.apachecon.com/us2007/downloads/200711_REST_ApacheCon.pdf
masuidrive
bookmarkできるっていうのは、確かに大事ですね。
takahashim
や、スライド資料を見る限り、そこで言う「Web Services」というのはSOAP+WSDL+UDDI的なWSじゃないですか?
いわゆるWebAPIはREST(つまり資料14ページ目の「LCODC$SS+U」)に対して中立で、REST的にもできれば非REST的にもできます。
あと、同じURLでHTMLもXMLも返す、という設計もRESTと直接は関係ないです。
# REST理解への道はまだ遠いのかも……
masuidrive
たしかにHTMLとXMLの切り替えはRESTとは関係ないですよね。
ただ、RESTfulとXML返しの組み合わせで、機械からの読み込みが可能になるので、API的な使い方ができるなぁという話になりやすいんだと思います。