Как тестировать GraphQL API
Вопрос
Чем тестирование GraphQL отличается от REST и что ты проверишь?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Один эндпоинт, ответ зависит от выбранных полей; проверять data и errors, а не только код
Частичные ответы: ошибка в одном поле не ломает остальные
Авторизация на уровне полей и резолверов, а не только эндпоинта
Безопасность и нагрузка: глубина и сложность запросов, батчинг, интроспекция в проде
Производительность: N+1 в резолверах, пагинация списков
Что могут спросить следом
- Почему в GraphQL важна авторизация на уровне поля?
- Что такое N+1 в резолверах?
- Какими инструментами ты отправлял GraphQL-запросы?
Разбор
Главное отличие: эндпоинт один, а ответ зависит от того, какие поля запросил клиент, поэтому тестировать нужно запросы, а не адреса. Код ответа часто 200 даже при ошибке, поэтому в каждом тесте я проверяю массив errors и сам data, включая частичные ответы, когда одно поле упало, а остальные пришли. Авторизация в GraphQL живёт на уровне резолверов: пользователь может запросить чужой заказ через вложенное поле, хотя прямой запрос закрыт, это я проверяю отдельно для вложенных связей. Безопасность: глубокие и широкие запросы, которые кладут сервер, батчинг сотни операций в одном запросе для обхода лимитов, доступность интроспекции в проде. Производительность: классическая проблема N+1, когда список из ста заказов порождает сто запросов в базу за пользователем, лечится DataLoader. Запросы шлю из Postman, Insomnia или встроенной песочницы вроде GraphiQL.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.