読者です 読者をやめる 読者になる 読者になる

WassrのTODO API

Wassr

何気なくWassrのTODO APIで遊んでいたのですが、これにはどきもを抜かれました!!この驚きを伝えたい!Wassrサイコー!

Wassr API Documents
http://wassr.jp/help/api


TODOの取得は、まあ普通です。

>>> from urllib import urllib
>>> from simplejson import load
>>> load((urlopen('http://username:password@api.wassr.jp/todo/list.json'))


びっくりしたのは、TODOの追加。
メソッドはPOSTのみということなので、当然BodyにJSONを入れてRequestするんだろう、Content-Typeはtext/javascriptなのかなぁ?と思っていろいろ試してみたのですが、うまくいかない。


うまくいった組み合わせはコレ。クエリ文字列にbody=todoを入れてPOSTする!Request Bodyは無視されて、testというTODOが追加されます。

>>> urlopen('http://username:password@api.wassr.jp/todo/add.json?body=tes
t', 'spam')


いままでいろんなWeb APIを見てきたけれど、これは思いつかないなぁ。
本当にこれで合ってるの?


【追記】
id:tokuhiromさんのコメントで、APIの仕様を理解できました。ありがとうございます!
ドキュメントにJSONの文字があったので、JSONでリクエストを投げるのだと勝手に思い込んでいたのですが、form encodedでPOSTするということなのですね。「form encodedでリクエストして、結果をJSONで取得」ということならば、ごく普通のAPIだと思います。


ただ、やっぱりエラー時にHTTP 200でエラー内容が返ってくるところとか、以下のようなリクエストを投げた時にどうのような結果になるか、ドキュメントからは解読しがたい(むしろドキュメントから予想される結果と異なる)ところなど、やっぱり腑に落ちない点はあります。

>>> from urllib import urlopen, urlencode
>>> urlopen('http://username:password@api.wassr.jp/todo/add.json?%s' % urlencode(
{'body':u'MySQLを極めて結婚する'.encode('utf-8')}),
urlencode(
{'body':u'Sam RubyのREST本を読む'.encode('utf-8')}))