PerlでAtomPubサーバを作ろう!

第2回 写真付きブログサーバを作ってWindows Live Writerで書いてみる

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

前回はエントリリソースを扱うAtomPubサーバを作りました。今回は,前回作成したサーバに画像を扱うコレクションを追加して,写真付きブログサーバに仕上げます。また,Windows Live WriterというAtomPubクライアントを使って,ブログを書いてみます。

サンプルコードはこちらからダウンロードできます。

メディアリソースとは

前回説明したように,AtomPubではエントリや画像ファイルなどを「メンバリソース」と呼び,それらの入れ物を「コレクションリソース」と呼びます。メンバリソースがAtomエントリのときは「エントリリソース」と呼ばれ,それ以外のときは「メディアリソース」のように呼び分けられます。今回はメディアリソースを扱うコレクションを追加します。

エントリリソースの場合と同様に,コレクションのURIにメディアリソースがPOSTされると,サーバはコレクションに追加します。

コレクションにメディアリソースを追加

コレクションにメディアリソースを追加

エントリリソースはXMLなので,著者名などのメタデータを記述できました。しかし,メディアリソースには記述することができません。そこでAtomPubサーバは,メディアリソースを追加するときにペアとなるエントリを作成します。このエントリはメディアリソースへのリンクを持つため,メディアリンクエントリと呼ばれます。図では,実線のボールがメディアリンクエントリで,点線のボールがメディアリソースになります。

コレクションのURIに対してGETが送られると,サーバはメディアリンクエントリを列挙したフィードを返します。

メディアリソースとメディアリンクエントリは,それぞれ別のURIを持ちます。このURI(Edit URI)に対する操作はAtomエントリの場合とほぼ同じです。GETで取得し,PUTで更新,DELETEで削除できます。

メディアリソースを取得

メディアリソースを取得

メディアリソースを更新

メディアリソースを更新

メディアリソースを削除

メディアリソースを削除

メディアリソースかメディアリンクエントリのいずれかが削除されたときは,対応するリソースも削除してください。必ずそうしなければいけないわけではないですが,そのほうが安全です。

テーブルの作成

メディアリソースとメディアリンクエントリを格納するテーブルを作成します。

MyBlog % sqlite3 test.db
sqlite> CREATE TABLE medias (
   ...>   id            INTEGER PRIMARY KEY,
   ...>   edited        INTEGER,
   ...>
   ...>   entry_uri     TEXT UNIQUE,
   ...>   entry_body    BLOB,             -- XML
   ...>
   ...>   media_uri     TEXT UNIQUE,
   ...>   media_body    BLOB,             -- Base64
   ...>   media_type    TEXT
   ...> );

最初の4カラムは,前回作成したエントリリソース用のテーブルと同じです。entry_uriとentry_bodyには,メディアリンクエントリのURIとXMLが入ります。

最後の3カラムにメディアリソースが格納されます。

media_uriにはメディアリソースのURIが入ります。

media_bodyはメディアリソース本体です。このコレクションで扱うメディアリソースは画像ファイルです。本来はパフォーマンスを高めるために画像サーバなどを用意すべきですが,今回は説明を簡単にするために,Base64エンコードでASCIIに変換してからSQLiteに格納することにします。

media_typeには,メディアリソースのメディアタイプ(image/jpegなど)が入ります。エントリリソースと異なり,メディアリソースの場合はメディアタイプが固定ではありません。HTTPレスポンスを返すときのために記憶しておく必要があります。

著者プロフィール

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

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

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

コメント

コメントの記入