Other Side
ゲーム系の開発をしていると、ネイティブアプリの開発チームとREST APIで結合する機会が多い。iOSやPCクライアントの対向だ。
彼らは優秀なプログラマだ。描画パイプラインを理解し、60fpsを維持しながらGUIを組み上げる。メモリ管理にも長けている。尊敬している。だがHTTPの向こう側になると、急に勝手が違うらしい。
ユーザー情報のように一度取れば変わらないデータを、画面遷移のたびに取りに来る。キャッシュという発想がない。APIがエラーを返したとき、ステータスコードではなくレスポンスボディのメッセージ文字列で分岐を書く。メッセージの文言を直したら、クライアント側の分岐が壊れた。ただこれは、エラーメッセージでしか分岐できないAPIを提供しているこちら側にも問題がある。404と500の区別がつかないコードを見たこともある。
指摘すると、たいてい素直に直してくれる。知らなかっただけだ。彼らの主戦場はGPUとレンダリングとユーザー体験であって、HTTPの仕様やRESTの設計原則ではない。わたしがシェーダーを書けないのと同じだ。
ただ、もう少し踏み込んで考えると、追い詰められているのだと思う。納期に追われ、本質であるゲーム体験の開発に集中するだけで精一杯だ。APIとの結合は彼らにとって周辺作業であり、動けばいい領域なのだろう。丁寧にやる余裕がない。
こちら側にも落ち度はある。APIのレスポンスにnullを混ぜることを、サーバーサイドは気軽にやる。だがネイティブアプリにとってnullは死活問題だ。型の厳格な世界で、予告なくnullが飛んでくればクラッシュする。
お互い、相手の世界の本質を知らないまま結合している。配管の継ぎ目から水が漏れるのは、どちらか一方の責任ではない。ただ、修理の電話はたいていこちらに来る。