REST思想とHTTPメソッドの関係
RESTの基本的な発想は、HTTPメソッドでリソースをCRUDできるはずだ、というアイデア。
では、HTTPメソッドは、そもそもどんなものなのか?
「安全なメソッドと冪等{idempotent} なメソッド」でいくつか語られている。
「RESTful Webサービス」で「べき等」という概念が出てくる。
「べき等」とは、同じ操作を何度行っても同じ結果であること。つまり副作用がなく安全であることを意味する。
少なくとも、GETはべき等に使うならば、安全であると言える。
しかし、GETで、リソースの削除や更新を行う時も、実はよくある。
REST思想に従うならば、GETは副作用を起こしてはいけない。
POST、PUT、DELETEがリソースの更新で副作用を起こすように使うべき。
RailsはREST思想を忠実に反映している。
また、Strutsも「http://~/***.do」というURLを見ると、RESTの発想を実現しようとしているニュアンスが感じられる。
更に、WebDAVとHTTPメソッドは親近な関係にある。
「WebDAV メソッド」ではこんな風に説明している。
WebDAV とは "Web-based Distributed Authoring and Versioning" の略で、Web サーバ上でファイルの編集や管理等の共同作業を行えるようにする事を目的に開発されました。
(snip)
その後、1992 年に書かれた HTTP/1.0 の初期バージョンでは、PUT や DELETE といった HTTP/1.1 で盛り込まれるメソッドに混ざって、CHECKOUT や CHECKIN, SEARCH といった WebDAV で提案されているメソッドも見られます。
これらは明らかに、WWW を「サーバからクライアントへの単なるリソース配布するためのもの」から、「WWW 上でリソース編集を行うためのもの」にする狙いが読み取れます。
この「リソース編集のための仕組みを HTTP に組み込む」という考え方は、PUT や DELETE という形で HTTP/1.1 に盛り込まれ、更に現在の WebDAV へと着実に受け継がれています。
この発想を突き詰めると、「WWW上でリソース編集したいというモチベーションがREST思想なのだ」と言えるのではなかろうか?
| 固定リンク
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント
REST (アーキテクチャスタイル)ではHTTPメソッド(インターフェース)は統一されているべき、としかなっていません。じっさいに*どの*統一インターフェースのメソッドを採用するかはアーキテクチャの設計者に任せられています。
たとえば紹介していただいている RESTful Web サービスではリソース指向アーキテクチャというアーキテクチャ(!=スタイル)を提唱し、ROA では HTTPの六つのメソッド(GET/POST/PUT/DELETE/HEAD/OPTIONS)を採用し、WebDAV で拡張されたメソッドは使わないことが明記されています。
自分の作るシステムでリソース編集をするために六つのメソッドで充分なのか、はたまた WebDAV 拡張が必要なのかは REST 的にはどっちでもよくて、設計者次第です。
ちなみに私自身は ROA の六つのメソッドでほとんどの場合は充分だと思っています。
投稿: yohei | 2008/03/12 08:03
◆yoheiさん
著者の方のコメントを頂けて嬉しいです!
自分の思いを整理し切れてなかったです。。
RESTを知るには、HTTPメソッドという概念をもっと理解しなくてはと思ってます。
Webアプリの弱点はHTTPメソッドにあるような気がしてならないから。
投稿: あきぴー | 2008/03/13 00:57