SOAP и XML
Стек SOAP/XML, который аналитик всё ещё встречает в корпоративных интеграциях — части SOAP-сообщения, WSDL, XSD, пространства имён XML, XML против JSON и HTML, JSON Schema и SOAP-fault.
12 вопросов
JuniorТеорияОчень частоЧем SOAP отличается от REST по транспорту, контракту, безопасности и обработке ошибок?
Чем SOAP отличается от REST по транспорту, контракту, безопасности и обработке ошибок?
SOAP — строгий XML-протокол поверх многих транспортов, с контрактом WSDL, встроенным WS-Security и ошибками как Fault. REST — стиль поверх HTTP, обычно JSON, с более свободным контрактом, безопасностью уровня HTTPS и HTTP-кодами для ошибок. REST легче; SOAP — для строгих корпоративных интеграций.
Типичные ошибки
- ✗Путать, кто из них строгий XML с контрактом WSDL
- ✗Называть SOAP более лёгким вариантом для простого публичного API
- ✗Думать, что REST сообщает об ошибках через
Fault, а не HTTP-кодами
Уточняющие вопросы
- →Какой стиль несёт свою модель безопасности внутри самого сообщения?
- →Почему REST обычно легче на проводе, чем SOAP?
JuniorТеорияЧастоЧто такое SOAP и из каких частей состоит SOAP-сообщение?
Что такое SOAP и из каких частей состоит SOAP-сообщение?
SOAP — протокол обмена структурированными сообщениями в виде XML по сети. Каждое сообщение — это Envelope, оборачивающий необязательный Header для метаданных (безопасность, маршрутизация) и обязательный Body, несущий вызов, ответ или Fault при ошибке.
Типичные ошибки
- ✗Называть SOAP форматом данных, а не протоколом обмена сообщениями на XML
- ✗Считать
Headerобязательным, аBody— необязательным (на деле наоборот) - ✗Забывать, что
Faultвозвращается внутриBody, а не голой HTTP-ошибкой
Уточняющие вопросы
- →Какой элемент SOAP необязателен и что обычно в него кладут?
- →Как
Bodyв SOAP сигнализирует, что вызов завершился ошибкой?
JuniorТеорияЧастоЧто такое WSDL, что он описывает и кто его генерирует?
Что такое WSDL, что он описывает и кто его генерирует?
WSDL — XML-контракт, описывающий SOAP-сервис: его операции, типы входных и выходных сообщений, binding, привязывающий их к протоколу, и адрес endpoint. Обычно его генерирует серверный фреймворк, а клиент по нему строит совместимые заглушки (stub) и корректно вызывает сервис.
Типичные ошибки
- ✗Путать контракт WSDL с самим payload SOAP-запроса
- ✗Думать, что WSDL пишут вручную, а не генерирует фреймворк
- ✗Считать WSDL транспортом, а не описанием сервиса
Уточняющие вопросы
- →Какие части WSDL описывают операции, а какая — конкретный endpoint?
- →Как клиент превращает WSDL в вызываемый код?
JuniorТеорияЧастоВ чём разница между атрибутом и элементом XML и когда использовать каждый?
В чём разница между атрибутом и элементом XML и когда использовать каждый?
Элемент — узел со своими тегами, который может содержать текст, дочерние элементы и повторяться; атрибут — пара имя-значение в открывающем теге. Элементы — для структурированных или повторяемых данных, которые могут расти; атрибуты — для простых одиночных метаданных вроде id или единицы измерения.
Типичные ошибки
- ✗Думать, что атрибуты вкладываются или повторяются, как элементы
- ✗Класть повторяемые или растущие данные в атрибуты, а не в элементы
- ✗Считать выбор произвольным, без последствий для модели данных
Уточняющие вопросы
- →Почему повторяемые данные лучше моделировать элементами, а не атрибутами?
- →Может ли атрибут хранить дочерние узлы? Почему это ограничивает его?
JuniorТеорияЧастоЧем XML отличается от HTML и что разделяет well-formed и valid XML-документ?
Чем XML отличается от HTML и что разделяет well-formed и valid XML-документ?
У HTML фиксированный набор тегов, он описывает отображение страницы; XML позволяет задавать свои теги для описания данных и не несёт смысла отображения. Well-formed — синтаксис корректен: теги закрыты и правильно вложены. Valid строже: well-formed и вдобавок соответствует схеме, например XSD.
Типичные ошибки
- ✗Считать well-formed и valid синонимами
- ✗Думать, что XML, как HTML, описывает отображение, а не данные
- ✗Полагать, что valid — более слабая проверка, чем well-formed
Уточняющие вопросы
- →Может ли документ быть well-formed, но не valid? Приведите пример.
- →Почему XML сам по себе не несёт смысла отображения?
JuniorТеорияЧастоЧто такое XSD и что он позволяет проверять, чего не может обычный XML?
Что такое XSD и что он позволяет проверять, чего не может обычный XML?
XSD — XML Schema, то есть XML-документ, задающий допустимую структуру другого XML: какие элементы и атрибуты возможны, их порядок, кратность и типы данных. Обычный XML бывает лишь well-formed; проверка по XSD подтверждает, что он valid — соответствует согласованному контракту.
Типичные ошибки
- ✗Думать, что любой well-formed XML автоматически valid без схемы
- ✗Путать XSD (структура и типы) с XSLT или CSS-стилями
- ✗Считать, что XSD ограничивает только синтаксис, а не порядок и типы
Уточняющие вопросы
- →В чём здесь разница между well-formed и valid?
- →Какая возможность XSD позволяет ограничить тип данных элемента?
MiddleТеорияЧастоЧем XML отличается от JSON по размеру, схеме и массивам и когда XML всё ещё верный выбор?
Чем XML отличается от JSON по размеру, схеме и массивам и когда XML всё ещё верный выбор?
JSON компактнее, имеет нативные массивы и объекты и доминирует в веб-API; XML многословнее, но даёт namespace, атрибуты, комментарии и зрелый инструментарий схем — XSD, XSLT. Выбирайте XML там, где этого требует legacy- или регулируемая система — банки, госсектор, SOAP — или ради богатой валидации.
Типичные ошибки
- ✗Утверждать, что XML компактнее или быстрее JSON
- ✗Думать, что у JSON зрелый инструментарий схем и трансформаций уровня XML
- ✗Забывать, что регулируемые или legacy-системы всё ещё требуют XML или SOAP
Уточняющие вопросы
- →Какая особенность JSON делает его легче XML для веб-API?
- →Назовите один регулируемый контекст, где XML всё ещё обязателен.
JuniorТеорияИногдаЧто такое JSON Schema, что она ограничивает и работали ли вы с ней?
Что такое JSON Schema, что она ограничивает и работали ли вы с ней?
JSON Schema — JSON-документ, описывающий допустимую форму другого JSON: обязательные поля, их типы, диапазоны значений, enum, паттерны строк и вложенность. Инструменты валидируют payload по ней — это аналог XSD из мира XML, — а аналитики применяют её, чтобы зафиксировать контракт API.
Типичные ошибки
- ✗Путать JSON Schema (контракт) с примером payload
- ✗Думать, что она валидирует XML или сама написана на XML
- ✗Считать, что она ограничивает отображение, а не типы полей и структуру
Уточняющие вопросы
- →Какой технологии XML JSON Schema наиболее аналогична?
- →Назовите два ограничения, которые JSON Schema задаёт для поля.
JuniorТеорияИногдаКакими инструментами вы работаете с XML, XSD и WSDL и как тестируете SOAP-сервис?
Какими инструментами вы работаете с XML, XSD и WSDL и как тестируете SOAP-сервис?
Для редактирования и валидации XML по XSD — плагины IDE или онлайн-валидаторы; для SOAP клиент вроде SoapUI или Postman импортирует WSDL и генерирует примеры запросов. Тестируешь, отправляя составленные envelope и сверяя ответы и Fault с контрактом и схемой.
Типичные ошибки
- ✗Думать, что SOAP-сервис тестируют, открыв WSDL в браузере
- ✗Пропускать валидацию по схеме для payload запроса и ответа
- ✗Не использовать клиент, чтобы импортировать WSDL и составить envelope
Уточняющие вопросы
- →Что даёт импорт WSDL в клиент?
- →Как убедиться, что ответ соответствует согласованной схеме?
MiddleТеорияИногдаЧто такое SOAP Fault, что он содержит и чем обработка ошибок в SOAP отличается от статус-кодов REST?
Что такое SOAP Fault, что он содержит и чем обработка ошибок в SOAP отличается от статус-кодов REST?
SOAP Fault — стандартный элемент ошибки внутри Body. Он содержит fault code (категорию вроде Client или Server), человекочитаемый fault string и необязательный detail. REST передаёт ошибки многими HTTP-кодами; SOAP отдаёт один транспортный код, обычно 500, а саму ошибку кладёт в Fault.
Типичные ошибки
- ✗Думать, что
Fault— это HTTP-заголовок, а не элемент внутриBody - ✗Считать, что SOAP использует много HTTP-кодов, как REST
- ✗Забывать, что fault code — фиксированная категория, а не свободный id
Уточняющие вопросы
- →Какое значение у fault code — свободный текст или категория?
- →Почему SOAP-клиент не может по HTTP-статусу классифицировать ошибку?
SeniorДебаггингИногдаНайдите ошибки в этом XML-фрагменте и скажите, что сообщит парсер.
Найдите ошибки в этом XML-фрагменте и скажите, что сообщит парсер.
Здесь три ошибки well-formedness. Значение атрибута в id=42 не в кавычках; <price> закрыт как </Price>, но имена тегов XML регистрозависимы; а <b> и <note> перекрываются вместо вложенности. Парсер останавливается на первой ошибке — незакавыченном атрибуте — и выдаёт ошибку not-well-formed.
Типичные ошибки
- ✗Думать, что имена тегов XML сопоставляются регистронезависимо
- ✗Считать, что парсер сам чинит перекрытую или незакавыченную разметку
- ✗Полагать, что ошибки well-formedness — предупреждения, а не фатальны
Уточняющие вопросы
- →Почему парсер останавливается на первой ошибке, а не перечисляет все?
- →Как выглядела бы правильная вложенность
<b>и<note>?
JuniorТеорияРедкоЧто такое пространство имён XML, зачем оно нужно и для чего служит prefix?
Что такое пространство имён XML, зачем оно нужно и для чего служит prefix?
Пространство имён XML — это URI, квалифицирующий имена элементов и атрибутов, чтобы одинаково названные теги из разных словарей не сталкивались в одном документе. Prefix — короткий алиас этого URI: пишешь soap:Body вместо полного URI. URI лишь идентифицирует и никогда не загружается.
Типичные ошибки
- ✗Думать, что URI пространства имён — это URL, который парсер загружает
- ✗Считать, что смысл несёт сам prefix, а не URI, к которому он привязан
- ✗Полагать, что одноимённые теги не столкнутся, а namespace бесполезен
Уточняющие вопросы
- →Меняется ли смысл, если сменить prefix, но оставить тот же URI?
- →Почему URI пространства имён не обязан вести на реальную страницу?