Building GraphQL Server
Overview
Build production-ready GraphQL servers with SDL-first or code-first schema design, efficient resolver implementations with DataLoader batching, real-time subscriptions via WebSocket, and field-level authorization. Support Apollo Server, Yoga, Mercurius, and Strawberry across Node.js and Python runtimes.
Prerequisites
- Node.js 18+ with Apollo Server/Yoga/Mercurius, or Python 3.10+ with Strawberry/Ariadne
- Database with ORM (Prisma, TypeORM, SQLAlchemy) for resolver data sources
- Redis for subscription pub/sub and DataLoader caching (production deployments)
- GraphQL client for testing: GraphiQL, Apollo Studio, or Insomnia
graphql-codegen for TypeScript type generation from schema (recommended)
Instructions
- Examine existing data models, database schemas, and business requirements using Read and Glob to determine the entity graph and relationship structure.
- Design the GraphQL schema with type definitions, including
Query, Mutation, and Subscription root types, input types for mutations, and connection types for paginated lists.
- Implement resolvers for each field, using DataLoader to batch and deduplicate database queries for nested relationships (N+1 query prevention).
- Add input validation on mutation arguments using custom scalars (DateTime, Email, URL) and directive-based validation (
@constraint(minLength: 1, maxLength: 255)).
- Implement field-level authorization using schema directives (
@auth(requires: ADMIN)) or resolver middleware that checks user roles from the GraphQL context.
- Configure query complexity analysis and depth limiting to prevent abusive queries (maximum depth of 7, maximum complexity score of 1000).
- Set up real-time subscriptions using
graphql-ws protocol over WebSocket with Redis pub/sub for multi-instance message distribution.
- Generate TypeScript types from the schema using
graphql-codegen to ensure type safety between schema definitions and resolver implementations.
- Write integration tests using
executeOperation for query/mutation testing and WebSocket client tests for subscription verification.
See ${CLAUDESKILLDIR}/references/implementation.md for the full implementation guide.
Output
${CLAUDESKILLDIR}/src/schema/ - GraphQL SDL type definitions organized by domain
${CLAUDESKILLDIR}/src/resolvers/ - Resolver implementations per type with DataLoader integration
${CLAUDESKILLDIR}/src/dataloaders/ - DataLoader factories for batched database queries
${CLAUDESKILLDIR}/src/directives/ - Custom schema directives (auth, validation, caching)