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 отдельно объяснён в третьем уроке.
При подготовке программы, зависимости, базы, браузерные клиенты и проверки не запускались. Все результаты в уроках обозначены как ожидаемые по исходникам. Материалы опубликованы.