Atom Publishing Protocolとは何か
AtomとAtomPub
- Atom:データフオーマットの規定(フィード、エントリ)
- AtomPub:Atomを利用したリソース編集プロトコルの規定
AtomPubの意義
AtomPub以前にもプログを編集するためのプロトコルは存在しました。
AtomPubは、汎用的なWeb APIの基礎を成すプロトコルとしての素質を備えています。
AtomPubとREST
AtomPub は、RESTスタイルに基づいたプロトコル仕様です。
RESTを正しく理解していないと上手に実際のリソースやリンク機構が設計できなくて、AtomPub仕様は基本的なリソースモデルとリンク機構を提供してくれるので、我々か独自に設計する必要のある部分が大幅に削減されます。
また、AtomPub対応のフレームフークやライプラリを利用すれば、実装工数も削減できる。
さらに、標準化されたプロトコルを用いることで相互運用性も高まります。
AtomPubのリソースモデル
AtomPubではAtomが規定しているリソースモデルをベースに、エントリを操作します。
AtomPubでは、コレクションのメタデータを表現するサービス文書(Service Document)と、エントリのカテゴリに指定できる値を列举するカテゴリ文書(Category Document)を追加しています。
メンバリソースの操作エントリ
単位での操作
フィードに含まれている各エントリは固有のURIを持ちます。それぞれのURIにHTTP メソッドを適用すればCRUD操作が実現できます。
- GET--エントリの取得
- PUT--エントリの更新
- DELETE--エントリの削除
- POST--エントリの作成CRUD操作の最後は作成です。
メディアリソースの操作
メディアリソースの作成
エントリの作成はコレクションリソースへのPOST で実現しました。
しかし、メディアリソースはエントリではなく画像フアイルなどになります。<entry>
要素のXML文書では画像本体を送ることができませんので、メディアリソースの画像本体をPOSTします。
メディアリンクエントリはrel属性edit-mediaとeditの2つの<link>
要素を持ちます。edit-mediaリンクはメディアリソース(画像フアイル)の編集用URI です。editリンクはメディアリンクエントリ自身の編集用URI です。
メディアリソースの更新
画像データを更新したい場合は、edit-mediaリンクで参照できるURIにPUTを送ります。
サービス文書
AtomPubのサービス文書では、そのWeb APIが提供するコレクションリソースのメタデ-タを複数まとめて記述できます。サービス文書はコレクションリソースのリストを集めたホームページのようなものだ
メディアタイプ
例:Content-Type:application/ atomsvc+xml
Content-Typeへッダにapplication/ atomsvc+xml というメディアタイプを利用しています。
<service>
要素
サービス文書は要素をルートに持つXML文書です。
<workspace>
要素
<service>
要素は子要素に必ず1以上の<workspace>
要素を持ちます。
<workspace>
要素はいくつかのコレクションリソースをまとめるためのものです。<workspace>
要素はAtomから借りてきた<atom:title>
要素を子要素として持ちます。すなわち、<workspace>
要素にはタイトルを付けられます。
<collection>
要素
<workspace>
要素は0個以上の<collection>
要素を持ちます。
<collection>
要素はAtomPubのコレクションリソースのメタデータを表現します。
- コレクションリソースのタイトル(
<atom:title>
要素) - コレクションリソースのURI(
<collection>
要素のhref属性) - コレクションリソースが許容するメディアタイプ(
<accept>
要素) - コレクションリソースが許容するカテゴリ(
<categories>
要素)
<accept>
要素
<accept>
要素はこのコレクションリソースが受け付け可能なメディアタイプを示します。
カテゴリ
<categories>
要素は、このコレクションリソ-スで利用可能なカテゴリを示します。<categories>
要素は fixed属性を持てます。
fixed属性の值 | 意味 |
---|---|
yes | このコレクションのエントリには<categories> 要素で指定したカテゴリのみを指定可能 |
no(デフオルト値) | ここで指定したカテゴリ以外を持ったエントリも追加できます |
カテゴリ文書
カテゴリは、サース文書ではなく外部のカテゴリ文書で表現することもできます。カテゴリ文書のURIはサービス文書の<categories>
要素のhref属性で指定します。href属性がある場合は<categories>
要素は子要素を持てません。
カテゴリの追加
AtomPubのカテゴリはソーシャルプックマークの「タグ」に近いと考え:
ソーシャルプックマークでは、プックマーク登録時に自分の好きなタグを付けられます。このとき、それまで利用したことのないタグを付けた場合は、そのタグを自動的に作成します。
fixed属性の值 | カテゴリの追加とき |
---|---|
yes | AtomPub とは別のインタフエースでカテゴリ情報を編集できるようにしなければならない |
no | エントリの新規投稿時にクライアントが自由にカテゴリを付けるようにサ-バを実装すべき |
AtomPubに向いているWeb API
AtomPub に向いている Web API
- プログサービスのAPI・検索機能を持つデータベースのAPI
- マルチメディアフアイルのリポジトリのAPI
- タグを使ったソーシャルサ-ビスのAPI
AtomPub に向いていないWeb API
- Cometを利用するような、リアルタイム性が重要なAPI
- 映像のストリーム配信など、HTTP以外のプロトコルを必要とするAPI
- データの階層構造が重要な API「タイトル」「作者」「更新日時」など、Atomフオーマットが用意するメタデータが不要な API