Blufflog

This blog is bluff

『初めてのGraphQL』を読みました

GraphQL 完全に理解した。

  • GraphQLREST API のような(主に Web の)API を定義する技術(言語、仕様)
  • REST はリソース(データ)毎にエンドポイントを持つため、複数のエンドポイントが必要になる
  • GraphQL は API で管理するリソースをグラフで表現。これが単一のエンドポイントになる。具体的には型定義を伴うスキーマを定義
  • GraphQL のオペレーションは Query、Mutation、Subscripiton の 3 つ
  • Query:データの取得
  • Mutation:データの作成、更新、削除など
  • Subscription:データの変更を監視。具体的には WebSocket などで実現
  • クエリはグラフで表現されたデータについて、その部分グラフを取得するようなイメージ(データのグラフを木(tree)で考えると、その部分木を指定して取り出すイメージ)
  • 各オペレーションもスキーマ定義する
  • GraphQL の主なメリット
    • 必要なデータ(フィールド、カラム)のみを取得できる
    • あるリソースに関連する他の複数のリソースをまとめて一度に取得できる
    • エンドポイントが単一なので管理、保守しやすい
  • GraphQL の主なデメリット(適当に書いてるので怪しい)
    • エンドポイントが単一なので、対策しないと大量のデータを要求するクエリを誰でも簡単に送れてしまう
    • まだ普及度が低く、新規導入には学習コストなどが必要(?)
    • コミュニティ、エコシステムが発展途上(?)
  • GraphQL スキーマJSON 風で、その型定義は TypeScript 風
  • GraphQL クエリは SQL 風。ただし、RDB における SQL の対象データ表現形式が表(テーブル)なのに対し、GraphQL クエリの対象データ表現形式はグラフという点は異なる
  • 昨今は React などの影響によりとかくフロントエンドが厚くなりがち。そこで API 利用のロジックを GraphQL オペレーションのスキーマ定義側に寄せることにより、フロントエンド側で API を叩く箇所をスリム化できるということはありそう(?)
  • 本書では、GraphQL を扱うための代表的なライブラリである Apollo を用いて、GraphQL API サーバーとそのクライアント Web アプリ(React)の実装を学べる。これによって実際の開発イメージが湧いたので良かった
  • GraphQL API に対して巨大なデータを要求することへの対策も軽く学べる。ここはもしかすると REST より複雑かも知れない
  • 日本語版の付録として「Relay 各仕様解説」があり、GraphQL APIスキーマ設計の参考になる。データに一意の ID を付与する手法や Cursor Connections というページネーション機能を API 設計に組み込む手法など。ページネーション機能を組み込んでおけばリクエスト制限もしやすくなりそう
  • 本書を読むのに特別な前提知識は不要だと思うが、REST APIJavaScript、React あたりはある程度分かっているとスムーズに読める
  • 本書内にはコード含め誤植が散見される気がするので、少なくともコードについては GitHub リポジトリも参照するのが良さそう

参考