Краткий ответ
- SOAP — протокол с формальными контрактами (WSDL), XML‑сообщениями и WS‑* расширениями.
- REST — архитектурный стиль: ресурсы, HTTP‑методы, статлес, кеширование, простые коды ответов.
- SOAP удобен для строгой интеграции и транзакций; REST — для веб‑API, скорости разработки и масштабирования.
- Форматы: SOAP обычно XML; REST чаще JSON, но поддерживает любые форматы.
- Транспорт: SOAP поддерживает разные транспорты (HTTP, SMTP и т. д.); REST опирается на HTTP‑семантику.
Полный ответ
Модель взаимодействия
- SOAP — операционно‑ориентированный: вызываете методы (операции) с чёткими контрактами.
- REST — ресурсно‑ориентированный: работаете с ресурсами через HTTP (GET/POST/PUT/DELETE).
Контракты и типизация
- SOAP использует WSDL/XSD — строгие, формальные контракты.
- REST часто описывается OpenAPI/Swagger — менее формально, но достаточно для клиентов и генерации.
Форматы и расширения
- SOAP: XML‑конверты, WS‑Security, WS‑ReliableMessaging, транзакции.
- REST: гибкие форматы (JSON, XML, HAL), HTTP‑кеширование, ETag, контент‑негациация.
Ошибки и статусы
- SOAP:
Fault в ответе, коды и детали внутри XML.
- REST: стандартные коды HTTP (
200, 201, 400, 404, 500) плюс тело ошибки.
Когда выбирать
- Выберите SOAP: строгая соответствие стандартам, транзакционность, корпоративные шины, наследие.
- Выберите REST: публичные API, микросервисы, веб‑интерфейсы, быстрота разработки.
Мини‑примеры
REST:
GET /users/1
Accept: application/json
{"id":1}
SOAP:
<soap:Envelope>
<soap:Body>
<GetUser id="1"/>
</soap:Body>
</soap:Envelope>