Веб-разработка

Учебник GraphQL с нуля для начинающих

19 уроков · 6 разделов · бесплатно, без регистрации

GraphQL — это язык запросов к API, в котором клиент сам выбирает нужные поля, а сервер отдаёт ровно их. В этом курсе мы пройдём путь с нуля: от различий с REST до зрелой продакшен-схемы.

Ты разберёшь схему и систему типов, научишься писать запросы, мутации и подписки, поймёшь, как работают резолверы и сервер на Apollo Server 4, и решишь главную боль производительности — проблему N+1 — с помощью DataLoader. Много запускаемых примеров на чистом JavaScript, ASCII-диаграмм и практик 2024-2025 годов.

Курс «GraphQL с нуля» состоит из 6 разделов и 19 уроков: Введение и GraphQL vs REST, Схема и типы, Запросы и аргументы, Мутации и подписки, Резолверы и сервер и Клиент и оптимизация N+1. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Введение и GraphQL vs REST

    1. Что такое GraphQL и зачем он нужен

      Простое объяснение, что такое GraphQL: язык запросов к API, единая точка входа и клиент, который сам решает, какие данные ему нужны.

    2. GraphQL vs REST: over-fetching и under-fetching

      Чем GraphQL отличается от REST: проблемы лишних и недостающих данных, число запросов, кэширование и честное сравнение подходов.

    3. Единый эндпоинт и анатомия запроса

      Как устроен GraphQL-запрос: один эндпоинт, три типа операций, поля, аргументы и форма ответа data/errors.

  2. 2 Схема и типы

    1. Схема и SDL: контракт между клиентом и сервером

      Что такое GraphQL-схема и язык SDL: типы, поля, корневые типы Query и Mutation как строгий контракт API.

    2. Скаляры, объекты и перечисления

      Базовые строительные блоки типов GraphQL: встроенные скаляры Int, Float, String, Boolean, ID, объектные типы, enum и кастомные скаляры.

    3. Nullability и списки: ! и [Type!]!

      Модификаторы типов в GraphQL: восклицательный знак для non-null, квадратные скобки для списков и как читать сложные сигнатуры вроде [User!]!.

  3. 3 Запросы и аргументы

    1. Поля, вложенность и обход дерева запроса

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

    2. Аргументы, переменные и алиасы

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

    3. Фрагменты и директивы

      Переиспользование выборок через фрагменты и условная выборка полей с директивами @include и @skip в GraphQL.

  4. 4 Мутации и подписки

    1. Мутации: изменяем данные

      Как изменять данные в GraphQL: тип Mutation, операции создания, обновления и удаления, возврат изменённого объекта.

    2. Input-типы и обработка ошибок мутаций

      Структурирование аргументов мутаций через input-типы и паттерн payload-результата с полями errors для понятной обработки ошибок.

    3. Подписки и реальное время

      Третий тип операций GraphQL — подписки: поток событий через постоянное соединение, когда они нужны и как устроены.

  5. 5 Резолверы и сервер

    1. Что такое резолвер: четыре аргумента

      Анатомия резолвера в GraphQL: parent, args, context, info — как функция-резолвер достаёт данные для каждого поля.

    2. Собираем сервер на Apollo Server 4

      Минимальный GraphQL-сервер на Apollo Server 4: typeDefs, resolvers, запуск через startStandaloneServer и Playground.

    3. Контекст и авторизация в резолверах

      Как использовать context для аутентификации и авторизации в GraphQL: проверка прав в резолверах и защита полей.

  6. 6 Клиент и оптимизация N+1

    1. Проблема N+1: откуда берётся

      Что такое проблема N+1 в GraphQL: как вложенные резолверы над списками порождают лавину запросов в базу данных.

    2. DataLoader: батчинг и кэширование

      Как DataLoader решает проблему N+1 в GraphQL: батчинг вызовов load в один запрос и кэширование в пределах запроса.

    3. Клиент: Apollo Client и кэш

      GraphQL на фронтенде: Apollo Client, нормализованный кэш, переменные и почему кэширование сложнее, чем в REST.

    4. Best practices и эволюция схемы

      Итоговые практики GraphQL: пагинация, безопасная эволюция схемы через @deprecated, защита от тяжёлых запросов и безопасность.