Goodpic.com
2003年10月20日

ATOM APIの解説 ブログの統一フォーマット

weblog(ブログ)のデータ構造、API、シンジゲーションなどの統一フォーマットをツールディベロッパーで決めていこうというプロジェクト、ATOMの仕様策定が大分進んできたようです。O'Reillyのxml.comにATOMについてよくまとめられた記事があったのでメモ。
原文はこちらの「The Atom API by Mark Pilgrim」なのでぜひチェックしてください。またATOP APIの詳しいスペックはこちら「The AtomAPI draft-gregorio-07.html
The LiveJournal API,The Blogger API,The MetaWeblog APIなどの開発経緯と問題点を踏まえて、ATOP APIのメリットをまとめると、以下のようになるそう。

・Schemaを持つWell-defined(きちんと定義された)データモデル
・RPCに依存せずDoc-literalなWEBサービス
・XML namespacesの利点をフルに活用可能
・HTTPの利点をフルに活用
・セキュアな通信

その他、ATOMの特徴的な機能を個別に解説

■ API Discovery
これまでは http://example.com/mt/mt-xmlrpc.cgi のように単一のxml-rpcのURLにアクセスし、個々のメソッドを呼び出すのが通常だが、この方法だと標準のAPI以外に拡張された機能をクライアントソフトがどのように使えばよいか分からない。
ATOMではまず、サポートする機能が記述されたXMLにアクセスし、どのようなメソッドをどのURLで呼び出すのか、サービス情報をクライアントが入手することができる。機能リストのXMLは<head>内のlink tagで記述される。例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>My Weblog</title>
<link rel="service.edit" type="application/x.atom+xml"
href="/myblog/atom.cgi/introspection" title="Atom API" />
</head>
<body>
...
</body>
</html>

この場合は /myblog/atom.cgi/introspection というURLにアクセスすると、使用可能な機能、メソッドがHTTPで以下のようなレスポンスで通知される

GET /myblog/atom.cgi/introspection HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Type: application/x.atom+xml

<?xml version="1.0" encoding="utf-8"?>
<introspection xmlns="http://purl.org/atom/ns#" >
<search-entries>http://example.com/myblog/atom.cgi/search</search-entries>
<create-entry>http://example.com/myblog/atom.cgi/edit</create-entry>
<edit-template>http://example.com/atom.cgi/templates</edit-template>
<user-prefs>http://example.com/myblog/atom.cgi/prefs</user-prefs>
<categories>http://example.com/atom.cgi/categories</categories>
</introspection>

core Atom APIとして実装される機能の他にも、namespacesを拡張することで独自のメソッドを追加することも可能。

■ Retrieving Entries
すでにブログに登録された記事の検索をAPI経由でおこなうことができる。例えば /myblog/atom.cgi/search?atom-last=20 のようなGETリクエストを投げることで、最新の記事を20件取得する。レスポンスの例は以下のようなもの

<search-results xmlns="http://purl.org/atom/ns#" >
<entry>
<title>My Second Post</title>
<id>http://example.com/atom.cgi/edit/2</id>
</entry>
<entry>
<title>My First Post</title>
<id>http://example.com/atom.cgi/edit/1</id>
</entry>
</search-results>

HTTPでのデータのやり取りは基本的にRESTアーキテクチャを原則とし、記事の取得はGET,記事の書き込みにはPOSTを利用する。XMLフォーマット以外のコンテンツを取得、ポストすることも可能でCDATAブロックにmode="escaped"というアトリビュートで挿入する。画像のようなバイナリーデータもBase64でエンコードすることで挿入。コンテンツXMLデータもnamespaceで独自に拡張することが可能で、例えばMovableTypeの「記事へのコメントの許可」などはMovableTypeのネームスペースで記述する。以下例

POST /myblog/atom.cgi HTTP/1.1
Host: example.com
Content-Type: application/x.atom+xml

<?xml version="1.0" encoding="utf-8"?>
<entry
xmlns="http://purl.org/atom/ns#"
xmlns:mt="http://www.movabletype.org/atom/ns#">

<title>My Entry Title</title>
<created>2003-11-17T12:29:29Z</created>
<mt:allowComments>1</mt:allowComments>
<content type="application/xhtml+xml" xml:lang="en">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Hello, <em>weblog</em> world!</p>
<p>This is my first post <strong>ever</strong>!</p>
</div>
</content>
</entry>

ポストの結果は TP/1.1 201 Created や HTTP/1.1 205 Reset Content など、HTTPのStatus codeで受け取る。

以上のようにATOM APIはHTTPベースのXML通信というRESTアーキテクチャをベースにしていて、非常にシンプルかつ分かりやすくなっています。CGIを作るような気軽さでWEBサービスを構築することができるわけで、クライアント<->サーバに限らず、サーバ間、クライアント間でも相互に機能を呼び出せるとなると、色々と面白い実装も考えられそうです。

- 過去の記事
weblogとRSS MetaDataのセマンティック記述 Atom
ATOM API Implementation

Posted by jkanekomt at 2003年10月20日 16:34 | trackBack



Comments

いつもながら有益かつ整理された情報感謝です。
僕が使ってるZope(Plone)というWebApplicationServerもURLベースでメソッドを実行できてかなり便利です。
RESTベースってのも現実的ですよね。
しかし、だんだん機能は豊富になっていくのは確かで、
今は勉強がてら自前でシステムを拡張してますが、
ATOMが策定されて、MTのようなシステムに組み込まれて
実際に機能し始めた暁には、自作システムから汎用の
システムに乗り換えようかなぁー

Posted by: koh at 2003年10月21日 10:49

API Discoveryは発想的にすごく面白いなと思いました。基本的な機能はMTなどのツールのcore ATOM APIのバージョンアップにまかせて、拡張機能の開発に専念することで、独自にカスタマイズされたシステムが増えてくると面白そうですね(GPS位置情報に強いシステムとか)。
逆に2chなどのコミュニティーとして完結しているシステムが、こういった流れにどのように対応してくるのかも興味深いですね。

Posted by: Jun at 2003年10月21日 16:52
Post a comment









Remember personal info?







関連記事