PerlでAtomPubサーバを作ろう!

第1回 もっとも簡単なAtomPubサーバを作ってみる

この記事を読むのに必要な時間:およそ 6 分

リソースの操作

コレクションとメンバはそれぞれのURIを持ちます。そのURIに対してクライアントがHTTPリクエストを送ると,メンバの列挙(List)やCRUD(Create-Read-Update-Delete,作成・読み取り・更新・削除)が行われます。

コレクションのURIにHTTP GETリクエストが送られると,サーバはメンバが列挙されたAtomフィードを返します。コレクションのURIにメンバがPOSTされると,サーバはコレクションに追加します。さらに,サーバは新しいメンバのURIを決定し,HTTPレスポンスのLocationヘッダでクライアントに通知します。

コレクションからメンバ一覧を取得

コレクションからメンバ一覧を取得

コレクションにメンバを追加

コレクションにメンバを追加

メンバのURIにHTTP GETリクエストが送られると,サーバはメンバを返します。メンバがPUTされると,古いメンバを置き換えます。DELETEが送られると,そのメンバを削除します。このように,メンバのURIはメンバを編集(修正・削除)するために用いられることから,⁠Edit URI」と呼ばれることもあります。

メンバを取得

メンバを取得

メンバを更新分

メンバを更新

メンバを削除

メンバを削除

5つの操作を表にまとめます(表中のメソッド属性については後ほど説明します⁠⁠。RESTにもとづく美しいデザインになっているのがわかります。なお,RESTについてはりこらぼのricollab Web Tech Blog ≫ REST入門(1Webアプリケーションのアーキテクチャ⁠⁠』を参考にしてください。

AtomPubのリソースと操作

URI HTTPメソッド 操作 メソッド属性
コレクションGETメンバの列挙list
コレクションPOSTメンバの追加create
メンバ GET メンバの取得 read
メンバ PUT メンバの更新 update
メンバ DELETE メンバの削除 delete

このように,AtomPubを使うと,シンプルでわかりやすいAPIを提供することができます。このシンプルさが,Webサービスの標準技術として期待を集めている理由です。

Catalyst::Controller::Atompubの特徴

ここまで見てきたように,AtomPubのコンセプトはとてもシンプルです。2種類のリソースと5種類の操作があるだけです。

ところが,コンセプトは簡単であっても,実装レベルになると複雑な面が少なからず存在します。たとえば,メディアリソースのメタデータを表現する補助リソース(メディアリンクエントリ)や,コレクションのメタデータを表すXML文書(サービス文書)などが必要になります。また,XMLフォーマットのチェックやURIの生成,キャッシュ・バージョンチェックなどの処理も必要になります。

Catalyst::Controller::Atompubは,プログラマがこういった枝葉末節にとらわれることなく,5つの操作に集中できることを目指しています。

Catalystのインストール

AtomPubサーバを実装する前に,必要なモジュールをインストールしておきます。

% sudo cpan -i Catalyst::Runtime Catalyst::Plugin::ConfigLoader \
  Catalyst::Plugin::Static::Simple Catalyst::Model::DBIC::Schema \
  DBIx::Class::Schema::Loader DBD::SQLite Catalyst::View::TT \
  Catalyst::Controller::Atompub Catalyst::Action::RenderView

連載が進むにつれて他のモジュールを使うこともありますが,そのときは同じようにしてインストールしてください。

準備が終わったら,MyBlogというWebアプリケーション(のひな形)を作ります。

% catalyst.pl MyBlog
% cd MyBlog/

著者プロフィール

井上武(いのうえたける)

NTTに入社後,未来ねっと研究所でマルチキャストやモバイルIPなどのネットワーク技術の研究開発に取り組んでいたが,最近はWebアーキテクチャに関する仕事をしている。

URLhttp://teahut.sakura.ne.jp/