「RESTはどのようにバズワード化したか」— 書かれていないこと
「RESTはどのようにバズワード化したか」が直接語らず、構造や行間に埋め込まれているテーマの一覧。
劣化と伝播
- コピーのコピーは劣化パターン。論文→書籍→ブログ→チュートリアル→Stack Overflow→ベストプラクティス→フレームワーク規約→新人の頭の中。各段階でニュアンスが失われ、確信が増す。最も不正確なバージョンが、最も強い確信で保持される
- フレームワーク規約が最終段階。
resources :articlesと書けばルーティングが自動生成される。RESTを使っていることを知らずに、RESTでないものをRESTとして使っている。三重の不知 - 原典は無料で公開されている。ペイウォールの向こうにもない。それでも誰も読まない。アクセスの問題ではなく、文化の問題
- 多くの登場人物のうち、本当の設計者はFieldingだけ。DHHは優れたマーケター、Apigeeはベストプラクティスの売人、Richardsonは体系化した著者、Fowlerは権威の増幅器
概念の破壊
- FIOHを「HTTP API」と呼んでいれば、Fieldingの「REST」は別の概念として生き残れた。名前を奪ったことで、本物が検索不能になった。意図的誤用は概念を殺した
- “Representational State Transfer”の”State Transfer”は「リソースの状態をネットワーク越しに転送する」ことではない。「ハイパーリンクを辿ってアプリケーションの状態を遷移する」こと。名前の意味すら原典と違う理解が定着している
- Apigeeはエンドポイント管理、バージョニング、APIドキュメンテーションのツールを売っている。CRUD over HTTPは彼らの必然だったが、名前を奪う必然はなかった
- SOAP vs RESTは偽の二項対立だった。SOAPに勝ったのはRESTではない。FIOHが勝ってRESTのユニフォームを着た。勝者が敗者の名前を奪った試合
論理の罠
- 「pragmatic vs dogmatic」は自己封鎖する論法。Apigeeが自分を「pragmatic」と位置づけた瞬間、あらゆる修正の試みが「dogmatic」の証拠になる。反論すればするほどRESTifarianの烙印が強まる。枠組みを設定した時点で勝っている
- 「便利だから」は反証不能。動くソフトウェアは動く。何と呼んでも動く。だからこそ、名前の問題は機能の問題と別に議論しなければならない
- 確信的誤用は偶然の誤解より深刻。DHHはFieldingと直接話した。Richardsonは2007年の本が間違いだと知っていたから2013年に書き直した。Apigeeは論文を引用した上で「dogmatic」と退けた。全員、読んだ上でやった
皮肉と自己言及
- 論文の核心は「一つのスタイルをすべてに使うな」。業界は論文の名前を借りて、一つのスタイルをすべてに適用した。Fieldingの論文は、自分自身が警告した病気のウイルスになった
- Fieldingは論文第1章の冒頭に、屠殺場しか設計したことのない建築家が集合住宅を屠殺場として設計するMonty Pythonのスケッチ(The Architects Sketch)を引用した。「すみません……今『ナイフ』とおっしゃいました?」。まさにこれが起きた
- Fieldingは”design-by-buzzword”を論文で警告した。その論文が最大のバズワードになった
- 「Learn, apply, iterate!」——業界もそうした。ただし対象がコピーだった。コピーを学び、コピーを適用し、コピーの上でイテレーションした。Fieldingの本意は「自分の頭で、自分のシステムの文脈に合わせろ」——ベストプラクティスを丸ごと輸入する文化の対極
有効成分の除去
- HATEOASがあればクライアントはリンクを辿るからURLをハードコードしない。サーバーはURLを変えてもクライアントは壊れない。バージョニングは要らない。業界はHATEOASを落とした。クライアントはURLをハードコードするようになった。URLを変えると壊れる。だから
/api/v1/、/api/v2/、/api/v3/——APIバージョニングが「RESTful API設計」最大の課題になった。壊れずに進化するための設計原理から、進化を防ぐ制約を取り除き、進化できないことに苦しんでいる。薬の名前だけ残して有効成分を抜き、効かないと言っている - 自己記述的メッセージを落とし、代わりにOpenAPIという外部仕様書を作り、その仕様書を管理するためにSwagger UI、コードジェネレータ、モックサーバーという巨大なエコシステムを築いた。落とした制約を補うためのエコシステムを、落とした制約の上に積み上げている
- 痛みが痛みだと認識されていない。CRUD-over-HTTPしか知らない開発者にとって、人工的な問題は「API開発の自然なコスト」に見える。本物を知らなければ痛みは見えない。しかし本物の名前は奪われている
- 誤用のままでいることが、その先の判断も歪めている。「RESTを試してダメだったから次へ行こう」と言っている人が試したのはCRUD-over-HTTPだけど、RESTの名前のせいでRESTそのものが失敗したと認識される。誤った地図で歩いた人が「この地図の先は崖だ」と報告している。地図が違う
- FieldingはHTTP/1.1の策定で、複数リソースを一括取得するMGETメソッドをproxyabilityとcacheabilityを損なうとして却下した。この「なぜ」が伝わらなかった。複数リソースを一度に取得できないことが「RESTの限界」に見えた。GraphQLはRESTの問題を「解決」した!といって登場した——proxyabilityもcacheabilityも犠牲にして。そして落としたcacheabilityの問題に再び取り組むことになる、落とされたことを知らないまま
構造的悲劇
- 権威のロンダリング。Fieldingの学術的権威 → Apigeeが引用 → GoogleがApigeeを買収 → 「Googleが推奨」。権威の種類が学術から商業に変わり、中身も変わるが、引用の連鎖が学術的裏付けがあるように見せている
- Fieldingの自責——「彼らを読者として想定しないと決めたのは私自身だ」。学術論文として書いたから実務者には届かない事を知っていた。そして中間者(DHH、Richardson、Apigee)が間を埋めた。しかし中間者が渡したのは薄めたコピーだった
- リチャードソン成熟度モデルは「Level 2で十分RESTful」という免罪符を与えた。成熟度モデルなのに、未成熟で止まることを正当化している
- 25年間の集合的エンジニアリング努力が、人工的な問題(バージョニング、エンドポイント設計、OpenAPI保守)の解決に費やされた。もし業界がハイパーメディアを本当に理解して適用していたら、Webはどうなっていたか。それは永遠にわからない
メタ
- この記事自体が、記事が批判するものの対極を実演している。コピーのコピーではなく、一次情報に戻っている。方法論として、自身が診断する病気の処方箋になっている
- 冒頭の3段落は孤独の漏斗。「広く誤解されています」→「それを知っている人でもなお」→「考察する記事はもっと少ない」。文ごとに理解者の輪が狭まっていく
元記事は歴史的経緯を明らかにするために事実の列挙に留め、筆者の考察や抽象化を控えました。この記事は事実の記述に対する構造の分析です。続編:「Buzzwordによる設計」