GraphQLはドメインの概念の関連をフィールドで表すだけで素直に表現できる
from
数年前から GraphQL に移行したいと考えていたのですが、バックエンドチームが充実してきたことや gqlgen が要求する Go のバージョンにようやくGAE の Go ランタイムが追いついたこともあって、この春ついに gqlgen を使って GraphQL に移行を始めることになりました🎉🎉🎉 なぜGraphQL?
大部分のスキーマを書き終わった今の段階で感じていることとしては、このドメインに現れる概念をグラフ構造として捉えることで、極めてシンプルかつ自然にスキーマに落とし込めて気持ちいい!ということです。 REST APIを作ろうとするとどうしても「APIをシンプルにしよう」とか「重複した機能を排除しよう」、「リクエスト回数減らして高速化しないと」といったことを考える場面が多いです。例えば、下記はテラーノベルに出てくる User, Story, Comment の関連だけを表した図です。 https://scrapbox.io/files/645d5456dd6839001c4bda4f.png
User が投稿した Story リストを取得したい
Story に投稿された Comment リストを取得したい
User が投稿した Comment リストを取得したい
User が投稿した Story ごとに Comment リストを3件ずつ取得したい
例えばこういった機能を実現する REST API を作成する際、上3つはそれほど悩むことはないですが、4つ目の実現方法を考えると「状況による」と思います。
UI の変更によって、こういった情報取得が必要になる場面は頻繁に発生するのですが、1番目のAPIと2番目のAPIを組み合わせてもらうのか、あるいはCommentまで結合して結果を返す新しいAPIを用意するのか、みたいな選択肢を考慮する必要があります。
一方で、GraphQL であればそれぞれの概念の関連をフィールドで表すだけで素直に表現できるので、こういった問題に関してあれこれ悩む必要がない、というのがもっとも嬉しいポイントかもしれません。