TL;DR

API が、クライアントに必要のないデータまで返してしまうこと。逆に、必要なデータを 1 回で取りきれず、別のエンドポイントを呼ぶ必要があることをアンダーフェッチと呼ぶ。

なぜ必要か

REST API は、エンドポイントごとに返すデータの形が決まっており、リソースの取り方に柔軟性がない。そのため、オーバーフェッチやアンダーフェッチが起きやすい。

仕組み

GraphQL の公式サイトによると、GraphQL ではクライアントがフィールド単位で必要なデータだけを要求する。GraphQL のクエリを送ると、要求したとおりのデータが返り、オーバーフェッチもアンダーフェッチも起きない。データ同士の関連もたどれるので、複数の URL からデータを読む必要がある REST API と違い、1 回のリクエストで必要なデータをすべて取れる。

公式サイトでは、オーバーフェッチがないことは、モバイルアプリのバッテリーを節約し、遅いネットワークでも動くことにつながるとしている。

例

GraphQL の Fragment Colocation では、各コンポーネントが必要なデータを Fragment で定義する。フィールドの増減に気付きやすいので、オーバーフェッチの危険も小さくなる。

関連

出典