GraphQLとRESTの比較
#設計
Web APIの設計の文脈で、GraphQLとRESTを比較する
参考
https://hasura.io/learn/ja/graphql/intro-graphql/graphql-vs-rest/
ユーザーのプロファイル(user)と住所(address)を取得するAPIがあるとする
典型的なREST
https://scrapbox.io/files/63322d270744e9001d49edd1.png
GraphQL
https://scrapbox.io/files/63322d3d502466001d13ba94.png
GraphQLの利点
過剰取得の回避
必要なフィールドを正確に指定できるため、必要以上のデータを取得することを避けられる
API呼び出し頻度の抑制
より多くのデータを処理する際に、APIの呼び出し頻度を抑制することができる
上記のような場合、user と address を取得するために2つのAPI呼び出しを使う必要はない
API開発者とのやり取りの簡略化
必要なデータを確実に取得するためには、API呼び出し頻度を抑制しつつ、より多くデータを取得する必要がある
そのために新しいAPIの構築を開発者に依頼する必要も生じる。
GraphQLなら、APIチームの作業を独立させることができる。これにより、アプリ関連の作業を高速化する。
セルフドキュメンテーション
すべてのGraphQL APIは、グラフデータモデルとクライアントが実行可能なクエリタイプで構成された「スキーマ」に準拠している
セルフドキュメンテーションは、コミュニティによるAPIの探索・視覚化をサポートする多くの優れたツールの構築や、GraphQLクエリをオートコンプリートするIDEプラグインや「codegen」の開発を可能にする
Resolver(GraphQL)
仮にモバイル向けAPIが必要でもGraphQLのスキーマは使い回せる
まとめると
UIの変更に迅速に対応するためにクライアントがfetchする情報を柔軟に変えられる
クエリをコロケーションしてUIのコードと同じデータ構造でレスポンスを受け取れること
→全体的にUIの開発が楽になる
GraphQLが適していないユースケース
サーバー間通信
UIで使用されることを想定していないAPI
RESTとは異なる苦労がある
モニタリング、クエリの制限、N+1, キャッシュ...
https://twitter.com/wawoon_jp/status/1721385185990816238
GraphQLでエンドポイント作るの、普通にAPI生やすより考えることが増えるけど本当に生産性に寄与するのかは組織構造に依存する
GraphQL vs. REST APIs: Why you shouldn’t use GraphQL
プロトコル、インターフェースとしてのGraphQL
GraphQLはどんな時に使うか
GraphQLはドメインの概念の関連をフィールドで表すだけで素直に表現できる
---
RSCやAppRouterはGraphQLの正統進化で、resolverがJSXを返すようなもの