Ответ вслух Senior gRPC, GraphQL и WebSocket обновлено

Как тестировать GraphQL API

Вопрос

Чем тестирование GraphQL отличается от REST и что ты проверишь?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Главное отличие: эндпоинт один, а ответ зависит от того, какие поля запросил клиент, поэтому тестировать нужно запросы, а не адреса. Код ответа часто 200 даже при ошибке, поэтому в каждом тесте я проверяю массив errors и сам data, включая частичные ответы, когда одно поле упало, а остальные пришли.

Что должно прозвучать в ответе

  • Один эндпоинт, ответ зависит от выбранных полей; проверять data и errors, а не только код

  • Частичные ответы: ошибка в одном поле не ломает остальные

  • Авторизация на уровне полей и резолверов, а не только эндпоинта

  • Безопасность и нагрузка: глубина и сложность запросов, батчинг, интроспекция в проде

  • Производительность: N+1 в резолверах, пагинация списков

Что могут спросить следом

  • Почему в GraphQL важна авторизация на уровне поля?
  • Что такое N+1 в резолверах?
  • Какими инструментами ты отправлял GraphQL-запросы?

Разбор

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

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.