Какие виды API существуют помимо REST API
Что проверяют
Знаете ли вы, что кроме REST в проекте встречаются другие протоколы, и понимаете ли, как под каждый меняется тестирование. Следом обычно спрашивают, чем вы протестируете gRPC или WebSocket и что проверять в ответе GraphQL.
Как отвечать
Называйте вид API и сразу инструмент и особенность проверки:
- SOAP: XML по контракту WSDL. Тестируют в SoapUI или Postman, проверяют валидность по XSD. Ошибка приходит объектом
Fault, в SOAP 1.1 обычно с HTTP-кодом 500; - GraphQL: один эндпоинт, чаще всего
POST /graphql. Ошибка нередко приходит с кодом 200 и массивомerrorsв теле, при этом частьdataможет быть заполнена. Отдельно проверяют глубину вложенности запросов и права доступа к отдельным полям; - gRPC: вызовы по контракту
.proto, бинарный Protobuf поверх HTTP/2. Руками удобно черезgrpcurlили Postman. Статусы свои (NOT_FOUND,DEADLINE_EXCEEDED,UNAVAILABLE), а не HTTP-коды; - WebSocket: постоянное соединение и поток сообщений. Проверяют порядок сообщений, переподключение после обрыва, поведение при потере сети и при двух открытых вкладках;
- JSON-RPC: метод и параметры в теле запроса, ошибка приходит объектом
errorс числовым кодом, HTTP-статус при этом часто 200; - асинхронные интеграции: вебхуки и очереди Kafka или RabbitMQ. Здесь проверяют, что сообщение дошло, не задвоилось и корректно обработалось при повторной доставке.
Сильный ответ заканчивается мыслью, что с видом API меняются оракулы теста: где смотреть признак успеха, где ошибку, чем ловить таймаут и как подготовить данные.
Где спотыкаются
Проверяют GraphQL как REST: пришёл статус 200, значит всё хорошо. А внутри массив errors и наполовину пустой data.
Приписывают SOAP «высокую безопасность» как свойство протокола. Уровень защиты определяют TLS, авторизация и настройки сервера, у REST он бывает точно таким же.
Не могут объяснить, как тестировать gRPC без интерфейса. grpcurl видит методы сервиса только при включённом server reflection, иначе ему нужен сам файл .proto, и об этом стоит договориться с разработчиками заранее.