目的
モバイル向けAPI設計で
今一般にどのような手法が取られてるかの共有
今日紹介したい記事
前提:時代はRESTだ
REST API は格好いい
GET /dogs/1234
しかし、純粋REST APIはChattyになる欠点がある
例:「AKB」の文字が含まれる楽曲に紐づくタイアップ一覧
GET /music/_search?query=AKB * 1回
結果:45件
GET /tieup/_search?tieup_id=XXX * 45回
1 + 45 = 46回のAPI呼び出し
現状イケてるサービスは
どうなってるか
例:twitter 開発コンソール出してページを開くと、
3回のAjax通信を行ってる
1回のAPI呼び出しですべて取ってくるのが理想だが、
PCの場合十分な帯域とレイテンシがあるので問題ない
しかし、モバイルの場合回線が厳しいのでそうは行かない
帯域は細く、
レイテンシは低く、
複数コネクションつなぐコストも高い
モバイルページの約80%はなんらかの形で複合リソースを
必要とするらしい(ソースURL忘れた)
そのため
あるページを描画するため専用にカスタマイズしたAPIを用意し、
ページ描画時にそれ1つを叩けばOKにする、というのは
ユーザビリティの点から見ると間違ってはいない
(開発効率・再利用性などはひどいけど)
こういったバックグラウンドがあるため、
どっかのシステムには
「このAPIにこれ足してくれあれ足してくれ・・・」
と要件が来るようだ
しかし、やっぱRESTがいい
REST APIを維持しつつ、モバイルに特化したAPIも提供するには
どうすればいい?
この問題に対する広く知られたpractice:
アプリ(モバイル)専用バックエンドサービスを置く
バックエンドサービスとREST APIサービスが同じデータセンター内なら通信コストはかなり低い
REST APIは汎用性を保ちつつ改良でき、
モバイル向けAPIとしてはそれ専用にまた改良し続けられる
(すみ☆わけ!)
だけど、バックエンドサービスってコストかかるよね
はい、そのとおりです。
なので、バックエンドサービスの代わりに
nginx + lua使ったAPI Aggregator使いましょうねってのが
この記事
このAPI Aggregator詳細は読めてないので
To Be Continued...