RESTful Webアーキテクチャにおいて、a要素やform要素に代表されるハイパーリンクがつなぐものは、リソースではなく「状態の表現」である。例として、POSTメソッドのレスポンスを考えると分かりやすい。ユーザがとくに知りたいのはPOSTの結果がどうなったかだ。サーバは、結果を表すリソースのURIをLocationヘッダで返すことも可能ではあるが、レスポンス自体に結果を含めてもよい(むしろ後者のほうがよく見かける)。このときレスポンスは「POSTの結果がどうなったか」をあらわす状態の表現であり、リソースそのものではない。
GETでも事情は変わらない。そもそも、リソースは転送(Transfer)されないのだ。転送されるのは状態の表現(Representational State)でしかない。
URI are identifiers of resources. GET is a request for a representation of the current state of the identified resource. The server does not transfer the resource itself because that's not what the client requested; the client does not want the mechanism that implements the resource over all time -- only the current state of the resource at that instant in time. That's what allows the client, and the transfer protocol, to be simple.Re: resource and representation from Roy T. Fielding on 2002-07-08 (www-tag@w3.org from July 2002)
リンクが含まれるのも状態の表現だし、リンクを通じて得られるものもまた状態の表現なのである。
先日「ハイパーリンクは何をつないでもいい」を書いた時点では、このことが理解できていなかった。
「接続性」が誤解のもと
ハイパーリンクはリソースをつなぐべき、と僕が誤解してしまったのは、『RESTful Webサービス』で定義された「接続性」(Connectedness)が原因かもしれない。同書100ページに「リソースの接続性」とあるし、128ページには「リソースからリソースへの移動」とも書かれている。著者の意図はともかく、これらの記述から、リソース同士をつなぐのはハイパーリンク、というメンタルモデルが僕のうちにできてしまった可能性は大いにある。
Roy T. Fieldingは、接続性の定義に批判的だ。「アプリケーション状態エンジンとしてのハイパーメディア」を「接続性」と呼び替えられると、ハイパーメディアの駆動力としての役割が不明確になってしまう、というのだ(On software architecture - Untangled)。「ROAはリソースを重視しすぎだ」とも言っている。その弊害のひとつが、僕の誤解に現れてしまったのかもしれない。