PerlでAtomPubサーバを作ろう!
第3回 AtomPubをより効果的に ─ 認証・キャッシュなど
前回までに写真付きブログサーバを作成しました。今回は,AtomPubによるWebサービスを効果的に提供するために欠かせない付加機能を取り上げます。認証,キャッシュ・バージョンチェック,メンバリソースのURI,フィードのページング,サービス文書のカスタマイズ,エラー処理を説明します。それぞれ独立に書かれていますので,興味のあるところから読み始められます。
サンプルコードはこちらからダウンロードできます。
認証
AtomPubでは認証方式は決められておらず,プログラマが選ぶことができます。ただし,最低限Basic認証+SSLができることが求められています。ここでは,Catalyst::Plugin::Authentication::Credential::HTTPを使ったBasic認証の実装例を紹介します。なお,ここで紹介する方法はAtomPubに限らずCatalystで一般的に使えます。
テーブルの作成
ユーザ情報を格納するテーブルを作成し,ユーザを登録します。
ユーザ名とパスワードをguest,abcとします。パスワードはMD5で変換してから格納しますので,事前にハッシュ値を求めておきます。
MyBlog % perl -MDigest::MD5 -e "print Digest::MD5::md5_hex('abc')"
900150983cd24fb0d6963f7d28e17f72
テーブルを作成します。テーブル名をusersとし,ユーザ名とパスワードのカラムをusername,passwordとします。
MyBlog % sqlite3 test.db sqlite> CREATE TABLE users ( ...> id INTEGER PRIMARY KEY, ...> username TEXT UNIQUE, ...> password TEXT ...> );
ユーザをテーブルに追加します。
sqlite> INSERT INTO users (username, password) VALUES ('guest', '900150983cd24fb0d6963f7d28e17f72');
認証処理の実装
MyBlogに認証プラグインを追加します。認証情報の格納先は,エントリと同じくDBICです。
認証プラグインを追加(lib/MyBlog.pm)
use Catalyst qw(
-Debug
ConfigLoader
Static::Simple
Authentication
Authentication::Store::DBIC
Authentication::Credential::HTTP
);
Catalyst認証モジュールを設定します。詳細は省略します。
Basic認証の設定(myblog.yml)
authentication:
dbic:
user_class: DBIC::User
user_field: username
password_field: password
password_type: hashed
password_hash_type: MD5
http:
type: basic
認証処理を実装します。認証処理は,ルートコントローラ(MyBlog::Controller::Root)のautoメソッドで実装することが多いです。このメソッドは,すべてのアクションが呼ばれる前に実行されるためです。
どのようなルールで認証を行うかはサービスによりますが,今回はGETとHEAD以外のリクエストに対して認証を行うことにしましょう。
認証勝利の実装(lib/MyBlog/Controller/Root.pm)
sub auto :Private {
my($self, $c) = @_;
# GETでもHEADでもなければ認証を実行する
$c->authorization_required(realm => 'My Blog')
if $c->req->method ne 'GET' && $c->req->method ne 'HEAD';
return 1;
}
ここでは,HTTPメソッドの種類によって認証処理を切り替えましたが,URIによって切り替えることもできます。たとえば,http://localhost:3000/entrycollection以下のURIのみに対して認証を行いたいときは,lib/MyBlog/Controller/EntryCollection.pmのautoメソッドに認証処理を実装してください。
PerlでAtomPubサーバを作ろう!
- 第4回 OpenSocialのベースになっているGDataサーバに挑戦
- 第3回 AtomPubをより効果的に ─ 認証・キャッシュなど
- 第2回 写真付きブログサーバを作ってWindows Live Writerで書いてみる
- 第1回 もっとも簡単なAtomPubサーバを作ってみる


