はてなブックマーク Atom API

PUT /atom/edit/XXXX って

レスポンスは “200 OK”しか返ってこないんですね orz


200 OK
Content-Type: application/x.atom+xml

<?xml version="1.0" encoding="utf-8"?>
<result>ok</result>

とか、返して欲しいんですけど…
XML に対しては XML で応答して欲しいというか。

まだ試してないけど、“DELETE /atom/edit/XXXX”も“200 OK”しか返してこない予感。

はてなブックマークAtomAPI の光と影

DELETE /atom/edit/XXXX も試してみたよ

予感は当たってました。まぁ、“DELETE /atom/edit/XXXX”はリクエストも XML を含まないので、レスポンスに XML が含まれないのは、それはそれで辻褄が合ってるからいいか。
でも、できれば XML でレスポンスが欲しい。他の(はてな以外での) Atom API の実装では、みんな何がしか XML が返ってくるし。

XML が返ってくれば何でもいいかというと、del.icio.us のように API によって、フォーマットが全然違ったりするのは却下したい。

続・はてなブックマークAtomAPI の光と影

GET /atom/feed

続いて、“GET /atom/feed”を試してみた。この API で取得したブックマークの一覧には、tag が含まれてないんですね。ショック、ショック、大ショック〜♪

summary には、コメントから tag をきれいに取り除いたものが格納されて返ってきます。
tag を取り除く処理が入っているんだから、tag を別のフィールド(というか要素)として返そうと思えば返せるってことだよね? 今後のことを考えると、tag とコメントを別のフィールドにきちんと分けて欲しい。今ならまだ、比較的簡単に対応できますよね。

ってことで、idea:2246 が実現されることを強く希望します。

レスポンスの不統一

なんでこんなにバラバラなのか?

例えば、“http://del.icio.us/api/posts/add?”や “http://del.icio.us/api/posts/delete?”に対するレスポンスは


<?xml version='1.0' standalone='yes'?>
<result code="done" />

なのに “http://del.icio.us/api/tags/rename?”に対するレスポンスは


<?xml version="1.0" standalone="yes" ?>
<result>done</result>

だし、“http://del.icio.us/api/tags/bundles/set”と “http://del.icio.us/api/tags/bundles/delete” に至っては


<?xml version='1.0' standalone='yes'?>
<result>ok</result>

といった具合。節操なさすぎ(笑)
del.icio.us では done と ok を使い分けてる、っていう主張も何気に入っている。

ちなみに、エラー時のレスポンスは、“http://del.icio.us/api/tags/bundles/set”に対するものでも


<xml version="1.0" standalone="yes" ?>
<result code="something went wrong" />

といったように result code="エラーの種類、原因など" って形式になっている。
なので、正常時は <result code="ok" /> で統一してくれると吉。

過去の任意のはてなブックマークを編集しようとすると

当該ブックマークの eid がわからないとどうしようもないわけで

“GET /atom/feed”では「最近の」ブックマークの eid しかわからないため、「昔の」ブックマークを編集・削除したくなったときに Atom API 経由では、現状では操作ができない。そこで、任意のブックマークの eid を知るための API、もしくは全ブックマークの eid 一覧を取得できる API が欲しい(idea:2272)。

あるいは、“GET /atom/feed”を拡張して、任意の件数のブックマークを取得できるようにする(取得したい件数を指定できるようにする)というのでも OK。というか、件数を指定できないのって、不便すぎ。

あと「最近の」ってあいまいなこと言わずに、何日前まで(もしくは何件分)遡って取得するのか、具体的な数字を明示して欲しい。

はてなブックマークAtomAPI の光と影 3rd Stage

やっぱり、レスポンスには XML が入ってた方がいい

例えば、はてなブックマークAtomAPIAjax で使おうとすると、レスポンスに XML が含まれない API に関しては、以下のような問題を回避できないことになる。


xmlhttp.readyState == 4 && xmlhttp.status == 200

をもって正常レスポンスと判断している場合が多いようですが、Firefox では後述のバグ?によるエラーが発生します。
なので、xmlhttp.status を参照せず、xmlhttp.responseTextがあるかどうかで判断した方が良いようです。

xmlhttp.readyState == 4 && xmlhttp.responseText

ひげぽん OSとか作っちゃうかMona- - XMLHttpRequest on Ajaxのあれこれ

Firefox にそんなバグがあったとは。
ってことで、xmlhttp.responseText に中身があることを保証する、すなわち、レスポンスとして常に XML を返すようにすることで救われるという話でした。