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

GraphQL: учебное API «Академия»

Построим «Академия» — один развивающийся учебный проект. Каждый урок добавляет конкретный результат к предыдущему, сохраняя предметные данные и имена объектов. Серия входит в подборку «Новые возможности веб-приложений: 100 уроков».

Последовательность уроков

№ Урок Что добавляем
1 Схема учебного GraphQL API Контракт Course и Query, выполнение без HTTP
2 Поля, псевдонимы и фрагменты Выбор проекции и переиспользование набора полей
3 Переменные и HTTP-запрос JSON-конверт, имя операции и ограниченное тело POST
4 Авторы и вложенные связи Resolver Course.author и контекст запроса
5 Запись на курс через mutation Input, уникальность записи и ожидаемые доменные ошибки
6 Nullability и частичный результат Nullable границы, GraphQLError и безопасное сообщение
7 Пользователь и права доступа Субъект из локальной демонстрационной сессии и политика enrollment
8 Курсорная пагинация курсов Connection, сортировка по ID и pageInfo без смещения
9 Пакетная загрузка авторов Один набор ID на запрос и кэш только в контексте операции
10 Стоимость и пределы запроса Проверка AST, максимальная глубина, ограничение полей и списков
11 Развитие схемы без обрыва клиентов Новое поле displayTitle, deprecated title и набор известных операций
12 Клиент учебного каталога Обработка data/errors, переменных и границы завершённого API

Исходники и окружение

Скачать исходники «Академия». Архив содержит 12 полных самостоятельных состояний lesson-01 … lesson-12. Каждую папку используйте отдельно; накладывать соседние состояния друг на друга не требуется. README каждого состояния объясняет файлы, команды самостоятельного прохождения и ограничения.

Версии курса: Node.js 24 LTS, graphql 17.0.2. Сервер слушает только 127.0.0.1:4494. В архиве нет установленных зависимостей, пользовательских баз, сессий или секретов.

Требуется базовое знание JavaScript и HTTP. Данные и записи Enrollment живут в памяти и исчезают после остановки. Заголовок X-Lab-Student выбирает вымышленного студента для обучения политике доступа; это не настоящий вход. Пакетный загрузчик использует Map и не является измерением SQL. Бюджет глубины и полей ограничивает структуру запроса, но не даёт полной производственной защиты или точного расчёта стоимости. Транспортный договор учебного POST отдельно объяснён в третьем уроке.

При подготовке программы, зависимости, базы, браузерные клиенты и проверки не запускались. Все результаты в уроках обозначены как ожидаемые по исходникам. Материалы опубликованы.