Как разделить несколько запросов GraphQL - PullRequest
0 голосов
/ 21 января 2020

Учитывая запрос с несколькими запросами:

query mainQuery(
    $paramOne: Int
    $paramTwo: Int
  ) {
    queryOne(
        paramOne: $paramOne
    ) {
      totalCount
    }
    queryTwo(
        paramOne: $paramOne
    ) {
      totalCount
    }
  }

разделить эти запросы на два разных запроса как:

  query mainQuery(
    $paramOne: Int
  ) {
    queryOne(
        paramOne: $paramOne
    ) {
      totalCount
    }
  }
  query mainQuery(
    $paramTwo: Int
  ) {
    queryTwo(
        paramTwo: $paramTwo
    ) {
      totalCount
    }
  }

Возможно ли это? Может быть, я пропустил какую-то служебную функцию

1 Ответ

0 голосов
/ 22 января 2020

Это довольно конкретный c вариант использования. Базовая библиотека не имеет никакой подобной вспомогательной функции, и вряд ли любая другая библиотека будет.

Чтобы написать свою собственную функцию, вы бы вызвали parse в рассматриваемой строке запроса. Затем вы бы захватили первое определение в узле документа и отобразили его набор выбора в отдельные документы. Что-то вроде:

const { parse, print } = require('graphql')
const originalDocument = parse(query)
const operationDefinition = originalDocument.definitions[0]
const selections = operationDefinition.selectionSet.selections
const splitQueries = selections.map(selection => print(
   ...originalDocument,
   definitions: [
      {
        ...operationDefinition,
        selectionSet: {
           ...operationDefinition.selectionSet,
           selections: [selection]
        }
      }
   ]
))

Однако это будет работать только для очень простых запросов. Если у вас есть переменные, вам нужно пройтись по каждому результирующему документу и удалить все неиспользуемые переменные. Точно так же, если вы используете фрагменты, вам нужно убедиться, что они включены в definitions, но только если они действительно используются внутри операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...