Перейти к содержанию

Начало урока

GraphQL API

Одна типизированная точка входа, где клиент запрашивает ровно те данные, что ему нужны

Главная идея: GraphQL — это язык запросов к вашему API плюс среда выполнения, которая на эти запросы отвечает. Вместо множества фиксированных REST-маршрутов, каждый из которых возвращает фиксированную форму данных, вы предоставляете единую точку входа /graphql, за которой стоит строго типизированная схема. Клиент отправляет запрос с описанием точного набора нужных полей, и сервер возвращает именно эту форму — ни больше, ни меньше. Вы уже строили REST API на Express; GraphQL — это другой контракт поверх тех же источников данных (SQL, MongoDB, другие сервисы), которые вы уже знаете.
К концу урока вы сможете:
  • писать GraphQL-схему на SDL с объектными типами, Query и Mutation;
  • реализовывать резолверы и читать их сигнатуру (parent, args, context, info);
  • отличать запросы (чтение) от мутаций (запись) и формировать каждую операцию;
  • распознавать проблему N+1 и объяснять, как DataLoader устраняет её батчингом;
  • взвешивать честные компромиссы GraphQL и REST и выбирать осознанно.

1. Зачем нужен GraphQL: избыточная и недостаточная выборка

В REST API каждый эндпоинт возвращает фиксированный ответ. Представьте мобильный экран, которому нужны имя пользователя и заголовки трёх его последних постов. С REST вы часто оказываетесь перед двумя плохими вариантами:

  • Избыточная выборка (over-fetching). GET /users/42 возвращает весь объект пользователя — email, адрес, настройки, метки времени — когда вам нужно было только имя. Байты тратятся впустую в каждом запросе.
  • Недостаточная выборка (under-fetching, лишние обращения). Этот эндпоинт не включает посты, поэтому клиент делает второй запрос GET /users/42/posts. Два сетевых обращения ради одного экрана; чем больше экранов, тем больше болтовни по сети.

GraphQL убирает обе проблемы для клиента. Клиент отправляет один запрос с описанием ровно того дерева данных, которое ему нужно:

query {
  user(id: 42) {
    name
    posts(last: 3) { title }
  }
}

Сервер отвечает JSON-объектом, повторяющим ровно эту форму: user с полем name и массивом posts, у каждого из которых есть title — и больше ничего.

Аналогия. REST — это ресторан с фиксированным меню: каждое блюдо (эндпоинт) подаётся заранее оформленным, и если нужен гарнир — заказываете второе блюдо. GraphQL — это боул по вашему выбору: вы отмечаете ровно нужные ингредиенты в одном бланке заказа, и кухня собирает один боул. Кухня (ваши источники данных) не меняется; меняется только контракт заказа.

Важно: GraphQL не заменяет вашу базу данных или бизнес-логику. Под каждым полем — обычный код, который читает из Postgres, MongoDB, кэша или другого HTTP-сервиса — те самые навыки из предыдущих курсов.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя