Можно ли передавать JSON в SOAP-сообщении?

«Можно ли передавать JSON в SOAP-сообщении?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Технически — да, но это противоречит предназначению SOAP и является антипаттерном.

SOAP (Simple Object Access Protocol) — это протокол, строго ориентированный на XML. Его сообщения должны быть валидными XML-документами, соответствующими схеме WSDL.

Как это может выглядеть (не рекомендуется):

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <!-- JSON передается как текст внутри XML-элемента -->
    <jsonData>{"user": {"name": "John", "age": 30}}</jsonData>
  </soap:Body>
</soap:Envelope>

Почему этого следует избегать:

  1. Нарушение контракта: Клиенты и серверы, ожидающие XML по WSDL, не смогут корректно обработать JSON.
  2. Потеря преимуществ SOAP: Пропадает возможность использования XML Schema валидации, WS-Security, WS-Addressing и других стандартов WS-*.
  3. Сложность парсинга: Получателю придется извлекать строку JSON из XML и затем парсить ее отдельно.

Рекомендация:

  • Если вам нужен XML — используйте SOAP.
  • Если вам нужен JSON — используйте REST/HTTP API (например, с применением спецификации OpenAPI).
  • Для смешанных сценариев проектируйте отдельные endpoint'ы.