Какие основные backend-риски у GraphQL?
- Какие проблемы GraphQL на бэкенде?
Клиент сам составляет запрос, поэтому риски на бэкенде: N+1 в резолверах, дорогие и глубокие запросы (DoS одним запросом), сложное кэширование (всё через POST на один URL), авторизация на уровне полей.
- N+1 — DataLoader (батчинг): в Spring for GraphQL — @BatchMapping
- Ограничение глубины и сложности запроса, таймауты, лимиты
- Персистентные запросы — сервер принимает только заранее известные
А ещё Авторизация — в каждом резолвере или на уровне схемы, а не только на входе
Подробно
N+1 в резолверах. Запрос списка заказов с полем customer вызывает резолвер customer для каждого заказа — 100 запросов к базе. Решение — DataLoader: собрать ключи всех заказов и загрузить клиентов одним запросом. В Spring for GraphQL — @BatchMapping.
Дорогие запросы. Клиент может запросить вложенность на 10 уровней (user → friends → friends → ...) или огромные списки. Один запрос кладёт сервер. Защита: ограничение глубины (MaxQueryDepthInstrumentation), оценка сложности с лимитом, обязательная пагинация списков, таймауты, rate limiting по стоимости запроса, а не по числу запросов.
Кэширование. Запросы обычно идут POST на /graphql — HTTP-кэш и CDN не работают. Помогают персистентные запросы (хеш вместо текста, GET), кэширование на уровне резолверов и данных.
Авторизация. Одна точка входа, а данные разной чувствительности — проверки нужны на уровне полей и объектов. Ещё риск — интроспекция схемы в проде (раскрывает API) и подробные ошибки.
Наблюдаемость. Все запросы на один URL с кодом 200 — метрики нужно собирать по операциям и полям.
Что хотят услышать
- N+1 и DataLoader.
- Защита от дорогих запросов.
- Кэширование и авторизация на уровне полей.
Частые ошибки
- Выставлять GraphQL наружу без ограничений глубины и сложности.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Невозможность выбрать конкретные поля ответа
- ✗Только один запрос за раз на клиента
- ✓N+1 на резолверах, авторизация полей и слишком глубокие запросы
- ✗Полное отсутствие типизации схемы, из-за чего ошибки видны только в рантайме
Что спросят дальше
- Что такое DataLoader?
- Когда REST проще GraphQL?
Разбор темы
- Spring Batch, Integration и API styles
Batch jobs, enterprise integration patterns, Spring Data REST, HATEOAS и GraphQL.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.