岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

確認画面問題はトランザクションリソースの導入で解決できるのでは

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とのことでしたので、日程が合えば参加することにしました。足を引っ張らないようにしないと><