2006-02-28

REST:RESTとは(1)

yohei-y:weblog: REST 入門が非常にREST(REpresentational State Transfer)の理解の参考になる。自分なりにまとめてみる。

RESTはSOAPと対比されるようにWebサービス実現手段として受け取られる向きが多いが、Web(HTTP)本来の仕組みに忠実に(またはさらに制限を加えて)Webアプリケーションを作るという、アーキテクチャスタイルの事である。

RESTの基本はリソースへのアクセスである。URI(Uniform Resource Identifiers)で指定したリソースに、指定したメソッドに応じたアクションを行う。
リソースというのは、そのままリソースのことである。URIは名前そのまま、リソースを識別するための物である。URIを指定すれば必ず目当てのリソースを取得することが出来る。

メソッドについては以下の5つのポイントを守ること。
  • GETはリソースを取得するメソッド
  • PUTはリソースを更新するメソッド
  • DELETEはリソースを削除するメソッド
  • POSTはリソースを新規作成するメソッド
  • GETはリソースに副作用を与えない(GETで操作をしない)

特に、Java Servletの世界では、POSTとGET以外のメソッドを使うことはまず無いため、GET、POSTを濫用している場合がほとんどであるといえる。(一応、doPut、doDeleteというそれぞれのメソッドを扱うためのインタフェースは用意されていますが)

たとえば、
http://localhost:8080/MyApp/ItemServlet?action=delete&id=4797327936
のように、DELETEメソッドを使わずに、GETメソッドで削除処理を行う(URIへのアクションの挿入)といった事が行われる。
また、POSTは単にGETと違ってURIの長さ制限に掛からない、無制限な長さの情報をサーバに渡す手段として利用される。

RESTに則れば、上に様な例は、
http://localhost:8080/MyApp/Item/4797327936/
にDELETEメソッドを発行すれば良いことになる。

ただ、Servletでこのような実装がなされるのは、人間系に合わせ、選択、確認などのステップを踏むためであると思う。(DELETEメソッドを発行したのに、削除されずに確認画面が出るのも、GETやPOSTで確認画面が出るのもREST的にはおかしい)
というわけで、人間系においてまでRESTを適用するのは問題があるように感じる。RESTを適用するにはAJAXやFlashのようなリッチクライアントが不可欠となるだろう。

長くなってきたので、続きはまた。

0 件のコメント: