Тестирование API
SOAP и REST: в чём разница, XML и JSON для тестировщика
SOAP – протокол обмена сообщениями в формате XML со строгими правилами, а сервис на нём обычно описан в файле WSDL. Архитектурный стиль REST обходится без жёсткого стандарта: он работает поверх HTTP, чаще всего передаёт данные в JSON, но может и в XML или тексте, и не требует обязательной схемы. REST проще, быстрее и легче расширяется, а SOAP строже, даёт больше средств защиты и благодаря WSDL удобнее для тестирования по готовым образцам запросов.
- SOAP
- протокол: только XML, сервис обычно описан в WSDL
- REST
- архитектурный стиль: JSON, XML или текст поверх HTTP
- XML и JSON
- на собеседовании дают документ с ошибками и просят их найти
Что такое веб-сервис и протокол SOAP
Веб-сервис, или веб-служба, – программа, через которую сайты и приложения обмениваются данными. Говоря строже, это технология, которая позволяет программам общаться между собой в стандартных форматах XML и JSON по протоколу SOAP или в архитектурном стиле REST.
Пример из урока: авиакомпания отдаёт рейсы и билеты через веб-сервис, и сайт-агрегатор продаёт их у себя, не отправляя покупателя на сайт перевозчика. Так же сайт показывает погоду или курс валют, получая данные от стороннего сервиса, а кнопка "Войти через Google" работает через API другой системы.
SOAP (Simple Object Access Protocol, простой протокол доступа к объектам) – протокол обмена структурированными сообщениями в распределённой среде. Сервисы пересылают друг другу сообщения в формате XML по строгим правилам, а транспортом служит любой протокол прикладного уровня: HTTP, HTTPS, SMTP или FTP.
Само сообщение SOAP – это конверт (Envelope) с необязательным заголовком (Header) и телом (Body), в котором лежит вызов операции с параметрами. Если запрос не удался, сервис возвращает в теле элемент Fault с описанием ошибки. Работу SOAP-сервиса описывают два документа, и о них спрашивают на собеседовании.
XSD (XML Schema Definition)
Схема XML-документа: какие в нём элементы, в каком порядке они идут и какие типы данных в них допустимы. По ней сервис и тестировщик понимают, правильно ли составлено сообщение.
WSDL (Web Services Description Language)
Описание самого сервиса: какие у него операции, какие сообщения он принимает и возвращает, по какому адресу работает. Стандарт SOAP его не требует, но SOAP-сервисы обычно публикуют WSDL, и для тестировщика это плюс, потому что все операции и образцы запросов собраны в одном файле.
Из чего состоит WSDL
Блок types описывает типы данных, message перечисляет сообщения сервиса, portType задаёт операции с ними, например пару запроса и ответа. Блок binding связывает операции с протоколом, а service указывает адрес сервиса.
Правила XML: что проверяют в документе
XML (eXtensible Markup Language, расширяемый язык разметки) похож на HTML: те же теги, атрибуты и вложенность. HTML размечает страницу, а XML хранит и передаёт данные между сервисами. Основная единица XML – элемент, который состоит из открывающего тега с атрибутами, содержимого и закрывающего тега.
Правила корректного XML часто спрашивают на собеседовании, а иногда дают документ с ошибками и просят их найти. Ниже правила и пример нарушения к каждому.
Один корневой элемент
Весь документ лежит внутри одного элемента. Два элемента <person> подряд на верхнем уровне – ошибка, их оборачивают в общий <persons>.
Закрывающий тег у каждого элемента
Запись <name>Иван без </name> ошибочна. Пустой элемент можно закрыть сразу: <middleName/>.
Регистр в тегах важен
Запись <Name>Иван</name> ошибочна, потому что открывающий и закрывающий теги должны совпадать буква в букву, включая заглавные.
Элементы не пересекаются
Вложенный элемент закрывают раньше внешнего, как в <order><item>книга</item></order>. Запись <order><item>книга</order></item> – ошибка.
Значения атрибутов в кавычках
Запись <person name=Иван> ошибочна, правильно <person name="Иван">.
Спецсимволы заменяют сущностями
Знаки < и & в тексте записывают как < и &, иначе программа примет их за начало тега или сущности. Знак > принято заменять на >, а кавычку внутри значения атрибута на ". Проверяют это на полях со свободным текстом. Если платёжное приложение вставляет назначение платежа "ООО Рога & Копыта" в SOAP-запрос без замены &, XML становится некорректным, и сервис возвращает ошибку, а платёж не проходит. Поэтому в такие поля вводят <, > и & и смотрят, дошёл ли запрос.
Объявление XML в первой строке
Строка <?xml version="1.0" encoding="UTF-8"?> указывает версию XML, кодировку и при необходимости параметр standalone, который говорит, зависит ли документ от внешних объявлений. Если объявление есть, перед ним не должно быть ничего, даже пробела.
REST, RESTful и формат JSON
REST (Representational State Transfer, передача состояния представления) – архитектурный стиль. Жёстких правил, как у протокола, у стиля нет, и обязательной схемы вроде WSDL тоже. Описание API при этом бывает, сейчас чаще всего в формате OpenAPI (Swagger), но работать можно и без него. Данные в REST записываются компактнее, система работает быстрее, поэтому REST используют всё чаще.
RESTful называют конкретный веб-сервис, который полностью соответствует требованиям REST. Стиль описывает, как устроена передача данных между сервисами, а RESTful характеризует сам сервис. Разницу между этими словами иногда спрашивают на собеседовании.
Чаще всего REST передаёт данные в JSON (JavaScript Object Notation). Строгих правил у JSON меньше, чем у XML, записи короче, и работать с ними удобнее. Синтаксис укладывается в несколько правил, и на собеседовании в JSON ищут ошибки так же, как в XML.
Объект
Неупорядоченный набор пар "имя: значение" в фигурных скобках. Имя от значения отделяет двоеточие, пары друг от друга запятая, а после последней пары запятой нет: {"name": "Пётр", "age": 30}.
Имя
Всегда строка в двойных кавычках. Имя в одинарных кавычках или совсем без кавычек – ошибка.
Строка
Ноль или больше символов Юникода в двойных кавычках.
Число
Пишется без кавычек. Почтовый индекс 220000 без кавычек система считает числом, а "220000" в кавычках уже строкой и обрабатывает как текст. Такие расхождения ищут в ответах API. Если спецификация обещает, что price – число, а GET /products/42 возвращает "price": "1290", приложение на JavaScript при сложении цен в корзине склеит строки, и "1290" + "990" даст "1290990" вместо 2280.
true, false и null
Логические значения и null тоже пишутся без кавычек. Значение "true" в кавычках превращается в строку, а null означает, что значения нет.
Массив
Упорядоченный список значений в квадратных скобках через запятую. Элементами бывают строки, числа, объекты и другие массивы: [{"name": "Пётр"}, {"name": "Иван"}].
Чем SOAP отличается от REST и что выбрать
Разницу между SOAP и REST на собеседовании спрашивают часто. Полезно помнить, что вопрос "REST или SOAP" можно перефразировать как "простота или стандарт".
REST даёт скорость, расширяемость и поддержку многих форматов. SOAP медленнее и требует больше ресурсов, зато у него строгий стандарт, больше средств защиты и удобное тестирование по WSDL. Что выбрать на проекте, зависит от того, что для него важнее.
Что это
SOAP – протокол со строгими правилами. У REST как архитектурного стиля правил гораздо меньше.
Форматы
SOAP работает только с XML. REST принимает JSON, XML, обычный текст и другие форматы, чаще всего JSON.
Транспорт
SOAP может работать поверх разных протоколов: HTTP, HTTPS, SMTP, FTP. REST работает только по HTTP и HTTPS.
Описание сервиса
SOAP-сервис обычно описан в файле WSDL. Для REST обязательной схемы нет, описание в OpenAPI может быть, а может и не быть.
Кэширование
SOAP-запросы по HTTP идут методом POST, и их ответы не кэшируются. Ответы REST на GET-запросы кэшировать можно.
Скорость
Сообщения SOAP больше, обрабатываются медленнее, и разработка с ним дольше. REST легче и быстрее.
Безопасность и тестирование
В SOAP больше встроенных средств защиты, например стандарт WS-Security. По WSDL тестировщик сразу видит образцы запросов и может начинать, не дожидаясь примеров от разработчика.
Пример: SOAP-запрос в Postman
Postman в первую очередь инструмент для REST, но отправлять SOAP-запросы он тоже умеет, так что отдельно ставить SoapUI не обязательно. Во втором ролике я обращаюсь к открытому учебному сервису со сведениями о странах. Его операция FullCountryInfo принимает ISO-код страны и возвращает общие сведения о ней.
1. Адрес и метод
В новой коллекции создать запрос и вставить в адресную строку ссылку на WSDL сервиса. Метод выбрать POST, потому что SOAP-запросы по HTTP отправляют именно им.
2. Заголовок Content-Type
Добавить заголовок Content-Type со значением text/xml (для SOAP 1.2 это application/soap+xml). Без него сервис ответит ошибкой 415 Unsupported Media Type, потому что не поймёт формат тела.
3. Тело запроса
Во вкладке Body выбрать raw и формат XML и вставить конверт soap:Envelope с элементом soap:Body. Внутри тела стоит вызов FullCountryInfo с параметром sCountryISOCode, например US. Готовый образец тела по WSDL собирают SoapUI или расширение браузера Boomerang, его остаётся только скопировать.
4. Отправить и проверить ответ
Сервис возвращает XML со сведениями о стране. Если в теле нет нужной операции, приходит ошибка 500. Дальше значение параметра меняют под свои проверки: другой код страны, несуществующий код, пустое значение.
Видеоуроки, шпаргалки и тренажёры
Теорию я разбираю в семнадцатом уроке курса "Тестировщик с нуля" на YouTube, а отправку SOAP-запроса показываю в серии "Postman для тестировщика 2.0". В бесплатном базовом курсе по тестированию тема идёт уроком "Тестирование веб-сервисов. SOAP и REST. Теория", и после теории в нём есть задания.
Шпаргалка по API собирает REST и SOAP на одной карте и объясняет, по какому признаку на проекте выбирают протокол. В тренажёрах нужно найти ошибки в XML и в JSON, как в задании с собеседования.
Курсы по теме
Вопросы и ответы
В чём разница между SOAP и REST?
SOAP – протокол со строгими правилами: только XML, описание в WSDL, работа поверх разных протоколов. Архитектурный стиль REST работает по HTTP и HTTPS, передаёт JSON, XML или текст и не требует обязательной схемы. REST быстрее и проще, SOAP строже, лучше защищён и удобнее для тестирования по образцам из WSDL.
Что такое WSDL?
Это XML-документ с описанием SOAP-сервиса: какие у него операции, какие сообщения он принимает и возвращает и по какому адресу работает. Стандарт SOAP его не требует, но сервисы обычно его публикуют, а тестировщику он даёт готовые образцы запросов.
Чем XML отличается от JSON?
Оба формата передают структурированные данные. XML строится из элементов с открывающими и закрывающими тегами и атрибутами и подчиняется строгим правилам. JSON состоит из пар "имя: значение", объектов и массивов, записывается короче и разбирается быстрее. SOAP использует только XML, REST чаще всего JSON.
Какие правила XML спрашивают на собеседовании?
Один корневой элемент, закрывающий тег у каждого элемента, одинаковый регистр в открывающем и закрывающем теге, вложенность без пересечений, значения атрибутов в кавычках, спецсимволы через сущности вроде < и & и объявление XML в первой строке. Часто дают документ с ошибками и просят их найти.
Чем REST отличается от RESTful?
REST – архитектурный стиль, то есть набор принципов, по которым строят обмен данными между сервисами. RESTful называют конкретный веб-сервис, который этим принципам полностью соответствует.
Можно ли тестировать SOAP в Postman?
Да. Запрос отправляют методом POST на адрес сервиса, добавляют заголовок Content-Type: text/xml и вставляют в тело XML-конверт с нужной операцией. Образец тела берут из WSDL, например с помощью SoapUI или расширения браузера Boomerang.
Посмотреть программы курсов
Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.

