Posted filed under Ruby on Rails.

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を作る必要があり、それぞれは補完関係にあると思います。

4 Responses to “RESTはWebAPIの代わりにはならない”

  1. 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

  2. takahashim

    や、スライド資料を見る限り、そこで言う「Web Services」というのはSOAP+WSDL+UDDI的なWSじゃないですか?
    いわゆるWebAPIはREST(つまり資料14ページ目の「LCODC$SS+U」)に対して中立で、REST的にもできれば非REST的にもできます。

    あと、同じURLでHTMLもXMLも返す、という設計もRESTと直接は関係ないです。

    # REST理解への道はまだ遠いのかも……

  3. masuidrive

    たしかにHTMLとXMLの切り替えはRESTとは関係ないですよね。

    ただ、RESTfulとXML返しの組み合わせで、機械からの読み込みが可能になるので、API的な使い方ができるなぁという話になりやすいんだと思います。

Trackbacks/Pingbacks

  1.  次なるもの » Blog Archive » RESTはWebAPIの代わりにはならない
  2.  winplusの日記
  3.  winplusの日記