Writing GraphQL Queries
A GraphQL query describes the data the client wants to read.
Suppose the schema contains:
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String!
email: String!
}
A client can request:
query {
user(id: "42") {
id
name
email
}
}
The fields selected inside user form a selection set.
GraphQL requires a selection set when a field returns an object type because the client must specify which fields of that object it wants.
For example, this is incomplete:
query {
user(id: "42")
}
if user returns User, because User is an object type rather than a scalar.
However, a scalar field does not need nested fields:
query {
user(id: "42") {
name
}
}
Queries can be named:
query GetUser {
user(id: "42") {
id
name
}
}
Naming operations becomes particularly useful for debugging, monitoring, persisted operations, and applications containing multiple operations.
Named Query
query GetUserProfile {
user(id: "42") {
id
name
email
}
}💡 The operation is named
GetUserProfile. The user field returns an object, so a selection set is required. The selected scalar fields are returned in the same nested structure requested by the operation.Key Takeaways
- A query describes data that should be read.
- Object fields require selection sets.
- Scalar fields are leaf fields and do not require nested selections.
- Named operations improve observability and maintainability.
Knowledge Check
Why does a GraphQL object field normally require a selection set?