確認画面問題はトランザクションリソースの導入で解決できるのでは
REST勉強会、参加したかったなあ。知らなかった私が悪いんですが。
勉強会では「確認画面ってどう扱うの?」という議題が出たそうで、私なりに考えていた解をここに提示する次第です。
例示する処理
- 処理内容:ユーザ名とパスワードが入力項目となるユーザ登録処理
- 画面遷移:登録画面→確認画面→結果画面
1. トランザクションリソースの作成
クライアントは、登録画面から「トランザクションリソースのファクトリリソース」にユーザ名とパスワードをPOSTします(通信イメージは適当です)。
POST /newaccount-transactions HTTP/1.1 HOST: example.org username=iwamot password=hogehoge
妥当な入力なら、サーバはトランザクションリソースを作成し、そのURLを返します。これが確認画面となります。
HTTP/1.1 201 Created
Location: http://example.org/newaccount-transactions/af78dc80fc
2. トランザクションリソースの修正
クライアントは、例えばユーザ名の入力をミスした場合に、修正内容をPUTできます。
PUT /newaccount-transactions/af78dc80fc HTTP/1.1 HOST: example.org username=iwamoto
妥当な入力なら、サーバはトランザクションリソースを更新し、「200 OK」を返します。レスポンスボディには確認画面のHTMLを含めます。
HTTP/1.1 200 OK 〜
3. トランザクションリソースのコミット
問題はコミットの表現ですが、『WEB+DB PRESS Vol.43』の189ページで山本陽平さんが書かれているように「commit=true」をPUTすれば良いと思います。
PUT /newaccount-transactions/af78dc80fc HTTP/1.1 HOST: example.org commit=true
サーバは、ユーザリソースの作成およびトランザクションリソースの削除を行い、「200 OK」を返します。レスポンスボディには結果画面のHTMLを含めます。
HTTP/1.1 200 OK 〜
あるいはLocationヘッダでユーザリソースのURLを返します。
HTTP/1.1 303 See Other
Location: http://example.org/users/iwamoto
以上です。おかしな点があればぜひご指摘ください。
追記(2008-03-05)
山本陽平さんの言及キタ━━━━(゚∀゚)━━━━!!!!
なんかちょっと違う気が
http://del.icio.us/url/c25a7f3dc1f21d3a0915c7dbdef4aba2
orz...
ならばベストプラクティスが知りたいなあ。RESTful本読書会で分かるかな。
というわけで、RESTful本読書会、日程が合えばぜひ参加したいと思っております!>id:kunitさん
追記(2008-03-06)
id:ikasam_aさんよりトラックバックをいただきました。
素晴らしい! AtomPubの仕様をほとんど知らないので、draftの発想はなかったわ。実装する機会があれば、この方法を取り入れるつもりです。ありがとうございました。
参加したいといっていたRESTful本勉強会ですが、Ustream配信予定とのことで、おとなしくそれを見たいと思います。ストイックさにビビりました><
追記(2008-03-07)
RESTful本勉強会、議題を上げるという感じでOKとのことでしたので、日程が合えば参加することにしました。足を引っ張らないようにしないと><