RESTful ユーザー登録, パスワードリカバリ

REST本があまり参考にならなかった罠。email や パスワード のような本人確認が必要なリソースを作成する、という点をどうするか?

まず登録。

  • POST /users
  • GET /users/{:id}/registration_prepared
  • GET /users/{:id}/registration_confirmation?key={temporary key}

こんな感じだろうか。で、パスワードリセット

  • POST /users/{:id}/new_password
  • GET /users/{:id}/new_password_prepared
  • GET /users/{:id}/new_passward_confirmation?key={temporary key}

。。うーん、RESTfulとは相性が悪いというか、この辺はコンピュータだけで済ませないために、「メールなどで確認する」という人的プロセスを経ているわけで*1。。

修正。よく考えたらpreparedは、あまり意味がないことにきがつく。HTTPの表現力で、送信されたことを機械的に表現する手段がないではないか? SMTPURIをふってというのも、現実的ではないし。結局、クライアント側は200が返されたときの次のアクションは、APIドキュメントによって確認して、しかるべき対応をする、というのが解か。

あと、GET *_confirmation が正しいかどうかはわからないが、メールクライアントからブラウザに対しては、URIは渡せるけど、HTTP Methodは渡せないので、仕方がない、といったところか。もちろん Rails なら _method=post とかすればいいんだろうけど。

RPC形式のWebサービスなら、あまり考えずに、準備用RPCと確定用RPCを用意すればいいんだろうけど。

*1:例えば、オンラインショップの決済には確認画面が必要、といった法律関係