Как тестировать GraphQL API с помощью Postman
- GraphQL vs REST
- Создание GraphQL API Schema для автодополнения запросов
- Как тестировать GraphQL API с помощью Postman
- Пишем Query
- Пишем Mutation
- Директивы
GraphQL — язык запросов к API, разработанный в Facebook. Появился в открытом доступе в 2015 году. Удобный подход к построению запросов в GraphQL позволяет значительно упрощать сложные API-интерфейсы.
Изначально GraphQL использовался командой iOS-разработчиков в Facebook и затем захватил мир мобильной разработки. На сегодняшний день технология доступна и в веб-разработке.
GraphQL позволяет пользователям API определять, какие данные им нужны в ответе. GraphQL API, в отличие от традиционного REST API, организуется по принципу полей и типов, а не эндпоинтов (запросов).
Как тестировщики, мы сконцентрируемся на том, как писать запросы и проверять ответы.
GraphQL vs REST
В этой статье мы не будем сравнивать GraphQL и REST по производительности, безопасности (пусть этим займутся разработчики). Мы проанализируем отличия с точки зрения тестирования.
GraphQL API очень популярны среди разработчиков. Тем не менее, с 2020 года наблюдается паритет между GraphQL и REST.

Одним из самых больших преимуществ GraphQL является его гибкость — он позволяет делать более точные запросы, определяя поля, которые вы хотите получить в ответе. Это особенно полезно, когда вы работаете с массивными API, которые содержат много данных. RETSful API часто возвращают больше данных, чем нужно клиенту. Бывают и обратные ситуации, когда нужно делать несколько запросов, чтобы получить все данные, которые нужны. GraphQL лишен этих недостатков.
Например, если вам нужно получить список всех названий всех треков всех альбомов какого-нибудь исполнителя с помощью REST API Spotify, вам нужно будет написать три запроса. Первым запросом вы получите ID исполнителя, вторым — все его альбомы, третьим — все треки в каждом альбоме. С помощью GraphQL API все эти данные можно получить с помощью одного запроса:
Создание GraphQL API Schema для автодополнения при написании запросов
Зайдите во вкладку APIs в Postman и импортируйте схему или создайте новый API. Мы рассмотрим импорт схемы (похожие шаги вы должны будете сделать, если создаете новый API).

Выбираем GraphQL и кликаем на кнопку «Upload Files»

В результате вы должны будете увидеть что-то похожее на изображении ниже. Нажмите на кнопку «Import»


Теперь выбираем схему.

В результате вы получите возможность пользоваться автодополнением — оно очень полезно при написании Query/Mutation в GraphQL

Как тестировать GraphQL API с помощью Postman
Мы будем тестировать CRUD API. CRUD — сокращение для Create, Read, Update и Delete. Т.е. CRUD API позволяет читать, изменять, создавать и удалять ресурсы с помощью соответствующих запросов. В GraphQL тип Query используются для чтения (получения) данных с сервера. Все остальные CRUD-операции (создание, изменение, удаление) выполняются с помощью типа Mutation.
Для того, чтобы отправить запрос с помощью Postman, выберите «GraphQL» во вкладке Body (показывает, что в теле запроса будет использоваться graphql-синтаксис).
Вот еще 2 вещи, которые нужно сделать:
- Нужно указать bearer token
- Нужно выставить Content/Type значение application/json

Пишем Query
Теперь мы готовы написать первый запрос. Мы будем использовать тестовый graphql сервер Spotify для практики:
https://spotify-graphql-server.herokuapp.com/graphql

При написании graphql-запросов типа Query, можно использовать параметры. Параметры — значения со знаком $ перед ними — мы можем заменить их на какие-либо значения. В секции справа мы можем определить значения для параметров. Можно даже использовать переменные окружения Postman, как на изображении ниже:

После получения ответа, мы должны его проверить. С точки зрения написания тестов, нет большой разницы между тестированием ответов graphql или REST — в обоих случаях нам вернется JSON. Пример простого теста вы можете увидеть на изображении ниже:

Пишем Mutation
В отличие от Query, Mutation в GraphQL используются для операций создания, изменения или удаления ресурсов. Для обучения будем пользоваться open-source api:
https://hasura.io/learn/graphql/graphiql
На изображениях ниже вы можете видеть простые примеры Mutation (на изменение и удаление ресурсов):


На последнем изображении мы написали Mutation, который удаляет запись c todo, которая создается на первом изображении (ID: 48440). Поле affected_rows
показывает, сколько записей в таблице было затронуто запросом. В дополнение, в ответе содержится сам объект, который был удален.
Директивы
Директивы в GraphQL могут влиять на выполнение запросов. Директивы можно добавлять к запросу (или к фрагменту), чтобы включать/исключать поля из ответа.
@include (if: Boolean)
— включать поле/фрагмент только если аргумент равенtrue
@skip (if: Boolean)
— исключать поле/фрагмент только если аргумент равенtrue

Директивы добавляют запросам гибкость и позволяют не писать отдельные запросы для каждого случая, когда нужно добавить/удалить какие-то поля из запроса. Директивы позволяют динамически менять структуру и форму запросов с помощью параметров. В примере ниже, передавая false
в качестве значения параметра withAlbums
, мы не запрашиваем массив альбомов:

В зависимости от реализации graphql сервера, могут использоваться и другие директивы. Более того, можно создавать и свои собственные директивы.
Заключение
И GraphQL и REST — отличные способы организации API. Каждый из этих подходов имеет свои преимущества и свои недостатки, но оба широко распространены и очень важно знать основы тестирования обоих подходов.
В этой короткой статье мы постарались помочь новичкам в GraphQL сделать первые шаги к тестированию GraphQL API с помощью Postman. Не останавливайтесь только на повторении того, что есть в этой статье — после прочтения попробуйте выполнить все CRUD операции, используйте параметры и директивы. Если хотите узнать о GraphQL больше, рекомендуем документацию — она очень подробная и понятная.