Simple-Solution
Simple-Solution

Reputation: 4289

Validation error of type UndefinedFragment: Undefined fragment

I've a graphql-jave v8.0 app running on Spring boot v1.5.10, and I'm trying to utilize 'fragment' feature of GraphQL to fetch limited number of fields with the following schema type definition:

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
}

When I execute this query:

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

The expected result should be:

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

However, It results in the following error

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

Off course I can do this with explicitly passing the field name in the query but for the sake of example, I'm interested in utilizing fragment feature of GraphQL.

Any idea what I'm doing wrong please?

Upvotes: 0

Views: 5131

Answers (2)

kaqqao
kaqqao

Reputation: 15429

As Andrew said, and as the official docs exemplify, fragments are not defined in the schema but (ad hoc) in the query:

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

fragment UserFields on School {
   age
   jobTitle
}

Unconditional fragments (like the one here) are used to avoid repetition. Imagine having multiple places where you want to select age and jobTitle in the same operation.

Conditional fragments, on the other hand, are used to make a conditional selection depending on the concrete interface implementation or union subtype.

Upvotes: 0

Andrew Ingram
Andrew Ingram

Reputation: 5220

Fragments aren't defined in the schema, they're something for letting you create abstractions whilst building complex queries -- the main purpose is to allow you to avoid repetition when querying the same type in multiple parts of your query.

Upvotes: 1

Related Questions