第4回目は,より理解を深めていただけるよう,読者の皆様にもAtom Publishing Protocol(以下,AtomPub)を簡単に試していただけるツールや実装方法を幾つかご紹介します。
ツールの紹介(UNIXコマンドラインcURL)
最も簡単にAtomPubを試していただける手段の一つとして,UNIXコマンドラインツールである「cURL」(client for URLsの略でsee URL(シー・ユーアールエル)と発音します)を紹介します。このコマンドは,サーバから,あるいはサーバへデータ伝送を行うものです。対応するプロトコルはHTTP, HTTPS, FTP, TELNET, LDAP, FILE…と,盛りだくさんですが,AtomPubで利用する機能はHTTP(HTTPS)のみです。
cURLの使い方簡単にを以下に記述します。
[Usage]:curl [otions...] <url>
表1 cURL options
| options | 説明 |
|---|---|
| -X <command> | HTTPメソッドの設定 例:-X POST) |
| --data-binary <data> | POST,PUTするバイナリデータの設定 例:--data-binary @ntt.jpg(※1) |
| -H | HTTPヘッダーの設定 例:-H Content-Type:image/jpeg |
※1:ファイル名の前に"@"を付けること
cURLによるサービス文書の取得
それでは,実際にcURLを利用してみましょう。AtomPubの最初のステップは,サーバがどのようなコレクションを持っているか知るためにサービス文書を得ることです。具体的にはAtomPub対応のサーバは,クライアントにとっての最初の接続点であるサービス文書URIを公開していますので,そのURIに対してGETします。
表2 サービス文書URI
| サイト名 | サービス文書URI | 備考 |
|---|---|---|
| APP Test Site | http://bitworking.org/projects/ apptestsite/app.cgi/service/ ;service_document | 【作者】Joe Gregorio(Google) 【詳細】http://bitworking.org/ projects/apptestsite/ |
| Perl Atompub test site | http://teahut.sakura.ne.jp:3000/ service | 【作者】井上 武(NTT 未来ねっと研究所) 【詳細】http://teahut.sakura.ne.jp/ b/2007-07-26-1.html |
| Mixi Station API | 足跡:http://mixi.jp/atom/tracks 新着:http://mixi.jp/atom/notify フォト:http://photo.mixi.jp/atom | 【作者】(ミクシィ) 【注意】WSSE認証が必要 |
今回は接続先をAtomPubの提唱者であり,RFCの著者でもあるJoe GregorioさんのAPP Test Siteとし,cURLで接続してみます。
[dsakano@test $ curl -x GET "http://bitworking.org/projects/apptestsite/app.cgi/service/;serv
ice_document"
<?xml version="1.0" encoding="utf-8"?>
<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom">
<workspace>
<atom:title>AtomPub Test Site</atom:title>
/*中略*/
<collection href="media/">
<atom:title>media</atom:title>
<accept>*/*</accept>
<categories fixed="yes" />
</collection>
/*中略*/
</workspace>
</service>
レスポンスとして返ってきたサービス文書を見ると,以下のことがわかります。
- "AtomPub Test Site" というワークスペースがあること
- "AtomPub Test Site"の中に"media"というコレクションがあること
- "media"のコレクションURIはhttp://bitworking.org/projects/apptestsite/app.cgi/service/mediaであること
- "media"に対するPOSTで許可されているのは"*/*"つまり,全てのファイル形式であること
cURLによるコレクションに新メンバーを追加
どのようなコレクションがあるかわかったところで,次は"media"コレクションに新しいメンバーを追加してみましょう。これはコレクションURIに対してPOSTすることで実現します。以下の例ではクライアントからサーバへfeed-red.jpgファイルをPOSTで送っています。サーバ側で正しく処理されてコレクションに新メンバーが追加されると以下の例のようにAtomエントリがレスポンスとして返ってきます。
[dsakano@test$ curl -H Content-Type:image/jpeg --data-binary @feed-red.jpg -X POST "http://bitworking.org/projects/apptestsite/app.cgi/service/media" <?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app"> <title /> <link href="http://bitworking.org/news/414/" /> <id>http://bitworking.org/news/414/</id> /*中略*/ <link href="414/" rel="edit" /> <link href="414/;media" rel="edit-media" /> <content src="http://bitworking.org/images/dev/414-.jpe" type="image/jpeg" /> </entry>
cURLによるメンバーの更新,削除
このAtomエントリからは次の情報が得られます。
- エントリーリソース:
http://bitworking.org/projects/apptestsite/app.cgi/service/media/414/ - メディアリソース:
http://bitworking.org/projects/apptestsite/app.cgi/service/media/414/;media
上記二つのURIを利用することでこのメンバーを操作することができます。例えば,Atomエントリを更新したいとき(写真のタイトルやコメントを更新等)はエントリーリソースに対してPUTします。先ほどPOSTした画像そのものを更新したいときは,メディアリソースに対してPUTします。作成したメンバーをコレクションから削除したいときは,エントリーリソースに対してDELETEします。実際,消されているかどうかはコレクションURIをGETして視認するとよいでしょう。
このように,cURLを利用すれば非常に簡単にAtomPubを試すことができます。これはAtomPubの設計思想であるRESTがHTTP通信を利用するという非常に簡単かつ一般的である仕組みであるために,既存のツールを使えば簡単に試すことできるのです。

