1つのエンドポイントで、複数のリソースから欲しいフィールドだけを取得する
REST APIは、多くのエンドポイントを公開し、それぞれが決まった形を返します。注文の明細と顧客名を一緒に取得したいときは、2回の別々のリクエストが必要になったり、その画面には不要な項目まで常に返すエンドポイントを使ったりします。
GraphQLは、単一のエンドポイントを公開します。クライアントは、関連するリソースをまたいで、欲しいフィールドを正確に指定するクエリを、1回のリクエストで送ります。これによって、余分な往復も、使わない項目も避けられます。
ただし、GraphQLは、N+1を自動的に無くすわけではありません。例えば、10件の注文とそれぞれの顧客名を求めるクエリでは、注文一覧の取得に1回、各注文の顧客の取得に注文ごと1回ずつで、サーバーは合計11回の参照を行うことがあります。サーバーが顧客をまとめて取得するよう実装していなければ、この回数になります。クライアントがフィールドを選べることと、サーバーが実際にどう取得するかは、別の問題です。
この課の目標
GraphQLがクライアントに欲しいフィールドを正確に指定させる仕組みを説明できる。オーバーフェッチを避けるために設計されたはずのGraphQLで、なぜN+1が起こり得るかを説明できる。
GraphQLのクエリが、バッチ処理無しで素朴に解決される形で、10件の注文とそれぞれの顧客名を求めた。サーバーは水面下でいくつの参照を行うことになる?