В чем разница между SOAP и REST?

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

Ответ

SOAP и REST — это архитектурные стили/протоколы для построения веб-сервисов (API). Их ключевые различия определяют подход к их тестированию.

Критерий SOAP (Simple Object Access Protocol) REST (Representational State Transfer)
Протокол и формат Протокол со строгими стандартами. Сообщения только в XML, описываются контрактом WSDL (Web Services Description Language). Архитектурный стиль, а не протокол. Использует HTTP как транспорт. Данные обычно в JSON (реже XML, HTML, plain text).
Состояние (State) Может быть stateful (сохраняет состояние между запросами), что усложняет масштабирование. Stateless (без состояния). Каждый запрос от клиента содержит всю необходимую информацию для его обработки. Сервер не хранит состояние сессии.
Методы Использует только POST для передачи запросов (действие описывается внутри тела XML). Использует стандартные HTTP-методы: GET (получить), POST (создать), PUT/PATCH (обновить), DELETE (удалить).
Безопасность Имеет встроенный стандарт WS-Security для комплексной безопасности на уровне сообщения (шифрование, цифровые подписи). Полагается на безопасность транспортного уровня (HTTPS) и стандарты типа OAuth, JWT.
Кэширование Не поддерживает кэширование на уровне HTTP. Поддерживает кэширование (используя HTTP-заголовки Cache-Control, ETag), что повышает производительность.
Сложность и гибкость Более тяжелый, строгий, подходит для высоконадежных корпоративных систем (банки, телеком), где важны транзакции и безопасность. Более легкий, гибкий, де-факто стандарт для современных публичных API, мобильных и веб-приложений.

Примеры запросов для тестировщика:

REST API (GET-запрос):

GET /api/v1/users/123 HTTP/1.1
Host: api.example.com
Accept: application/json
Authorization: Bearer <token>

Ожидаемый ответ в JSON.

SOAP API (POST-запрос):

POST /ws/UserService HTTP/1.1
Host: api.example.com
Content-Type: text/xml; charset=utf-8
Content-Length: ...
SOAPAction: "getUser"

<soap:Envelope>
  <soap:Body>
    <ns2:GetUserRequest>
      <ns2:UserId>123</ns2:UserId>
    </ns2:GetUserRequest>
  </soap:Body>
</soap:Envelope>

Ожидаемый ответ в XML, обернутый в soap:Envelope.

Вывод для QA: Тестирование REST фокусируется на HTTP-методах, кодах ответа, структуре JSON, аутентификации через токены. Тестирование SOAP требует работы с XML, валидации по WSDL-схеме, проверки SOAP-заголовков и сложной безопасности.