なんとなくそう思ってたけど、APIのページネーションで最初の返事がデータなしでページトークンだけって、結構不便じゃない?💭
わたしも最近、そんなAPIを使う機会があって「え、これって本当に必要?」ってなっちゃったんだよね😳
ページネーションの基本って?
たとえば、SNSの投稿とか大量の情報を一気に全部送ると重くなるから、ちょっとずつ分けて渡すのがページネーション✨
普通は、最初のリクエストでちゃんとデータと次のページを呼ぶためのトークンをセットで返してくれるパターンが多いんだよね🌸
でも、最初に「データなし、次のページの場所だけ」ってどうなの?
実は、わたしが触ったAPIは最初の返答にデータがなくて、次のページだけ教えてくる設計だったの!
それで結局、何度もリクエスト送らなきゃいけなくて、すごく効率悪かったんだ〜😵💫
なんでそんなことするんだろう?って思ったけど、たぶん中の処理や設計の都合なんだろうね。でもユーザー目線で見ると「最初からちょっとでもデータを返してくれたら余計な通信が減るのに!」って感じちゃうよね💡
無駄なリクエストは避けたいよね💭
こういうのって小さなことだけど、APIを使う側にとっては地味にストレスになるポイントだったりするんだ✨
一回の通信が増えるだけで、アプリの動きが遅くなったり、ユーザーに影響が出たりするから…😳
まとめ💗
- APIのページネーションは、最初のレスポンスにデータと次のページ情報をセットで返すのが親切
- 最初にデータがないと余計なリクエストが増えて非効率になる
- 使う側のことをちょっと想像して設計すると、みんなハッピーになるよね✨
API作る人にはぜひ覚えておいてほしいポイントだな~って思った話でした🫶
コメント
ベン
こんなの見たことないけど、ページネーションって普通はリクエストにクエリつけるもんじゃないの? 何も指定しなければ最初の100件くらい返すとか? どんな感じ?
ハンナ
10年開発してるけど見たことないな、働く人変えたほうがいいんじゃ?
クリス
APIに人間認証つけたよ。 認証ヘッダーに好きなサンドイッチと色入れてもらって、それでトークン生成してsha-256で検証してからリクエストできる仕組み。
ジャック
みんなページネーションしてんの?
ノーラン
古いし嫌われそうだけど、graphqlが200返して「ごめん、データダメ」って言うのはマジで嫌い。 普通にステータス使おうよ。
レオ
なんかノリで作ったAPI?
サラ
ページトークン?
ロバート
データ読まずに次のページトークン計算できるの? カーソル機能はデータ読み込まないと無理だよね。
リリー
20年以上やっててこんなの初めて見たわ。
ハンナ
俺の使ってるAPIはまずユーザ名とかでトークン作って、その後クエリでID指定して呼ぶんだけど実際の結果は返さずまた別のトークン返してくる。 そしてさらにもう一回IDとそのトークンで呼ぶとやっと結果が返る。 しかもJSONのフィールド名が「a」「b」「c」とか「cOMPANY_NAME」とか意味不明。
グレース
ページネーションはヘッダーから取ってる。
クロエ
これってレスポンス返す前にメモリ上でフィルタリングしてるからじゃない?
リリー
久々だけどこれ見てDrupal思い出したわ、超嫌な記憶…
ミア
こんな方法見たことないな。 唯一のメリットはキャッシュしやすいことくらいかも。 一回リクエストしてキャッシュに保存すれば、次からはブラウザがキャッシュ使ってサーバー待ちしなくて済む。 初回以降は必要なコンテンツだけAJAXで取る感じ。
ロバート
CDNやVarnish使ってキャッシュしても、結局2回往復は必要で1回はPHPとか起動させずに済むけど、それでも面倒。
ハンナ
まあとにかく変だし怠けた実装って感じだね。