GraphQL
https://gyazo.com/21d29e2f3c68dfb01109a45fd2dcd1ca
概要
GraphQLとはHTTPのPOSTリクエストでGraphQLのクエリや引数を含むJSONを送りレスポンスをJSONで受け取るためのクエリ言語とその実行環境
サーバーサイドまるごとをSQLlikeに問い合わせ可能にしてしまった!!イノベーション
従来のREST APIだと特定の画面やユースケースごとに専用のエンドポイントを用意する必要があった フロントエンドのクライアントの多様化により急激に管理するのが大変になった
GraphQLだと単一のエンドポイントで済んでしまう
RESTを置き換えるのではなくRESTが苦手なことを補完する
ただGraphQLエンジン自体の実装が複雑になるし、N+1問題みたいのも起こりやすい GraphQLは参照も更新もHTTP POSTを使う
/icons/point.iconフロントエンドにとってQraphQLはHTTP上に動くDBMSに見える
→クライアントはサーバーサイドの実装を一切知る必要がない
核心的な特徴
単一エンドポイントですべての操作を処理
スキーマファースト設計
強力な型システム
クライアントが必要なデータのみを指定
処理形態
Query 取得
Mutation 変更
Subscription 購読
GraphQL / REST 比較
GraphQLで注意すること
パフォーマンス
N+1問題対策 - DataLoaderの実装
クエリ深度制限 - 無限ネストの防止
クエリ複雑度制限 - コスト解析による制御
レート制限 - 悪意のあるクエリからの保護
タイムアウト設定 - 長時間実行クエリの制御
ページネーション
Cursor-based pagination - 大量データの効率的な処理
Connection型の実装 - Relay仕様への準拠
ページサイズ制限 - 過大なデータ取得の防止
総数取得の最適化 - count()クエリの効率化
読むぺき