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

てきとうなメモ

本の感想とか技術メモとか

AtomPubは最近どうなのだろう

最近あまり話を聞かないな。

はてなブログとかlivedoorブログとかはAtomPubみたいだが、ブログ投稿APIの標準になっている気はしない。GoogleGoogle Data APIとしていくつか使っているみたいだが、一番AtopPubが使われそうなBloggerAPIGoogle Data APIではなくJSONベースのフォーマットになっているのだな。

最近読んでいるRestful Web APIsでもAtomPubについて触れている。

Six years after the RFC was finalized, and despite all the plug-in standards, it’s safe to say that AtomPub has not caught on. The standard never got much traction outside of Google, and even Google seems to be phasing it out. What’s wrong with AtomPub?

AtomPub使われていないよね〜

The problem stems from a technical decision made back in 2003: AtomPub representations are XML documents. This seemed like the obviously correct decision in 2003, but over the next 10 years, as in-browser API clients became more and more popular, JSON gained an overwhelming popularity as a representation format. It’s a lot easier to process JSON from in-browser JavaScript code than it is to process XML. Today, the vast majority of APIs either serve JSON representations exclusively, or offer a choice between XML and JSON representations. AtomPub is nowhere to be seen.

原因の1つはXML使っちゃったからで、ブラウザでいろいろできるようになった現在ではJSONの方が良いよねと指摘している。まあ、これはその通りだと思う。

But the AtomPub story also shows that “nothing wrong with the standard” isn’t good enough. People won’t go through the trouble of learning a standard unless it’s directly relevant to their needs. It’s easier to reinvent the “collection” pattern using a fiat standard based on JSON, so that’s what thousands of developers did—and continue to do

でも、こっちの話も大きいよね。RESTっぽいJSON APIは簡単に作れちゃうので、標準を使うのではなく、独自仕様のAPIを作っちゃうよねという話。

著者は車輪の再発明を避けたいので、JSONのAtomPub的な共通の仕様を利用する道を探っているようであるが、難しそうな気がする。API作成者にとって共通の仕様を利用するメリットがあまり大きくなさそうなんだよな。

共通仕様を利用するメリットとして

  1. 既にいろいろ議論されている仕様なので、設計に失敗する可能性が低く、仕様変更に強い
  2. 複数のAPIに対してクライアントアプリが1つで良い

があると思う。1はメリットがすぐにはわかりづらい。小さなAPIだと元々設計に失敗する可能性は低そうという点で弱い。2はAtomPubのクライアントアプリで使われそうなものがあまりなさそうなんだよな。閲覧だけならフィードリーダがあったけど、最近廃れ気味だし。その他のアプリだとAPIごとに独自に作りそうな気がする。

あと、1も2もAPIに独自データが多いとAtomPubの部分でカバーできる範囲が少ない。独自データをどう扱うかの設計は自分で考えないといけないし、共通クライアントアプリは独自データをどのように扱うか記述しないといけないので、コードが複雑になる。

まあ、API設計のベストプラクティス的なものとしては利用できそうな気がするけどね。