April 19, 2004

XML::Atom::Server メモ

XML::Atom::Server を使って Atom API サーバを実装実験中。気づいたことメモ。

password_for_user メソッドの実装

XML::Atom::Server ではWSSE認証のために password_for_user というメソッドを実装して、

sub password_for_user {
    my($self, $username) = @_;
    return $password;
}

みたいにする必要あり。ユーザの入力に password は含まれず、種 (Nonce + created) と PasswordDigest があるだけなので、パスワードがサーバ側でわからないとだめです。メソッドで password を文字列で返すってのが実装的には気持ちよくないんですが、まあこれがラクでいいのかな。別サーバとかにある場合は authenticate そのものをオーバーライドしてやればいいとおもわれます。

パラメータの解釈は PATH_INFO

パラメータの解釈には PATH_INFO を使用しています。

GET /atomapi/blog_id=12/entry_id=13

みたいなリクエストから

$VAR1 = { 
  blog_id => 12,
  entry_id => 13,
};

みたいなハッシュをパラメータとしてつくります。これは Atom API の Spec ではなく XML::Atom::Server の独自拡張だと思われます。

URIから実装メソッドへのマッピングがめんどくさい

TypePad Atom API にあるような、URI から実装メソッドへのマッピングを行うのは結構しんどいです。request_method の GET / POST / PUT / DELETE と、PATH_INFO からとったパラメータ ($self->{params} でとれる) をひたすら if .. elsif で判定して実装メソッドに dispatch してあげる必要アリ。具体的には、

  • GET で、blog_id だけある場合は getFeed
  • PUT で、entry_id がある場合は updateEntry
  • GET で、パラメータなしは getFeedRoot
  • ...

みたいになります(メソッド名は任意。もう少しエレガントにならんのかな。

レスポンスは生XML

handle_request メソッドで、レスポンスのXMLを生成して返しますがここが抽象化されていません。生のXML文書を文字列で返すAPIです。自分は「実装メソッド名.xml」なファイルを テンプレートで読み込んで吐き出すようにラッパーつくってみましたが。

まだまだ未成熟なAPIなので、ツールも使いにくい状態です。いろいろいじって、XML::Atom の方にもフィードバックしていきたいですな。

Posted by miyagawa at April 19, 2004 06:55 PM | Permalink | Comments (0) | TrackBack(0)
Comments
Trackbacks
TrackBack URL for this entry: http://blog.bulknews.net/mt3/mt-tb.cgi/949
Post a comment