なにはともあれはリソースのことを考えよう。 タグをリソースとするならまずはそれに URI を割り当てなければならない。 僕(yohei) の "atompp" というタグの URI は以下のような形式とする。
http://b.hatena.ne.jp/atom/yohei/tag/atompp
次に考えるのはタグリソースの 表現に何を使うか。 構造を持った情報なので XML になるのはすんなり確定。 問題はその形式。候補は以下のとおり。
- 最新 AtomPP のメンバー要素(member)
- 長所: 軽い、簡単
- 短所: member/@href で参照する先の URL はどの XML 形式にする? あるいはタグ名のテキスト(plain/text)か?
- Atom の entry 要素(entry)
- 長所: 標準。使える子要素がいろいろ定義されている
- 短所: (他に比べて)重い。ブックマークの dc:subject との違いがわかりにくい
- 独自要素(hatena:tag or dc:subject?)
- 長所: 自由。簡単
- 短所: クライアントにとって扱いが難しい。独自すぎる
ここでは entry がいいのではと思うので、それで進めてみる。 entry を選んだのはそのバランスによる。 たとえば entry の子要素にはもちろんタグの更新時刻や利用回数も入れられる。 タグ名は title に入れるのが素直そうだ。
次はこのリソースに対してどんな操作を行うか。 REST 的に考えると必要そうな操作は取得(GET)、削除(DELETE)、更新(PUT)、新規作成(POST)の四つ。 ま、GET と DELETE は必要だろう。 POST で新規作成はいらなさそうだ(タグはブックマーク時に自動的に新規作成されるので)。 PUT で更新できるのはタグ名くらいかな。 タグにコメントなんてつけられなくてもいいよね。
さて、これでタグリソースは固まった。 今度はタグの一覧を考える。 AtomPP 最新最新版ならコレクションという便利なものがあって、 上記どの種類の XML 形式でもひとつのコレクションとして扱える。 でもここではタグリソースをあえて Atom entry にしたので、feed 要素を使ってみよう。
一覧取得のときに、オフセットや取得数、タグ名をワイルドカードや正規表現で検索などをしたい気もするけど、 そういうのはコレクションリソースの URI の query string でやればよさそうなので、 ここでは単純に全タグ取得を考える。
ちなみにコレクションリソースの URI に適用できるのは GET だけ。
以下に例を書いておく。名前空間宣言や X-WSSE ヘッダとか xml:lang とかは省略してるけど許してね。
タグ一覧取得
GET /atom/yohei/taglist HTTP/1.1 Host: b.hatena.ne.jp
HTTP/1.1 200 OK Content-Type: application/x.atom+xml <feed> ... <entry> <id>タグの ID</id> <!-- Edit URI へのリンク --> <link rel="service.edit" type="application/x.atom+xml" href="/yohei/atom/tag/atompp" title="atompp"/> <!-- title はタグになる --> <title>atompp</title> </entry> ... </feed>
タグの一括置換というのは要するにタグ名の変更(=リソース title の変更)と考えて、 EditURI に新しいタグ名を PUT する。
PUT /atom/yohei/tag/atompp HTTP/1.1 Host: b.hatena.ne.jp Content-Type: application/x.atom+xml <entry> <id>タグの ID</id> <!-- いらんか --> <title>新しいタグ名</title> </entry>
タグの一括削除はタグリソースの URI を DELETE する。
あとはタグリソースが URI を持つようになったので、ブックマークリソースのタグ要素(dc:subject or category)からリンクするのがよさそうだ。
0 件のコメント:
コメントを投稿