You don't need API version 2
周回遅れ感が半端ないけどバージョニング関連で色々読んで・聞いて思ったことを書く。
- APIのバージョニングは限局分岐でやるのが良い - Hidden in Plain Sight
- Kazuho's Weblog: 拡張可能なWeb APIの設計原則と、バージョン番号を使う理由について
- Rebuild: 35: You Don't Need API Version 2 (Kenn Ejima)
- rest - Best practices for API versioning? - Stack Overflow
- RESTfulなサービスのバージョンングから得られた知見
RESTとバージョニング
基本的にいわゆる狭義のRESTとAPIのバージョニングは何も関係ない。強いて言えば、HATEOASはバージョニングにも使えるよ、というのがREST信者の主張であるものの、それが正しい(というか実用的)かどうかはまだよくわからない状況だと思う。
なので、APIをRESTfulにするためにはバージョニングはどうあるべきかという議論はそもそも斜め上で、どうでもいい話かと。
一方でREST API(僕はこの呼び方嫌いだけど)のバージョニングはどうあるべきかというのは、設計論として当然あり、そこは実装との兼ね合いもありいろいろ難しい。
APIのバージョン設計論
奥さんが書いてる通りだと思う。
破壊的変更(breaking changes)はなるべく避ける。ここでいう破壊的変更というのは必須のパラメータを増やすとか、デフォルト値を変更するとか、パラメータ名を変更するとか、特定のAPIを廃止するとか、そういった以前のクライアントがそのまま使えない変更のことを指す。
この辺は最近はJSONを使っていればそれほど難しいことなく実装できる(ややこしいことに興味がある人は「xsd upa」で検索してみよう)。
一方で、最初からv2を見据えてURIにわざわざv1とか入れちゃうのはムダな工数と負債を最初から抱えてしまうように感じる。なるべく破壊的変更は入れずにバージョンを上げるべき。どうしても変更が必要であれば、江島方式もあるし、宮川方式もあるし、奥方式もある。個人的にはv2を見越しちゃうことを「心配性症候群」あるいは「皮算用症候群」と呼んでいる。ちゃんと設計されたAPIは寿命がとても長いし、どうしても本当に破壊的変更を加えたくなったらそれは新APIなのだと思う。そしてWeb APIの場合は名前空間を分ける方法はいくらでもある。
Dynamic Scripting Platformについて
Rebuild.fm#35 を聞いて初めて知ったけど、netflix にdynamic scripting platformというのがあるのですね。RESTでいうところのCode on demandのクラサバ逆転版みたいなもののようだ。こういうのが欲しいというのはよくわかるしかっこいい。いろいろ熱そう。
要はストアドプロシージャじゃねーの、と突っ込まれそうだけど、SQLのスコープとWeb APIのスコープは違うので、課題もいろいろ異なると思われる。
その他
rebuild.fmを聞いてたらなんかmiyagawaさんが思いの外REST厨っぽい発言をしてて、思わずニヤニヤしてしまった。勝手にmiyagawa氏はもっとプラクティカルでカジュアルな嗜好なのかと想像してたけど、メディアタイプ厨的発言をしてたりとかわいい一面が。ちなみに僕はメディアタイプにバージョン番号を含めるのは本当にいいのかはまだよくわからないです。
あと江島さんのブログエントリは炎上成分が高かったみたいだけど、実装・運用経験に裏打ちされた発言で説得力があると感じた。やっぱり動いているプログラムが一番強い。
チームビルディングで大富豪をやった話
先日リーンスタートアップセミナーというので、札幌に行って話をしてきた(発表資料)んですが、本題と外れたところでチームビルディングについて喋ったら思いのほか受けたので、ここにも書いておきます。
Web 関係の話題を中心にいろいろ情報交換します
Webはインターネットになったねぇ
1月の話になるけど、CROSS 2013というイベントに行ってWebの話をしてきました。詳細なログは前田さんが取ってくれたのでそちらをどうぞ。で、オブザーバ的な立場で聞きにきてくれたid:naoyaが僕の言葉を引いてエントリを書いてくれた。
本来Webはインターネットの1アプリケーションだった。ここでいうインターネットはTCP/IPのこと。これはid:naoyaが引いた論文の中でTimBLも強調していることだ(Keep the Web separate from the Internet)。
テクノロジーとしてはそのとおりで、今でもたぶん教科書にはそう書いてあるはず。低レイヤの技術革新が上位レイヤとは独立して進んでも大丈夫というのはとてもきれいだなとエンジニアとしてよくわかる話です。
ただ、それでもやっぱりWebはインターネットになったんだなあとしみじみ感じるんだよな。今でもDNSを引いてるし、NTPで時計合わせもしてるんだけど、SMPTはだいぶ意識しなくなった。@gmail.com同士でメールやりとりするときに、たぶんバックエンドでSMTP使ってないですよね(違うかな)。そもそも、emailもあまり使わなくなって、Facebookメッセージだったり、twitter DMだったり、LINEだったりでコミュニケーション取ってるわけだ。
LINEがWebなのか、っていう話もある。CROSの前半のSPDYの話でLINEが出てきた。そういう意味で、あの文脈ではLINEはWebなんだな。
だんだん何が言いたいのかよくわからなくなってきたけど、簡単に言うとコミュニケーションプラットフォームはその他が淘汰されてWebになったねえ、というかんじなのかなあ。emailはまだ息をしているけどnetnewsはほぼ瀕死だ。gopherなんてネタにしかならないし。音声・動画があるわけですが、それもWeb化しているという話もある。
そういえばSunのthe network is the computerという言葉もありましたね。今でいうとThe Web is The Smartphoneになるのか?
スマホアプリがWebを全然意識しないでHTTP使って勝手な世界を作ってる件についてはそうそうと思う反面、Webに接続する端末をブラウザだけに限らないでもっと独自のプログラムに開放していこうという路線は、「Webサービス」とか「プログラマブルWeb」の当初の大きなコンセプトだったはず。そういう意味では、今のこの現状は喜ぶべきものなんじゃないか。
ただ、もっとアプリ間でURLを交換して連携できるようにしておいた方がいいんじゃないのかなあと思うことはある。別にユーザにURLのコピペを手作業でさせなくてもいいんだけど、アプリ間連携ってもっとできたらいいんじゃないのかな。
ちなみに twitter の iOS クライアントはちゃんとツイートのURLをコピーできる機能が入ってる。さすがだなあ。
ここで思考がちょっと飛んで以下の本を思い出したのです。
- 作者: ジョンマルコフ,John Markoff,服部桂
- 出版社/メーカー: NTT出版
- 発売日: 2007/10
- メディア: 単行本
- 購入: 3人 クリック: 13回
- この商品を含むブログ (10件) を見る
ヴァネヴァー・ブッシュのAs We May Thinkから始まって、ダグラス・エンゲルバートの活躍と、ARPANET、Alto、PC/Macというような流れのコンピュータ歴史本なんだけど、この本のメッセージの一つにそれまで科学技術計算をターゲットにしていたコンピュータを、人間の知性を拡張するデバイスとしてのコンピュータとして位置づけ直したエンゲルバートの業績が語られている。このコンセプトの延長線上で、我々はスマホアプリをピコピコやりながらHTTPを喋ってクラウド経由で友達と夕飯の写真を共有しているのだろうか。
Webがインターネットになったというのはそういうことなんじゃないかと思います。
とりあえずブログ書いてみた。