Caching
GraphQL + Cache の課題
GraphQL リクエストが多様すぎる
クエリ全体のキャッシュが有効でなさそう?
しかし、実際にはフロントエンドがサーバに送信するクエリのセットは限られたものになる (Persisted queries)
GraphQL リクエストが大きすぎて GET にのせられない
REST なら、GET でデータを取得し POST で更新をするので、GET のみキャッシュすればよかった
GraphQL は大抵 POST を利用する (GET だとサイズ制限があって乗らない)
ただ、 Persisted queries を利用すれば GET にのせることができる
Apollo Link と Apollo Engine を組み合わせると、Automatic Persisted Queries を有効にできる
キャッシュヒントを設定するのが難しい
キャッシュヒントとは、Cache-Control ヘッダーのこと
REST API は、特定のエンドポイントとリソースが紐づいているので、Cache-Control ヘッダを付与するのが簡単
一方、GraphQL では、1つのエンドポイントが複数のリソースを返すし、どのリソースを返すかはクライアントに委ねられる
Apollo Cache Control を利用すると、フィールド毎に個別にキャッシュヒントを付与できる
https://blog.apollographql.com/caching-graphql-results-in-your-cdn-54299832b8e2
https://www.apollographql.com/docs/apollo-server/whats-new.html#Automatic-Persisted-Queries