前回は、ブログなどの更新情報を配信するためのフィードとして知られているAtomについてまとめた。ここでは、Atomが規定したフィードやエントリで表現するリソースの編集(CRUD操作)を実現できる Atom Publishing Protocolについて説明する。
1 Atom Publishing Protocolとは
AtomとAtomPub
AtomとAtomPubの関係は、前者がデータフォーマットの規定(フィード、エントリ)であり、後者がAtomを利用したリソース編集プロトコルの規定である。
AtomPubの意義
AtomPubの意義は、汎用的なWeb APIの基礎をなすプロトコルとしての素質を備えていることである。
AtomPubとREST
AtomPubは、RESTスタイルに基づいたプロトコル仕様である。AtomPub仕様は基本的なリソースモデルとリンク機能を提供してくれるので、我々が独自に設計する必要のある部分(REST)が大幅に削減される。
2 AtomPubのリソースモデル
AtomPubではAtomが規定しているリソースモデルをベースに、エントリを操作する。AtomPubでは、コレクションのメタデータを表現するサービス文書(Service Document)と、エントリのカテゴリに指定できる値を列挙するカテゴリ文書(Category Document)を追加していく。
3 ブログサービスを例に
サンプルとしてhttp://blog.example.jpというブログサイトを考える。このブログサイトのトップページはAtomのコレクションリソースであると考えられる。1つのリソースは複数の表現を持てる。以降では、まずメンバリソース(エントリリソース、メディアリソース、メディアリンクエントリ)の操作について解説し、コレクションリソースのメタデータを表現するサービス文書とカテゴリ文書について解説する。
4 メンバリソースの操作
エントリ単位での操作
フィードに含まれている各エントリは固有のURIを持つ。それぞれのURIにHTTPメソッドを適用すればCRUD操作が実現できる。
- GET:エントリの取得
- PUT:エントリの更新
- DELETE:エントリの削除
- POST:エントリの作成
メディアリソースの操作
- メディアリソースの作成:メディアリソースの画像本体をPOSTする
- メディアリソースの更新:edit-mediaリンクで参照できるURIにPUTを送る
5 サービス文書
AtomPubのサービス文書では、そのWeb APIが提供するコレクションリソースのメタデータを複数まとめて記述できる。
メディアタイプ
application/atomsvc+xmlというメディアタイプは、サービス文書を表現するメディアタイプである。
<service>要素
サービス文書は<service>要素をルートに持つXML文書である。
<workspace>要素
<service>要素は子要素に必ず1つ以上の<workspace>要素を持つ。<workspace>要素はいくつかのコレクションリソースをまとめるためのものである。
<collection>要素
<workspace>要素は0個以上の<collection>要素を持つ。<collection>要素はAtomPubのコレクションリソースのメタデータを表現する。
<accept>要素
<accept>要素は画像ファイルをメディアリソースとして蓄積できるコレクションリソースである。
カテゴリ
<categories>要素はコレクションリソースで利用可能なカテゴリを示す。<categories>要素はfixed属性を持てる。カテゴリ文書のURIはサービス文書の<categories>要素のhref属性で指定する。AtomPubの仕様では、カテゴリ文書にカテゴリを追加する方法について明記していない。
6 AtomPubに向いているWeb API
著者が考えるAtomPubに向いているAPIと向いていないAPIを以下にまとめる。
AtomPubに向いているWeb API
- ブログサービスのAPI
- 検索機能を持つデータベースのAPI
- マルチメディアファイルのリポジトリのAPI
- タグを使ったソーシャルサービスのAPI
AtomPubに向いていないWeb API
- Cometを利用するようなリアルタイム性が重要なAPI
- 映像のストリーム配信などHTTP以外のプロトコルを必要とするAPI
- データの階層構造が重要なAPI
- 「タイトル」「作者」「更新日時」などAtomフォーマットが用意するメタデータが不要なAPI
最後に
Atom Publishing Protocolを採用すると、ブラウザ以外のWebクライアントからブログを投稿したり、システム同士を連携したりといったことが簡単にできるようになる。つまり、AtomPubはタイトルや更新日時といった基本的なメタデータを持ったリソースであるエントリをCRUDする、Web APIのためのプロトコルである。Web APIを開発するときは、Webサービスの特性に合わせてベースとなるプロトコルやデータフォーマットを選ぶ必要がある。
次回は、JavaScriptの記法でデータを記述できるJSONについてまとめる。
![]() |