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 件のコメント:
コメントを投稿