Как реализовать частичное кеширование запросов с помощью apollo-сервера (gRPC, а не REST) - PullRequest
1 голос
/ 24 сентября 2019

Я попытался настроить полный кэш ответов на запросы GraphQL с помощью apollo-server v2, но обнаружил, что он недостаточно хорошо справляется с сокращением сетевых запросов.

То, что мне нужно, я думаю, называетсякэш частичного запроса.

Рассмотрим следующую схему:

type Post @cacheControl(maxAge: 240) {
  id: Int!
  title: String
  comments: [Comment]
}

type Comment @cacheControl(maxAge: 50) {
  id: Int!
  title: String
  text: String
}

При запросе { post(id: "1") { id, title, comments } } Я не хочу повторно отправлять сообщение, если прошло менее 240 секунд.При полном ответе на запрос GraphQL весь запрос будет повторно выполнен на основе самого низкого значения maxAge.

Здесь я надеюсь, что кеш частичного запроса придет на помощь.

К сожалению, здесь говорится https://www.apollographql.com/docs/resources/faq/#what-kinds-of-cache-should-i-set-up тот кеш частичного запроса может быть реализован только с помощью redis / memcached и только при использовании источников данных.

Так как мои сервисы являются сервисами gRPC, а не REST, я не могу использовать источники данных - и в идеале я бы предпочелесли это было возможно без источников данных.

Так что, если возможно, как я могу реализовать кеш частичного запроса с Apollo Server v2, без источников данных.И если это невозможно, как я могу реализовать источник данных gRPC с частичным кешем запросов?

Можно ли как-то изменить это: https://github.com/apollographql/apollo-server/blob/master/packages/apollo-server-plugin-response-cache/src/ApolloServerPluginResponseCache.ts, чтобы вы все еще могли управлять им с помощью @cacheControl, нодля частичного кеширования запросов вместо кеширования полных запросов?

...