y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

RESTについて理解したこと

Web2.0ajaxの関連で良く出てくる単語”REST”について。従来からのHTTPの仕組みに双方向性を持たせるにあたっての基本的な約束事を確認しておくことによって、異なるシステム間の疎連携を確保しようという提案だと感じた。(独自実装や元々のHTTPのメソッドが乱れているからここで一度整理しておきましょうという←乱れた日本語を正すみたいな?)
以下、個人的な学習の過程
1:REST≒GET,POST,PUT,DELETE(Select,Insert,Upate,Delete)
GETパラメータとしてアクション(EditやDeleteやUpdate)を含むのは反則。HTTPメソッドであるPUT,DELETEを使おう。
2:どの画面状態にもURI(URL)が付いておりGETで呼び出せる(リンクできる、ブックマークできる)
インタフェースは密連携(POST)ではなく、疎連携(GET)で実現する
SOAPはPOSTで密連携。RESTはGETで疎連携
3:セッション(画面遷移)はクライアントで行う
ステートレスにすることによってキャッシュできる。Cookie(セッション変数も?)による状態管理は反則。
4:URLはクライアントで生成してはならない
サーバがURLを渡してやり、クライアントはそれに対して、GETやPOSTなんかの動詞を適用するだけ。
GETのパラメータとしてクライアント側で相手が持っている引数を組み立ててやるなんていうのは、密連携のやり方(通信相手の事情を知っていなければならない)であり、シンプルじゃない。

■RESTに従うということ→利用者のために
ブラウザのキャッシュやプロキシなんかでユニークなキーとして利用されるURIをユーザに保障しようよ・・ってことが大事。正常な情報を持ったPOSTしか正しい画面を表示できないなんていう実装を止めようよ・・って感じ。更新はUPDATEを、削除はDELETEを使おうよ・・・ってそりゃそうかも。
GETパラメータとして20050621-01?Mode=Deleteとかやっちゃいけないよ・・・ってことだね。
リンクされても正しく動作しないし、コピペしたって意味の無いURLだからってこと。

■自分の場合
んで、認証にはCookieとセッション変数を使ってて、隠しフィールドからPOSTされた値によってアプリの動作を変えてる・・なんて最悪!・・・って「そういうやり方でずっとWebアプリ作ってますが何か?」って感じ。URLにアクションを付け加えたり、GETに分かりやすいパラメータを含めたくないから、隠しフィールドに入れてPOSTしていたり、大量の更新を一気に行うためにJavascriptからURLを生成してPOSTしたり、リダイレクトしたり・・・やりたい放題。大体、ASPなんかでHTTPのPUTやDELETEを使っているなんて聞いたことが無い。Dominoサーバでも?OpenDocment、?EditDocument、?DeleteDocument、ReadDocument、OpenDocmentなんていうGETでアクションな実装だったから、当たり前だと思っていた
ユーザ権限の判定とか、クライアントで実施された変更を管理する方法って、そんなのしか無かったんだからしょうがないと思っているのだが、これからWeb2.0だなんだとユーザ主導、ドキュメント(データ)主導、Webサービスの時代になっていくなら、出来るだけ統一的な作法になってないとまずいわな。