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

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

Pinto公開に向けて #2 ― ユーザ登録周りのURIを考えた

あらすじ

Pintoというソーシャルブックマークサービスを作ろうとしています。ソーシャルというぐらいなので、ユーザ登録処理の実装が必要です。『RESTful Webサービス』で提唱されているROAの流儀に従い、ユーザ登録処理に必要なリソースとそのURIを決めていきます。

トップページ

その前に、PintoのトップページのURIを決めるべきですね。pito.jpというドメインを取得済みなので、素直に http://pinto.jp/ にします。

ただし、夢は大きく世界中の方に使っていただきたいので、トップページを含むすべてのリソースを多言語で提供します。とりあえず、日本語版と英語版を提供しましょう。URIはそれぞれ http://pinto.jp/index.jahttp://pinto.jp/index.en にします。

続・多言語リソースのURIに関する覚書」に書いたとおり、単に http://pinto.jp/ にアクセスされた場合は「300 Mulitiple Choices」を返し、 index.ja と index.en へのリンクをHTMLに含めます。ユーザはブラウザのAccept-Language設定をいじることなく好きな言語が選べるわけです。

以下、すべてのURIプラトニック形式(言語未指定)で記述します。トップページ同様、プラトニック形式のURIにアクセスがあった場合は「300 Mulitiple Choices」とし、日本語版/英語版へのリンクをHTMLに含めます。

OP選択画面

認証にはOpenIDを使います。OpenID 2.0で採用されたOP Identifierという仕組が便利なので、これを採用します。「yahoo.co.jp」と入力するだけでYahoo! JAPANの認証ページに飛ぶというアレです。

個人的なホワイトリスト案」に書いたように、対応するOPはホワイトリスト方式で絞り込みます。現状、「myopenid.com」「yahoo.com」「yahoo.co.jp」への対応を考えています(XRIは普及するまで無視)。

ユーザ登録時には、上記OPのどれを認証に使うか、まずユーザに選ばせます。セレクトボックスか各OPのロゴ画像で選ばせようと今のところは考えています。

OP選択画面を作らず、トップページにこのセレクトボックス(またはロゴ画像)を置く手もありますが、ユーザ登録は一度きりなので、別画面に切り出したほうが良さそうです。

というわけで、OP選択画面リソースが必要になります。URIは下記に決めました。

  • http://pinto.jp/signup_forms/openid

サインアップ用のフォームがいくつかあるなかで、OpenIDを入力するタイプ、というイメージです。

OPへのリダイレクタ

JavaScriptによるHTMLフォームリダイレクトがなんかやだ」に書いたとおり、OPへのリダイレクトはHTTPリダイレクトで行おうと考えています。

そこで、リダイレクタリソースが必要になります。URIは下記に決めました。

  • http://pinto.jp/signup_forms/auth?openid=myopenid.com
  • http://pinto.jp/signup_forms/auth?openid=yahoo.com
  • http://pinto.jp/signup_forms/auth?openid=yahoo.co.jp

URI Templates式に書くと:

  • http://pinto.jp/signup_forms/auth?openid={OP Identifier}

サインアップ用のフォームがいくつかあるなかで、OP上の認証フォーム、というイメージです。これらのURIにアクセスすると、指定OPの認証画面にリダイレクトされます。

コールバック先

続いて、OPからのコールバック先を決めなければなりません。コールバック先では、ユーザは好きなアカウント名を入力し、登録ボタンを押します。URIは下記に決めました。

  • http://pinto.jp/signup_forms/account

サインアップ用のフォームがいくつかあるなかで、アカウント名を入力するタイプ、というイメージです。実際にはクエリストリングが山ほど付きます。

ユーザの親リソース

ユーザリソースはPOSTで作成されるわけですが、POSTで作成されるリソースは、常に何らかの従属リソースであるはずです。つまり、親リソースがあるということです。

親リソースの候補としては、トップページ(Pinto自体)かユーザ一覧になるでしょう。ユーザ一覧へのアペンドと考えるのが自然だと思うので、URIは下記に決めました。

  • http://pinto.jp/users

ユーザリソース

あとはユーザリソースのURIを決めれば終わりです。悩むとすればデータベース上のIDをURIに含めるか含めないかだけでしょう。少なくともユーザリソースについては、データベース上のIDより、アカウント名それ自身をURIに含めたほうが、ユーザ的には嬉しいのではないかと思います。そこで、URIは下記に決めました。

  • http://pinto.jp/users/{アカウント名}

次のアクション