Можно ли использовать JSON в SOAP-архитектуре веб-сервисов?

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

Ответ

Стандартно — нет, но технически возможно с костылями. SOAP (Simple Object Access Protocol) — это протокол, строго основанный на XML. Все сообщения (конверты, заголовки, тела) должны быть в формате XML.

Стандартный подход (XML):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/">
  <soap:Body>
    <m:GetUser xmlns:m="http://api.example.com">
      <m:UserId>12345</m:UserId>
    </m:GetUser>
  </soap:Body>
</soap:Envelope>

Нестандартный подход (JSON внутри XML): JSON можно передать как строку внутри XML-тега. Это создает сложности при парсинге и валидации на стороне сервиса.

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/">
  <soap:Body>
    <m:ProcessData xmlns:m="http://api.example.com">
      <m:JsonPayload>{"userId": 12345, "action": "update"}</m:JsonPayload>
    </m:ProcessData>
  </soap:Body>
</soap:Envelope>

Что важно для тестировщика SOAP:

  1. Основной фокус — на корректности XML: структура, пространства имен (namespaces), типы данных в XSD-схемах, SOAP-заголовки.
  2. Инструменты: Используйте специализированные инструменты вроде SoapUI или готовые клиенты из WSDL, которые генерируют правильный XML.
  3. Если встретили JSON в SOAP: Это кастомная реализация. Нужно тестировать:
    • Корректность экранирования JSON-строки внутри XML.
    • Парсинг этой строки на стороне сервера.
    • Обработку ошибок при невалидном JSON.

Вывод: Для чистого JSON лучше использовать RESTful API. SOAP-сервисы тестируются в контексте XML.