14 skills · 41 min
Skills
Skill 10 of 14
Guide for writing GraphQL operations (queries, mutations, fragments) following best practices.
1 minute · 163 words · 17 sections
Install
npx skills add apollographql/skills --skill graphql-operationsnpx skills add apollographql/skills/plugin marketplace add apollographql/skillsThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
This guide covers best practices for writing GraphQL operations (queries, mutations, subscriptions) as a client developer. Well-written operations are efficient, type-safe, and maintainable.
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
}
}mutation CreatePost($input: CreatePostInput!) {
createPost(input: $input) {
id
title
createdAt
}
}subscription OnMessageReceived($channelId: ID!) {
messageReceived(channelId: $channelId) {
id
content
sender {
id
name
}
}
}| Pattern | Example |
|---|---|
| Query | GetUser, ListPosts, SearchProducts |
| Mutation | CreateUser, UpdatePost, DeleteComment |
| Subscription | OnMessageReceived, OnUserStatusChanged |
# Required variable
query GetUser($id: ID!) { ... }
# Optional variable with default
query ListPosts($first: Int = 20) { ... }
# Multiple variables
query SearchPosts($query: String!, $status: PostStatus# Define fragment
fragment UserBasicInfo on User {
id
name
avatarUrl
}
# Use fragment
query GetUser($id: ID!) {
user(id: $id) {
...UserBasicInfo
email
}
}query GetUser($id: ID!, $includeEmail: Boolean!) {
user(id: $id) {
id
name
email @include(if: $includeEmail)
}
}
query GetPosts($skipDrafts:
# Good: Specific fields
query GetUserName($id: ID!) {
user(id: $id) {
id
name
}
}
# Avoid: Over-fetching
query GetUser($id: ID!) {
user(id:
# Good: Named operation
query GetUserPosts($userId: ID!) {
user(id: $userId) {
posts {
id
title
}
}
}
# Avoid: Anonymous operation
query {
user(id: "123") {
posts
# Good: Variables
query GetUser($id: ID!) {
user(id: $id) {
id
name
}
}
# Avoid: Hardcoded values
query {
user(id: "123") {
id
name
}
}// UserAvatar.tsx
export const USER_AVATAR_FRAGMENT = gql`
fragment UserAvatar on User {
id
name
avatarUrl
}
`;
function UserAvatar({ user }) {
return <img src={user.avatarUrl} alt={user.name} />;
}Detailed documentation for specific topics:
id field for cacheable types@include/@skip for conditional fieldsGuide for writing GraphQL operations (queries, mutations, fragments) following best practices. Use this skill when: (1) writing GraphQL queries or mutations, (2) organizing operations with fragments, (3) optimizing data fetching patterns, (4) setting up type generation or linting, (5) reviewing operations for efficiency.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
Bash(npm:*)Bash(npx:*)ReadWriteEditGlobGrepskills/graphql-operations/SKILL.mdmain, last pushed 23 September 2026.SKILL.md, not by matching a directory convention. One layout observed: skills/*/SKILL.md.h1 and no skipped levels:.claude-plugin/marketplace.json by Apollo GraphQL, declaring 1 plugin. It is read for editorial metadata only — never as the skill index, which is always the repository tree./apollographql/skills.md, and each skill at its own URL..md5 files · 38 KB
Everything this skill ships beside its prose. All of it is set here, as subchapters of skill 10.
Documentation the agent loads on demand, rather than up front.