April 19, 2004

Atom just for Blogging?

Atom API のサーバ側をちょっといじくってるこの頃(というか今日見始めたばかりですが)。気になってきたことをメモです。

Atom API は汎用的コンテンツ編集API?

Atom API はBlog の XML-RPC まわりのために立ち上がったプロジェクトではありますが、仕様自体は拡張性があるので、別にBlogに限った用途なわけではありません。実際、TypePad の Atom API では、Blog 以外に TypeList や PhotoAlbum の編集を同様のAPIで処理することができます。

たとえば TypeList に書籍を追加するには、

POST /t/atom/lists/list_id=1 HTTP/1.1
Host: www.typepad.com
X-WSSE: my credentials

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://purl.org/atom/ns#" xmlns:book="http://sixapart.com/atom/book#" xmlns:rvw="http://purl.org/NET/RVW/0.1/">
  <book:isbn>0375412808</book:isbn>
  <content>This is a funny book.</content>
  <rvw:value>4</rvw:value>
</entry>

のようなリクエストを投げ、

HTTP/1.1 201 Created
Content-Type: application/x.atom+xml

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://purl.org/atom/ns#" xmlns:book="http://sixapart.com/atom/book#" xmlns:rvw="http://purl.org/NET/RVW/0.1/">
  <title>Jeffrey Steingarten: It Must've Been Something I Ate: The Return of the Man Who Ate Everything</title>
  <issued>2003-12-05T00:21:54Z</issued>
  <id>tag:typepad.com,2003:listitem-201</id>
  <book:title>It Must've Been Something I Ate: The Return of the Man Who Ate Everything</book:title>
  <book:author>Jeffrey Steingarten</book:author>
  <content>This is a funny book.</content>
  <rvw:value>4</rvw:value>
  <book:isbn>0375412808</book:isbn>
  <book:thumbnail>http://images.amazon.com/images/P/0375412808.01.THUMBZZZ.jpg</book:thumbnail>
</entry>

のようなレスポンスを受け取ります。エントリの要素の book:isbn は http://sixapart.com/atom/book# という namespace で拡張された要素を表しています。

こうしてみてくると、Atom というのは HTTP の REST アーキテクチャを利用した、汎用コンテンツ編集のAPIなのかなあ、という気もしてきます。よりライトウェイトになった SOAP のようなモノですね。実際、CPAN の XML::Atom モジュールでは、REST 風と SOAP 風での Atom API 実装をオプションで切り替えることもできます。つまり役割としてはSOAP とおなじレイヤーに位置しているということがいえます。atom-syntax メーリングリスト でもこれは話題になっていて、The Atom API is just for Blogging?スレッドからその様子を見ることができます。

しかし、ライトウェイトになった SOAP って、それ XML-RPC じゃダメなの?とか思ってしまいます。XML-RPC と違うのは、より REST アーキテクチャよりになっているということです。XML-RPC では、1つのエンドポイントURI (たとえば http://www.typepad.com/t/api)に対して、XML でエンコードされたメッセージを投げます。

もっともよく使われている XML-RPC の例としては weblogUpdates.ping がありますが、これは

POST http://example.com/rpc
Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param><value><string>blogname</string></value></param>
<param><value><string>blogurl</string></value></param></params>
</methodCall>

のような HTTP メッセージになっていて、メソッドがPOST であることとエンドポイントURIは固定されています。Atom の場合は、もう少しHTTPを有効に活用するために、

  • URI が編集対象のオブジェクト(エントリ)を表現する
  • GET で既存のオブジェクトを取得、POST で新規投稿、PUT で編集、DELETE で削除

と、より直感的になっています。それ以外にも認証を WSSE (Web Service Security Enforcement) を使用している、とかもありますがここでは省略。

しかし URI で編集対象を表現して、HTTP のメソッドで内容を書き換える、っていうと WebDAV を思い出します。Atom Wiki でも Relationship between Atom and WebDAV としてこの関係が議論されています。WebDAV はバーチャルなファイルシステムに特化しているのに比べ、AtomはAPIなのでより自由度が高い (= 実装側でやるべきことが多いという意味でもある)というところが違いでしょうか。

SOAP よりライトウェイト、XML-RPC より REST 重視、WebDAV よりアプリケーション層の自由度が高い。Atom の特徴を、競合技術と比較するとこう表現することもできるかもしれません。

Posted by miyagawa at April 19, 2004 01:55 PM | Permalink | Comments (0) | TrackBack(2)
Comments
Trackbacks
TrackBack URL for this entry: http://blog.bulknews.net/mt3/mt-tb.cgi/947
Atom API メモ
Excerpt: Atom API を実装するための情報を収集、整理しているところです。とりあえず、WSSE について。
Weblog: 観測気球
Tracked: April 19, 2004 04:04 PM
murphys law
Excerpt: murphys law
Weblog: murphys law
Tracked: August 5, 2005 04:28 AM
Post a comment