【書評】初めてのGraphQL
初めてのGraphQL ―Webサービスを作って学ぶ新世代API を読んだのでその書評を書きます。
Kindle 版は出ていなかったので紙の本で読みました。内容は比較的コンパクトで概要 ~ 実装まで書いてあります。スキーマ定義周りが少し重めですが、全体的にライトに読める本となっています。
グラフ理論は飛ばしても良い
2章ではGraphQLの元となるグラフ理論が紹介されます。この章は飛ばしても問題有りません。
グラフ理論はGraphQLの思想について軽微に参考になる程度で、書き方には全く影響しません。数学チックな内容の章になるため、どのような理論か興味有る方のみが読めばよいでしょう。
ただ1点、この章を飛ばすのであれば「エッジ」について抑えておく必要があります。この単語だけはこの章で紹介され、後の章でも登場するためです。後の章で出てくるエッジは、「オブジェクトの関係」と考えて問題有りません。グラフ理論のエッジとは異なる理解ですが、GraphQLのエッジではこの理解で十分成り立ちます。スキーマ定義における1対多や多対多の関係の表現につてい記述されている内容が出てくるため、そのときに「エッジ」とは「オブジェクトの関係」なんだと覚えていればOKです。
この章は飛ばしても良いと書きましたが、私は元々数学が好きだったため、このような分野もあるんだと少し興味を持って本章を読むことができました。余談ですが、エンジニアの勉強が落ち着いたら数学の研究や勉強をするのも悪くないと考えています。
スキーマ定義とクエリのコードを分けて認識する
ここの認識が混ざってしまい、自分は少しわかりずらいと感じてしまいました。
GraphQL には 3部の構成があります。スキーマ定義とクエリ、バックエンドの実装です。
スキーマ定義では、GraphQLサーバーで扱うスキーマを定義します。GraphQLのスキーマとはAPIの構造です。どのようなエンドポイントがあり、どのようなリクエストを受け付け、どのようなレスポンスを返すのかを定義します。このスキーマに合うようにクライアントはクエリを投げ、スキーマに合うようにバックエンドは実装します。
クエリはGraphQLサーバーへのリクエストです。クエリには書き方があり、スキーマで定義された内容しかリクエストすることはできません。
バックエンドでは、スキーマに合うように実装する必要があります。すなわち、定義されたエンドポイントに対応するハンドラーを定義し、レスポンスを返す必要があります。GraphQL はスキーマは管理しますが、バックエンドの実装は管理しません。バックエンドの処理をどのように実装しようが、スキーマに合致していれば自由です。
本書の前半ではスキーマ定義とクエリについて記述され、後半の実装例ではクライアントとバックエンドについて記述されます。
この前半のスキーマ定義とクエリではどちらも似たような書き方になるため、混乱しがちです。本書も紹介しているコードがスキーマ定義なのかクエリなのかを明示していないように感じます。そのため、両者を区別し、今説明している内容はどちらかを意識することが大事と思います。
スキーマ定義とクエリの区別には 公式ドキュメント の参照をおすすめします。Queries and Mutaions ではクエリに関して記述され、Schemas and Types ではスキーマ定義について記述されています。少々大変ですが、混乱した場合は公式ドキュメントを確認することが確実でしょう。
最後に
2022年現在でGraphQLに関する本は少なく、公式ドキュメントに書いてある内容は少々あっさりしています。そのような中で、本書はGraphQLを学ぶ有効な手段となるでしょう。本記事が「初めてのGraphQL」を読む上で少しでも参考になれば幸いです。