Web APIの次世代標準プロトコル「Atom Publishing Protocol」
第2回 AtomPubにおけるリソース操作 - CRUD
おさらい
それでは,Atomの詳細を解説していきたいとおもいます。
前回,Atomの基本部分は二つの仕様から構成されていることをご紹介しました。
一つはAtomフィードと呼ばれるサーバから配信されるデータフォーマットに関する仕様で,二つめはサーバへコンテンツを登録したりそのデータを編集したりするためのプロトコル仕様です。
前者はAtom Syndication Format,後者はAtom Publishing Protocolというのが正式名称です。本稿では,それぞれAtomフィード,AtomPubという呼び方を使うことにします。
AtomフィードはRSSフィードがあるにも関わらず,新しく作られました。
これについては,RSSを使うべきだったという否定的な意見もありますし,RSSではできないことがあるからこそ作ったという肯定的な意見もあります。
いずれにせよAtomフィードは,RSSフィードとともに使われていくことになるでしょう。それぞれのフィードはよく考えられた仕様であり,シンプルにできていますので,両方に対応することはさほど難しくありません。並存することのデメリットについて,あまり目くじらをたてる必要もないでしょう。
また,よくRSSとの違いを聞かれますが,RSSはAtomのようにサーバ側に向かう方向の仕様がありません。サーバからの情報配信に利用することはできても,クライアントからサーバへWebリソースを登録・更新・削除する際にRSSを利用することはできません。
Atomフィード
本稿ではAtomPubを中心に説明する予定ですので,Atomフィードのフォーマットについてはあまり深く説明をしません。しかし,AtomPubでもこのフォーマットを利用しますので,かいつまんで紹介します。既にご存知の方は,読み飛ばして「AtomPub:Webリソースの操作」からお読みください。
Atomフィードは情報のリストであり,XML文書で表現されます。フィードはエントリと呼ばれる一つ一つの情報から構成されています。それぞれentry要素,feed要素で表現されます。RSSをご存知の方は,item要素がentry要素に相当し,channel要素がfeed要素に相当するとお考えください。
フィードは後で説明するコレクションのXML表現に相当し,エントリはメンバのXML表現に相当します。
フィードフォーマット
次に示すコードはAtomフィードの一例です。フィード自身のタイトルや作者の情報,そしてidが記述されています。このidはフィード固有のもので,何らかの法則で割り振られます。
フィードは情報のリストですので,0個以上のentry要素を子要素として持つことができます。以下の例では一つのエントリがリストアップされています。
Atomフィードの例(RFC4287より抜粋)
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Example Feed</title>
<link href="http://example.org/"/>
<updated>2003-12-13T18:30:02Z</updated>
<author>
<name>John Doe</name>
</author>
<id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
<entry>
<title>Atom-Powered Robots Run Amok</title>
<link href="http://example.org/2003/12/13/atom03"/>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2003-12-13T18:30:02Z</updated>
<summary>Some text.</summary>
</entry>
</feed>
表1はatom:feed(接頭辞はRFC 4287で規定されている名前空間 http://www.w3.org/2005/Atom の意味で使用しています)に出現できる主な子要素の一覧です。子要素の順番については意味がないと定義されていますので出現順序は任意となっています。
表1 atom:feedに出現できる子要素(表中の「出現ルール」は,*:0個以上,?:1個または0個,1:1個出現するという意味で使用している)
| 要素 | 出現ルール | 内容 |
|---|---|---|
| atom:author | *[注1] | 著者情報 |
| atom:category | * | カテゴリを表す |
| atom:contributor | * | 貢献した人 |
| atom:generator | ? | 生成したソフトウエア等の情報 |
| atom:icon | ? | このフィードに対するアイコン |
| atom:id | 1 | フィードを一意に識別する識別子 |
| atom:link | *[注2] | web リソースに対するリンク(意味が与えられる場合があります) |
| atom:logo | ? | フィードに対するロゴイメージ |
| atom:rights | ? | 権利情報 |
| atom:subtitle | ? | 人間が理解できる説明または副題 |
| atom:title | 1 | 人間が理解できるタイトル |
| atom:updated | 1 | (重要でない更新を除く)最新更新時刻 |
| atom:entry | * |
基本的には表中の出現ルールに従いますが,以下の条件がつきます。
- [注1]子要素のatom:entryが全くatom:authorを含まない場合は1個以上のatom:authorが出現する必要があります。
- [注2]自分自身のフィードを取得するためのURIをrel属性値がselfである要素として一つだけ含むべきです。
- [注2]rel属性値がalternateである要素において,type属性値とhreflang属性値の組み合わせが同じような要素を複数出現させることはできません。
Web APIの次世代標準プロトコル「Atom Publishing Protocol」
- 第4回 Atom Publishing Protocolを試す
- 第3回 リソースの操作を追う
- 第2回 AtomPubにおけるリソース操作 - CRUD
- 第1回 Web APIの次世代標準プロトコル


