Rusau LearnВойти

Тестирование API

SOAP и REST: в чём разница, XML и JSON для тестировщика

SOAP – протокол обмена сообщениями в формате XML со строгими правилами, а сервис на нём обычно описан в файле WSDL. Архитектурный стиль REST обходится без жёсткого стандарта: он работает поверх HTTP, чаще всего передаёт данные в JSON, но может и в XML или тексте, и не требует обязательной схемы. REST проще, быстрее и легче расширяется, а SOAP строже, даёт больше средств защиты и благодаря WSDL удобнее для тестирования по готовым образцам запросов.

Мой видеоурок: Урок 17. Тестирование веб-сервисов. SOAP и XML, REST и JSON для тестировщикаОткрыть на YouTube
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="Иван">.

  • Спецсимволы заменяют сущностями

    Знаки < и & в тексте записывают как &lt; и &amp;, иначе программа примет их за начало тега или сущности. Знак > принято заменять на &gt;, а кавычку внутри значения атрибута на &quot;. Проверяют это на полях со свободным текстом. Если платёжное приложение вставляет назначение платежа "ООО Рога & Копыта" в 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 спрашивают на собеседовании?

Один корневой элемент, закрывающий тег у каждого элемента, одинаковый регистр в открывающем и закрывающем теге, вложенность без пересечений, значения атрибутов в кавычках, спецсимволы через сущности вроде &lt; и &amp; и объявление XML в первой строке. Часто дают документ с ошибками и просят их найти.

Чем REST отличается от RESTful?

REST – архитектурный стиль, то есть набор принципов, по которым строят обмен данными между сервисами. RESTful называют конкретный веб-сервис, который этим принципам полностью соответствует.

Можно ли тестировать SOAP в Postman?

Да. Запрос отправляют методом POST на адрес сервиса, добавляют заголовок Content-Type: text/xml и вставляют в тело XML-конверт с нужной операцией. Образец тела берут из WSDL, например с помощью SoapUI или расширения браузера Boomerang.

Посмотреть программы курсов

Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.

Все курсы

Здесь используются cookies: без них сайт не работает, и по ним видно, откуда о платформе узнают.Cookies нужны для входа и учёта переходов. Подробнее