クローンサービスのAPIデザイン

最近トラブル続きのTwitterのかわりにWassrを使いはじめたひとたちにフォローしていただいてたくさんメールが来ました。

去年たくさんできたtwitterみたいなサービスの中で、自分が注目していたのはもごもごとWassrです。このふたつのサービスにはTwitter同様APIが用意されているだけでなく、そのAPIがTwitterのAPIと互換になっていると書かれていたからです。


1年前に書けばよかったのにとおもいつつ、今日はサービスのAPIがほかのサービスと互換にすることについて書きます。

いいところ

既存のサービスと完全に同じAPIにすると、そのサービス用に作られたツールを少し改造すればそのまま新しいクローンのサービスで使うことができるようになります。

Twitterのクローンであれば、そのサービスにTwitterとおなじAPIを用意すれば、Twitter用に作られた多数のツールをそのまま流用することができます。

実例として、Twitterのタイムラインを見たり投稿したりできるFirefoxの拡張機能TwitterFoxを使ってもごもごのタイムラインを表示、投稿できるかためしてみました。 twitternotifier@naan.net/components/nsITwitterNotifier.jsの中にあるtwitter APIのサーバ名が書かれている
const TWITTER_API_URL = "https://twitter.com/";
を、もごもごのAPIのサーバ名
const TWITTER_API_URL = "http://api.mogo2.jp/";
に書き換えるだけで、Twitterでいうfriends_timeline(ともだちの発言一覧)を得ることができました。もごもごにともだちがいないので自分一人ですけど....

Twitterfoxからもごもごに投稿することもできました。が、投稿はされていてページには反映されるもののTwitterfoxにはエラーが発生したと表示されるので、投稿のレスポンスがTwitterのAPIとは微妙に違っているのかもしれません。


Firefoxの拡張機能はたいていはjavascriptで書かれているので直接編集することができますが、Windowsで人気なTwitのようにOSネイティブのアプリケーションはバイナリエディタでしかAPIのエンドポイントを書き換えたりできません。そのアプリケーションがもともとアクセスするサーバの名前よりも、自分の新しいサービスのAPIのサーバの名前の方が長いとバイナリエディタで上書きすることができなくなってしまうので、同じ長さにするか、もしくはそれより短くしておくとバイナリの書き換えが不可能、ということがなくなります。

よくないところ

ほかのサービスとAPIを同じにするのはときとして大変です。FlickrのようにAPIの仕様が安定しているサービスもあれば、TwitterのようにAPIの仕様をたびたび変えているようなサービスとの互換性を維持していくのは面倒な作業になります。もごもごAPIもWassr API DocumentもTwitterと互換のAPIと書かれていますがTwitterfoxでアクセスしてみると(どこに原因があるのかはきちんと調べていませんが)やっぱりどこかで互換でなくなっているようでうまく動きませんでした。

元のサービスにない新しい機能を追加した時に、元のサービスのAPIデザインとは別に設計した方が効率的にできることもあるでしょう。もとのサービスのデザインがいまいちだということもあるでしょう。

まとめ

いいところもわるいところもありますが、既存のサービスと似たサービスのAPIを設計する時、既存のサービス向けに作られた豊富なクライアントアプリケーションを使えるように完全互換にすることも検討してみてはいかかでしょうか。

他の事例

del.icio.usクローンのFaves(以前はblue dotsという名前でした)は、はじめSOAPのAPIしかありませんでしたが、あとになってdel.icio.us互換のAPIが実装されました。

その結果del.icio.usのために書かれたAPIライブラリのホスト名を書き換えるだけでFavesのデータにアクセスできるようになって、非常に便利になりました。

tags

  • API
  • design
  • 「クローンサービスのAPIデザイン」のはてなブックマーク数
  • 「クローンサービスのAPIデザイン」deliciousブックマーク数
  • 「クローンサービスのAPIデザイン」をはてなブックマークに追加
  • save "クローンサービスのAPIデザイン" to del.icio.us
  • 「クローンサービスのAPIデザイン」をリアルタイムブログ検索
  • permalink
  • TheSchwartzで仕事をあとにまわす
  • libxmlのHTMLパーサ+XPathでid関数が使えなくてはまる

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required

trackbacks

トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。

http://labs.gmo.jp/mt/mt-tb.cgi/223
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2008 .07. 04 21:40

tagcloud

  • API3
  • C/C++3
  • E4X1
  • FUSE2
  • Firefox28
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • UI2
  • WebKit1
  • XML2
  • XPCOM4
  • XPath5
  • apache2
  • binary2
  • book1
  • data13
  • debug5
  • design2
  • experiments4
  • extension14
  • geo1
  • google gears2
  • google maps API1
  • greasemonkey4
  • httpd5
  • javascript22
  • linux1
  • logging2
  • mobile4
  • perl6
  • tips6
  • tool11
  • vim2
  • visualization3
  • widget1
  • wii3
  • windows7
  • サービス7
  • 和訳1

Archives

  • 2008.07 (2)
  • 2008.06 (4)
  • 2008.05 (5)
  • 2008.04 (4)
  • 2008.03 (4)
  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines