Ошибка проверки типа UndefinedFragment: Неопределенный фрагмент

Simple-Solution спросил: 28 марта 2018 в 01:35 в: graphql

У меня есть приложение graphql-jave v8.0, работающее на Spring boot v1.5.10, и я пытаюсь использовать функцию "фрагмент" GraphQL для извлечения ограниченного количества полей со следующим определением типа схемы :

type School {
   id: ID
   name: String
   address: String 
   age: String
   jobTitle: String 
   ...
}fragment UserFields on School {
   age
   jobTitle
}type Query {
  user (id: String!): School!
}schema {
  query: Query
}

При выполнении этого запроса:

{
   user (id: "123")
   {
     ... UserFields 
   }
}

Ожидаемый результат должен быть:

{
  "user": {
     "age": "12",
     "jobTitle": "student"
  }
}

Однако, это приводит к следующей ошибке.

    "message": "Validation error of type UndefinedFragment: Undefined fragment 
     UserFields @ 'user'",

Конечно, я могу это сделать, явно передавая имя поля в запросе, но, ради примера, я Мне интересно использовать функцию fragment для GraphQL.

Любая идея, что я делаю неправильно, пожалуйста?


2 ответа

Andrew Ingram ответил: 28 марта 2018 в 02:24

Фрагменты не определены в схеме, они позволяют создавать абстракции при построении сложных запросов - основная цель - избежать повторения при запросе одного и того же типа в нескольких частях вашего запроса.

kaqqao ответил: 30 марта 2018 в 09:14

Как сказал Эндрю , и как показывают официальные документы, фрагменты определяются не в схеме, а (ad hoc) в запросе:

{
   user (id: "123") {
     ... UserFields 
   }
}fragment UserFields on School {
   age
   jobTitle
}

Безусловные фрагменты (как здесь) используются, чтобы избежать повторения. Представьте себе наличие нескольких мест, где вы хотите выбрать age и jobTitle в одной и той же операции.

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