Основы GraphQL для разработчиков React
Изучите запросы, мутации, подписки и схемы GraphQL с точки зрения разработчика интерфейса
«Основы GraphQL для разработчиков React» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
GraphQL и REST
REST предоставляет конечные точки с фиксированной структурой: GET /users/:id возвращает весь объект пользователя независимо от того, какие данные нужны клиенту. GraphQL позволяет клиентам указать именно нужные поля, устраняя получение лишних данных и недополучение данных, для которого требуется несколько запросов.
Один запрос GraphQL может получить пользователя, его публикации и автора каждой публикации за один обмен данными с сервером.
Схема GraphQL
Каждый API GraphQL определяется схемой, записанной на языке определения схемы (SDL). Схема объявляет типы, их поля и корневые типы Query, Mutation и Subscription, с которыми могут работать клиенты.
Схема — это контракт между клиентом и сервером. Команды фронтенда и бэкенда могут работать параллельно после согласования схемы.
Написание запроса GraphQL
Запрос GraphQL выбирает поля: { user(id: "1") { name email posts { title } } }. Вложенные поля позволяют пройти по связям за один запрос. Псевдонимы переименовывают поля: { me: user(id: "1") { name } }. Фрагменты позволяют повторно использовать выборки полей в нескольких запросах.
Переменные делают запросы повторно используемыми: query GetUser($id: ID!) { user(id: $id) { name } } с переменными: { id: "1" }.
Резолверы на сервере
У каждого поля в схеме GraphQL есть функция-резолвер на сервере. Когда клиент запрашивает user.name, резолвер пользователя получает объект пользователя, а резолвер name (или резолвер по умолчанию) возвращает поле name.
Именно разрешение на уровне полей позволяет GraphQL получать только запрошенные данные.
Проблема N+1
Если запросить список из 100 публикаций, каждая из которых содержит своего автора, наивная реализация выполнит 100 отдельных запросов к базе данных для получения авторов. Без оптимизации эта проблема N+1 замедляет API GraphQL.
DataLoader решает проблему N+1, объединяя все запросы авторов в один запрос к базе данных с помощью кэша на время запроса и функции пакетной загрузки.
GraphQL Playground и Apollo Studio
Apollo Studio и GraphQL Playground — это пользовательские интерфейсы в браузере для интерактивного изучения API GraphQL. Они автоматически дополняют поля на основе схемы, отображают результаты запросов и показывают документацию типов непосредственно в интерфейсе.
Использование playground — самый быстрый способ разобраться с незнакомым API GraphQL, прежде чем писать код клиента.
Интроспекция типов
API GraphQL предоставляют собственную схему через запрос интроспекции: { __schema { types { name } } }. Клиенты могут запрашивать саму схему, чтобы обнаружить доступные типы, поля и аргументы.
Инструменты генерации кода, такие как graphql-codegen, используют интроспекцию для автоматической генерации типов TypeScript, соответствующих схеме API.
Мутации и подписки
Мутации GraphQL изменяют данные: mutation CreatePost($input: PostInput!) { createPost(input: $input) { id title } }. Подписки устанавливают постоянное соединение (обычно WebSocket) и передают обновления: subscription { postAdded { id title } }.
Все три корневых типа (Query, Mutation, Subscription) используют один и тот же синтаксис выбора полей.
Когда GraphQL лучше REST
GraphQL особенно эффективен в приложениях со сложными вложенными требованиями к данным, с несколькими типами клиентов (мобильными, веб-клиентами и TV), которым нужны разные наборы полей, а также в быстро развивающихся API, где устаревание полей предпочтительнее версионирования конечных точек.
REST проще для CRUD API с предсказуемой плоской структурой ресурсов и отличными возможностями кэширования через HTTP с помощью тегов ETag и заголовков кэша.
Клиенты GraphQL: Apollo, URQL, React Query
Apollo Client — самый функциональный клиент GraphQL: нормализованный кэш, управление локальным состоянием, подписки и связующие модули для обработки ошибок. URQL легче и использует кэш документов с более простым API. React Query вместе с graphql-request — самый простой подход для базовых запросов и мутаций без сложных возможностей кэширования.
Выбирайте клиент с учётом требований к кэшированию: нормализованный кэш подходит для сущностей, общих для нескольких запросов (Apollo), а более простой кэш документов — для независимых запросов (URQL или React Query).
Пример SDL
Простой SDL: type User { id: ID! name: String! posts: [Post!]! } type Post { id: ID! title: String! author: User! } type Query { user(id: ID!): User users: [User!]! }. Восклицательные знаки обозначают поля, которые не могут иметь значение null.
Эта схема точно сообщает клиенту, какие поля существуют у каждого типа и какие запросы доступны, что позволяет безопасно генерировать типизированный код.
Избыточная и недостаточная выборка в GraphQL
Что означает «избыточная выборка данных» в контексте сравнения REST и GraphQL?
Итоги урока
GraphQL позволяет клиентам запрашивать ровно те поля, которые им нужны (без избыточной или недостаточной выборки данных), используя язык запросов, определённый схемой. Резолверы обрабатывают каждое поле, а DataLoader решает проблему N+1. Интроспекция позволяет генерировать типы TypeScript. Apollo Client, URQL и React Query — основные клиенты GraphQL, совместимые с React.
Выбирайте GraphQL для сложных, вложенных требований к данным, предназначенных для нескольких типов клиентов, а REST — для простых CRUD API с предсказуемой структурой ресурсов.
Часто задаваемые вопросы
Урок «Основы GraphQL для разработчиков React» бесплатный?
Да — полный текст урока «Основы GraphQL для разработчиков React» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы GraphQL для разработчиков React»?
Изучите запросы, мутации, подписки и схемы GraphQL с точки зрения разработчика интерфейса Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Основы GraphQL для разработчиков React»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы GraphQL для разработчиков React
- Настройка Apollo Client в React
- Хуки useQuery и useMutation
- Кэш Apollo: нормализация и обновления