Hatena::ブログ(Diary)

naoyaのはてなダイアリー

June 30, 2005

AtomPP でタグの編集に関するつぶやき

思考がまとまらないまま少しつぶやいてみます。

はてなブックマークの API の拡張の実装をぼちぼちやってます。フィードにページングの機能を付けて過去のフィードを取得できるようにしたり、タグで絞り込んだフィードが取得できるようにしたりといったところは実装済みです。

以前に Atomフィード内のタグはどう表現するかというところで、dc:subject か category か、と思ったのですが現在はてなブックマークで利用している IETF ドラフト以前の仕様では category 要素はないし、既存のクライアントやAtomPP 側との整合性を考えるとドラフト版に移行するのは早計、と見て dc:subject で表現しています。

...
<entry>
  <title>はてなブックマーク</title>
  <link rel="related" type="text/html" href="..." />
  <link rel="alternate" type="text/html" href="..." />
  <link rel="service.edit" type="application/x.atom+xml" href="..." title="..." />
  <issued>2005-06-30T20:22:00+09:00</issued>
  <author>
    <name>naoya</name>
  </author>
  <id>tag:hatena.ne.jp,2005:bookmark-naoya-1234</id>
  <summary type="text/plain">ほげほげ</summary>
  <dc:subject>hatena</dc:subject>
  <dc:subject>bookmark</dc:subject>
</entry>
...

といった具合です。

それから、タグの一括置換のインタフェースも実装済みです。これに合わせてAPIも作ろうと思ったところでちょっと悩み事が出てきました。

del.icio.us の API ではタグの一括置換も可能なのですが、del.icio.us API は Basic認証 + 独自XML なので、自社のサービスに特化したシンプルな API になってます。一方、はてなブックマークの方は AtomPP を採用してます。

ブックマークの投稿(POST)、編集(EDIT)、削除(DELETE)なんかはデータ構造的にちゃんとエントリーになってて分かりやすかったのですが、問題はタグをリソースと見立てて編集するとき。リソースとしてタグを中心に添えた場合に、Atomフィードでタグを表現するのがどうしたものか良く分かりません。

つまり、タグの一括置換機能を AtomPP で実現しようとしたときに EditURI に対して PUT するとき送りつける XML 文書のフォーマットはどんな風になるのか、という所です。

TypePad の AtomAPI で、TypeList にリストを放り投げる場合は以下のようなフィードを POST しています。(TypePad AtomAPI より)

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="..." xmlns:rvw="...">
  <book:isbn>0375412808</book:isbn>
  <content>This is a funny book.</content>
  <rvw:value>4</rvw:value>
</entry>

このフィードの構造は、Atomフィードの仕様に照らし合わせると必須に指定されている title 要素や link 要素がないのですが、AtomPP の中ではそれもありなのかなあ? だとすると、/atom/tag/bookmark とかに

<entry>
  <dc:subject>hatena</dc:subject>
</entry>

とか PUT してやると bookmark タグ → hatena タグに一括置換するような仕様もアリなのかなという気になってくるのですが。

あとは、タグ一覧を取得する API。AtomPP 的には FeedURI で実現するとして、GET で

<entry>
  <dc:subject>atom</dc:subject>
  <dc:subject>bookmark</dc:subject>
  <dc:subject>hatena</dc:subject>
   ...
</entry>

とか返ってくるようにする? タグの利用回数や最終利用時刻なんかも含めたいのだけど、その場合は attribute で表現するとして dc:subject には追加できないし...。とか考えてると、

<entry>
  <title>blog</title>
  <link rel="alternate" type="text/html" href="http://b.hatena.ne.jp/naoya/blog/" />
  <link rel="service.edit" type="application/x.atom+xml" href="..." />
  <hatena:bmcount>2</hatena:bmcount>
  <hatena:bmtimestamp>2005-06-30:20:41:00</hatena:bmtimestamp>
</entry>
<entry>
  <title>hatena</title>
...

とかかなとか。

なんて色々と考えてると Atom で全部実現するのが大変な気がしてきました。このあたりをしっかり仕様の範囲内でまとめられるかどうか、試行錯誤中です。詳しい方、お、教えてください。

tsupotsupo 2005/06/30 22:22 「タグ一覧を取得する API」は本人のもの以外に、(将来的に)「引数で指定したユーザのタグ一覧を取得できる」ような仕様にする、というようなことも考慮すると、Atom PP にこだわらなくてもいいような気がします。

naoyanaoya 2005/06/30 23:20 自分のブックマークの編集機能とタグの編集機能を分けて別の API 仕様で実装するという手もアリと言えばアリですね。

認証が二系統になったりするのは嫌なので、WSSE + XML over HTTP かなあ。

torumtorum 2005/07/01 21:26 悪いニュースは、現行のAtom0.3系で上記に上げられている事をすべて行うのは難しいと思います。

良いニュースは、現在固まりつつあるAtomフォーマットではCategory、AtomPPではCollectionというのがあって、まさにぴったりの仕組みとなってます。


タイミングが微妙ですが、Atomフォーマットは今から一、二週間で正式になります。AtomPPはその後もうちょっとかかると思います。

naoyanaoya 2005/07/02 00:26 そうですねえ、現行の仕様との折り合いをどうつけるかというのと、正式版になってから実装が追いつくまで待つかというところのトレードオフかなという気もします。

なるべく正式版に移行しても仕様の変更がいらないように考慮しないといけないなあ、という印象です。

トラックバック - http://d.hatena.ne.jp/naoya/20050630/1120131821
Connection: close