GraphQLに入門してみたメモ

メリット

GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.
GraphQL | A query language for your API

公式サイトの内容を意訳すると、「GraphQL は API に対しての理解可能な説明を提供する」「クライアントに必要なものだけを正確に要求」など。

さらに、LayerX さんのエンジニアブログを読むと理解が進んだ。 GraphQL でバックエンドのコードをすっきりさせた話 - LayerX エンジニアブログ

バックエンド・フロントエンドを切り離して開発している際、フロントエンドからのデータ問い合わせの手段として GraphQL を使用すると以下のようなメリットを得られる。

  • 必要なデータを正確に取得できる(アンダーフェッチ問題を起こさない)
  • 不要なデータは取得しないので、パフォーマンスを落とさない(オーバーフェッチ問題を起こさない)

GraphQL からは SQL・NoSQL・REST などに接続が可能。なので GraphQL を界面としてバックエンド・フロントエンドを疎結合にしておけば後で DB だけリプレースするなども可能になるはず。

PIXTA が運営する texta.fm でも GraphQL を界面として使用しているという表現がされていた。
Sideshow 4. Worse is Better by texta.fm • A podcast on Anchor

用語

アーキテクチャ

  • GraphQL クライアント: サーバーにリクエスト送信
  • GraphQL サーバー: クライアントからリクエストを受ける
  • Resolver: 実際のデータを操作する

クエリ言語

  • Query: GET の処理
  • Mutaition: 更新系の処理をするための形式
  • Subscription: リアルタイムデータ通信

スキーマ言語

  • Schema: GraphQL サーバーが実行可能な操作を定義
  • Types: 開発者が定義できる GraphQL の型

参考: GraphQL のアプリケーションへの組み込みを考える - RAKUS Developers Blog | ラクス エンジニアブログ

SQL との比較

SQLGraphQL
実行先データベースに対して実行API に対して実行
データ取得処理SELECTQuery
データ更新処理INSERT, UPDATE, DELETEMutation
リアルタイムデータ通信-Subscription

具体的な実装

具体的にどのような実装になるのかを以下の記事を参考にしながら、手を動かした。
Rails:GraphQL API の構築手順

ざっくりした流れは以下。

  • カラム名や型を定義する
  • クエリを作成する
  • 定義したクエリをルートクエリとして取得できるよう設定する