岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

Webアプリの画面はRESTfulなAPIの一クライアントにすぎない?

いつも思いつきで恐縮ですが、「Webアプリの画面はRESTfulなAPIの一クライアントにすぎない」んじゃないかと考え始めています。

ひらめいたのは、Rails2.0のルーティングを調べていたとき。scaffoldを使うと、下記のようなルーティングになるらしい。

アクション メソッド URL例
一覧画面 GET /bookmarks
登録画面 GET /bookmarks/new
登録処理 POST /bookmarks
参照画面 GET /bookmarks/1
編集画面 GET /bookmarks/1/edit
更新処理 PUT /bookmarks/1
削除処理 DELETE /bookmarks/1

このうち、登録画面と編集画面に違和感を覚え、はたと気づきました。一覧画面や参照画面がリソースの素直な表現であるのに対し、登録画面と編集画面はPOSTやPUTのためにやむなく用意されたフォームでしかないことに! 残りの5つでRESTfulなAPIが必要十分に表現できてしまうじゃないか!

  • コレクションURIのGET
  • コレクションURIへのPOST
  • メンバURIのGET
  • メンバURIへのPUT
  • メンバURIのDELETE

AtomPubがまさにこれだ。登録画面や編集画面は、これらの操作を行いやすくするための「がわ」に過ぎない。

もっといえば、一覧画面や参照画面は、GETの結果(AtomJSONXMLだったりする)を人間に理解しやすい形式(HTML等)に変換した結果とみなせるし、更新処理や削除処理の結果メッセージについても同じだ。

すべて一緒くたに考えるからややこしくなるのだ。まずはRESTfulなAPIだけ作る。その後、それを利用する画面(クライアント)を作っていく。画面については、無理にRESTfulにしようと考えない(デスクトップアプリをRESTfulにしようなんて思わないのと同じ)。たとえば確認画面なんて、RESTfulにする意味はない。APIを呼び出す前の話なんだから。

というようなことをつらつら考えた、というお話でした。Twitter上での下記発言に刺激された感じです。

昨今では、RESTful/ROAにしなきゃという強迫観念がいろいろなところに見受けられます。一時期のOOA/OODやUMLみたいに。またも手段が目的化されているのではないでしょうか。

Takuto Wada on Twitter: "昨今では、RESTful/ROAにしなきゃという強迫観念がいろいろなところに見受けられます。一時期のOOA/OODやUMLみたいに。またも手段が目的化されているのではないでしょうか。"

やはり今年のテーマは Web サービスと Web アプリケーションのギャップを埋めることだな。

TAKAHASHI Kunihiko on Twitter: "やはり今年のテーマは Web サービスと Web アプリケーションのギャップを埋めることだな。"

RESTful/ROA 至上主義ではなく、このきれいな世界をいったんきちんと把握したうえで、現場でなにができるかを考えたい

TAKAHASHI Kunihiko on Twitter: "RESTful/ROA 至上主義ではなく、このきれいな世界をいったんきちんと把握したうえで、現場でなにができるかを考えたい"