REST APIと何が違うの?
REST APIは「/users/1」「/users/1/posts」のようにエンドポイントごとに決まったデータが返る。GraphQLは1つのエンドポイントに「ユーザー名と投稿タイトルだけください」とクエリを送れば、まさにそのデータだけが返る。スマホアプリのように帯域が限られる環境で特に有効だよ
どんなときにGraphQLを選ぶ?
①複数のリソースを1回のリクエストで取得したい、②フロントエンドがバックエンドの変更を待たずに開発を進めたい、③モバイルアプリでデータ転送量を最小化したい。逆にシンプルなCRUD APIならRESTで十分。「全てGraphQL」にする必要はなく、適材適所だよ
スキーマって何?
GraphQLのAPIで取得できるデータの型定義だよ。「type User { id: ID!, name: String!, posts: [Post!] }」のように書く。スキーマがあることでフロントエンドとバックエンドの「契約」が明確になり、型安全な開発ができる。スキーマからTypeScriptの型を自動生成するツール(GraphQL Code Generator)も便利だね
N+1問題って何?
GraphQLの代表的なパフォーマンス問題だよ。「ユーザー一覧とそれぞれの投稿」を取得すると、ユーザー1回+投稿N回のDBクエリが発生する。DataLoader(バッチ処理でDBクエリをまとめる)で解決するのが定石。GraphQLを導入する際は必ずDataLoaderとクエリの複雑さ制限を実装しようね