0Pricing
React Academy · Урок

Основы 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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы GraphQL для разработчиков React
  2. Настройка Apollo Client в React
  3. Хуки useQuery и useMutation
  4. Кэш Apollo: нормализация и обновления
← Назад к React Academy