У меня есть приложение 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.
Любая идея, что я делаю неправильно, пожалуйста?
Фрагменты не определены в схеме, они позволяют создавать абстракции при построении сложных запросов - основная цель - избежать повторения при запросе одного и того же типа в нескольких частях вашего запроса.
Как сказал Эндрю , и как показывают официальные документы, фрагменты определяются не в схеме, а (ad hoc) в запросе:
Безусловные фрагменты (как здесь) используются, чтобы избежать повторения. Представьте себе наличие нескольких мест, где вы хотите выбрать
age
иjobTitle
в одной и той же операции.С другой стороны, условные фрагменты используются для создания условного выражения выбор в зависимости от конкретной реализации интерфейса или подтипа объединения.