graphql-schema

Руководство по лучшим практикам отрасли для проектирования интуитивно понятных, производительных и поддерживаемых GraphQL-схем. Охватывает основные принципы проектирования, включая клиенто-ориентированную организацию

npx skills add https://github.com/apollographql/skills --skill graphql-schema

GraphQL Schema Design Guide

This guide covers best practices for designing GraphQL schemas that are intuitive, performant, and maintainable. Schema design is primarily a server-side concern that directly impacts API usability.

Schema Design Principles

1. Design for Client Needs

  • Think about what queries clients will write
  • Organize types around use cases, not database tables
  • Expose capabilities, not implementation details

2. Be Explicit

  • Use clear, descriptive names
  • Make nullability intentional
  • Document with descriptions

3. Design for Evolution

  • Plan for backwards compatibility
  • Use deprecation before removal
  • Avoid breaking changes

Quick Reference

Type Definition Syntax

"""
A user in the system.
"""
type User {
  id: ID!
  email: String!
  name: String
  posts(first: Int = 10, after: String): PostConnection!
  createdAt: DateTime!
}

Nullability Rules

PatternMeaning
StringNullable - may be null
String!Non-null - always has value
[String]Nullable list, nullable items
[String!]Nullable list, non-null items
[String]!Non-null list, nullable items
[String!]!Non-null list, non-null items

Best Practice: Use [Type!]! for lists - empty list over null, no null items.

Input vs Output Types

# Output type - what clients receive
type User {
  id: ID!
  email: String!
  createdAt: DateTime!
}

# Input type - what clients send
input CreateUserInput {
  email: String!
  name: String
}

# Mutation using input type
type Mutation {
  createUser(input: CreateUserInput!): User!
}

Interface Pattern

interface Node {
  id: ID!
}

type User implements Node {
  id: ID!
  email: String!
}

type Post implements Node {
  id: ID!
  title: String!
}

Union Pattern

union SearchResult = User | Post | Comment

type Query {
  search(query: String!): [SearchResult!]!
}

Reference Files

Detailed documentation for specific topics:

  • Types - Type design patterns, interfaces, unions, and custom scalars
  • Naming - Naming conventions for types, fields, and arguments
  • Pagination - Connection pattern and cursor-based pagination
  • Errors - Error modeling and result types
  • Security - Security best practices for schema design

Key Rules

Type Design

  • Define types based on domain concepts, not data storage
  • Use interfaces for shared fields across types
  • Use unions for mutually exclusive types
  • Keep types focused (single responsibility)
  • Avoid deep nesting - flatten when possible

Field Design

  • Fields should be named from client's perspective
  • Return the most specific type possible
  • Make expensive fields explicit (consider arguments)
  • Use arguments for filtering, sorting, pagination

Mutation Design

  • Use single input argument pattern: mutation(input: InputType!)
  • Return affected objects in mutation responses
  • Model mutations around business operations, not CRUD
  • Consider returning a union of success/error types

ID Strategy

  • Use globally unique IDs when possible
  • Implement Node interface for refetchability
  • Base64-encode compound IDs if needed

Ground Rules

  • ALWAYS add descriptions to types and fields
  • ALWAYS use non-null (!) for fields that cannot be null
  • ALWAYS use [Type!]! pattern for lists
  • NEVER expose database internals in schema
  • NEVER break backwards compatibility without deprecation
  • PREFER dedicated input types over many arguments
  • PREFER enums over arbitrary strings for fixed values
  • USE ID type for identifiers, not String or Int
  • USE custom scalars for domain-specific values (DateTime, Email, URL)

Больше skills от apollographql

apollo-client
apollographql
Apollo Client — это комплексная библиотека управления состоянием для JavaScript, которая позволяет управлять как локальными, так и удаленными данными с помощью GraphQL. Версия 4.x предлагает улучшенное кэширование, лучшую поддержку TypeScript и совместимость с React 19.
official
apollo-client
apollographql
Полное руководство по созданию React-приложений с Apollo Client 4.x, охватывающее запросы, мутации, кэширование и управление состоянием. Поддерживает несколько React-фреймворков и конфигураций: клиентские приложения (Vite, CRA), Next.js App Router с React Server Components, React Router 7 с потоковым SSR и TanStack Start. Включает хуки для запросов (useQuery, useLazyQuery), мутаций (useMutation) и шаблоны на основе Suspense (useSuspenseQuery, useBackgroundQuery) для современных React 18+ и 19...
official
apollo-connectors
apollographql
Интеграция REST API в суперграфы GraphQL с помощью директив @source и @connect. Предоставляет структурированный 5-шаговый процесс: исследование структуры API, реализация схемы с директивами, валидация через rover supergraph compose, выполнение коннекторов и тестирование покрытия. Поддерживает настройку запросов, включая заголовки, тело запроса, пакетирование для паттернов N+1 и внедрение переменных окружения через $env. Обрабатывает сопоставление ответов с выбором полей, псевдонимами, подвыборками для вложенных данных и сущностями...
official
apollo-federation
apollographql
Apollo Federation позволяет объединять несколько GraphQL API (подграфов) в единый суперграф.
official
apollo-ios
apollographql
Apollo iOS — это строго типизированный GraphQL-клиент для платформ Apple. Он генерирует типы Swift из ваших операций и схемы GraphQL, включает асинхронный клиент с async/await, нормализованный кеш (в памяти или на основе SQLite), подключаемый HTTP-транспорт на основе перехватчиков, обрабатывающий запросы, мутации и многокомпонентные подписки, а также опциональный WebSocket-транспорт (graphql-transport-ws), поддерживающий любые типы операций.
official
apollo-kotlin
apollographql
Apollo Kotlin — это строго типизированный GraphQL-клиент, который генерирует модели Kotlin из ваших GraphQL-операций и схемы, и может использоваться в проектах Android, JVM и Kotlin Multiplatform.
official
apollo-mcp-server
apollographql
Подключает AI-агентов к GraphQL API через Model Context Protocol со встроенными инструментами интроспекции и операций. Предоставляет операции GraphQL в виде MCP-инструментов; поддерживает три источника операций: локальные файлы, коллекции GraphOS Studio и манифесты сохранённых запросов. Включает четыре инструмента интроспекции (introspect, search, validate, execute) для исследования схемы и ad-hoc тестирования запросов; режим минификации снижает использование токенов за счёт компактной записи. Настраиваемая аутентификация через статические заголовки,...
official
apollo-router
apollographql
Apollo Router — это высокопроизводительный графовый маршрутизатор, написанный на Rust для работы с суперграфами Apollo Federation 2. Он располагается перед вашими подграфами и обрабатывает планирование запросов, выполнение и композицию ответов.
official