連載 [第4回] :
  PerlでWeb APIを使いたおす

アーキテクチャスタイル「REST」とは何か

2006年10月10日(火)
水野 貴明

AtomPPとは


   RESTアーキテクチャスタイルを利用して設計されたWeb APIの汎用的な仕様として、AtomPPを見ていくことにしましょう。AtomPP(Atom Publishing Protocol)はかつてはAtom APIと呼ばれていたもので、有志によって開発が行われています。

   Atomというと、RSSと並ぶ情報配信フォーマットを思い浮かべる方もいるかもしれません。そちらはAtomの中でもAtom Feedと呼ばれるデータフォーマットです。Atomは、情報配信フォーマットであるAtom Feed、Atom Feedを自動的に発見するための仕様であるAtom AutoDiscovery、そしてAtomPPの3つの仕様で構成されています。

   AtomPPは、やり取りする情報としてAtom Feedのデータを利用します。AtomPPは現在まだ完成してはおらず、本稿執筆時のバージョンは0.9ですが、すでにAtomPPを利用したAPIも登場しています。例えば、はてなブックマークAPIでは、AtomPPを利用して、ブックマークを登録したりできます。また、Movable Type(TypePad)やBlogger、livedoor Blogは、AtomPPを利用したブログのエントリの取得や更新、削除に対応しています。さらに、GoogleがGoogle Calendarなどで利用しているGData(Google Data API)では、AtomPPの仕様を拡張し、RSSなどをAtom Feedの代わりにも利用できるようにしたものを採用しています。

   それではAtomPPの仕様を見ていくことにしましょう。AtomPPでのリソースは表5の3つに分類できます。
リソース 意味
Collection Memberをまとめたもの
Member 個々の情報
Introspection Document アクセス可能なCollectionの一覧

表5:AtomPPにおけるリソース

   ブログを例にとると、Memberが個々のブログのエントリ、Collectionはブログそのもの、Introspection Documentはアクセス可能なブログの一覧、ということになるでしょう。また、カテゴリもCollectionの1つということになります。ブログにエントリを追加する場合は、ブログ(Collection)のURIに対してPOSTメソッドでエントリのデータを送信することになります。同じブログのURIに対してGETメソッドでアクセスすれば、エントリの一覧が取得できます。

   そして個々のエントリの取得、編集や削除は、そのエントリのURIに対してGETやPUT、DELETEメソッドを利用してアクセスすることで可能になるわけです。

   例えばブログに新しいエントリを投稿するのであれば、そのブログのURI(Collection)に対して前ページのリスト16のようなAtom Feed形式のデータをPOSTで送信します。

リスト16:AtomPPでブログのエントリを登録する
<?xml version="1.0" ?>
<entry xmlns="http://www.w3.org/2005/Atom">
  <title>Blog Title</title>
  <id>121341341</id>
  <updated>2006-08-11T12:13:00Z</updated>
  <author><name>Taro Yamada</name></author>
  <content>ブログの内容</content>
</entry>

   AtomPPが正しくそのリクエストを受け取り、処理を終えた場合、レスポンスとして「201 Created」というレスポンスコードが返ってきます。そしてLocationヘッダーとしてMemberのURIが渡され、同時に作成されたMemberの情報がAtom Feedとして渡されます(リスト17)。

リスト17:Member作成の際のレスポンスデータ
HTTP/1.1 201 Created
Date: Fri, 11 Aug 2006 12:13:23 GMT
Content-Length: 332
Content-Type: application/atom+xml; charset="utf-8"
Content-Location: http://example.org/edit/121341341.atom
Location: http://example.org/edit/121341341.atom

<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom">
  <title>ブログタイトル</title>
  <id>121341341</id>
  <updated>2006-08-11T12:13:00Z</updated>
  <author><name>Taro Yamada</name></author>
  <content>ブログの内容</content>
  <link rel="edit"
      href="http://example.org/edit/first-post.atom"/>
</entry>

   この後、作成されたMemberを参照したいときはMemberのURIに対してGETメソッドでアクセスをすればいいですし、削除したい場合はDELETEメソッドでアクセス、編集はPUTメソッドでアクセスして新しい情報を再びAtom Feedで渡すわけです。

   なお、MemberやCollectionといった呼び名は現在のAtomPPの最新の仕様に基づいています。古い仕様(バージョン0.3まで)では、アクセスするURIに基づいて、PostURIとFeedURI、EditURIという名前で呼ばれていました。PostURIとFeedURIはCollectionのURI、EditURIはMemberのURIに相当します。古い仕様を利用しているAPIでは、これらの呼び名が使われていることがあります。また、PostURI(POST用)とFeedURI(GET用)が異なるURIになっているケースもあります。

   ちなみにここでは触れませんが、AtomPPはSOAPを使うこともできる仕様になっています。

1973年東京生まれ。エンジニア兼技術系ライター。株式会社はてな勤務。近著に「俺流Amazonの作り方」(アスキー)、「詳解RSS〜RSSを利用したサービスの理論と実践」(ディー・アート)など。趣味はラテン音楽と海外旅行と神輿。現在、家を荒らしまわるネズミの被害に頭を悩ませている。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています