Ответ
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-заголовков и сложной безопасности.