REST vs SOAP
В этой небольшой заметке рассмотрим ряд основных различий между SOAP и REST.
Говоря по правде, сравнивать REST и SOAP не совсем корректно, ведь, по большему счету, это как сравнивать яблоки с апельсинами. Все дело в том, что SOAP представляет собой протокол, который основан на XML, в то время как REST — это, по сути, архитектурный подход.
Таким образом, REST и SOAP в некотором смысле несопоставимы. Тем не менее некоторые аспекты рассмотреть все же можно.
Реализация
Хороший пример для RESTful -- JSON через HTTP, пример для SOAP -- это XML поверх SOAP через HTTP, при этом следует добавить, что на верхнем уровне SOAP ограничивает структуры сообщений.
Специфика
Специфика SOAP заключается в формате обмена данными. В данном случае это всегда SOAP-XML, представляющий собой XML, который включает в себя: — конверт (Envelope) – корневой элемент, определяющий сообщение и пространство имен, которое используется в документе; — заголовок (Header) – включает в себя атрибуты сообщения, к примеру, информацию о безопасности либо информацию о сетевой маршрутизации, — тело (Body) – включает в себя сообщение, которым обмениваются приложения, — Fault – это необязательный элемент, предоставляющий информацию об ошибках, произошедших при обработке сообщений.
Как запрос, так и ответ должны соответствовать SOAP-структуре.
Перейдем к специфике REST. В большинстве случаев при реализации этого архитектурного стиля в качестве транспортного протокола используют HTTP, то есть можно говорить об эффективном использовании функций, предоставляемых этим протоколом — методов и заголовков запросов, заголовков ответов и так далее.
Формат обмена сообщениями
В SOAP для запросов и ответов используется формат SOAP XML.
Что касается REST, то тут фиксированного формата не существует. На практике можно обмениваться сообщениями на основе JSON, XML либо любого другого формата, который вам удобен. Но вообще одним из самых популярных форматов сегодня является JSON.
Сервисные определения
Протокол SOAP применяет WSDL (Web Services Description Language) — это основанный на XML язык, который служит для описания web-сервисов и доступа к ним.
А вот REST стандартного языка определения сервиса не имеет. Одним из первых предложенных стандартов был WADL, но он не очень-то популярен. На практике широко используются Swagger либо Open API.
Транспорт
В SOAP нет ограничений на тип используемого транспортного протокола, то есть существует возможность применять тот же HTTP или, например, MQ.
Что касается REST, то обычно этот стиль связывают с эффективным использованием транспортного протокола HTTP. Однако специалисты утверждают, что никто не мешает реализовать REST-архитектуру и с применением других протоколов.
Простота реализации
В настоящее время считается, что RESTFful веб-сервисы реализовать проще. Во-первых, в REST часто используют JSON, а его легче обрабатывать и анализировать. Во-вторых, REST не требует наличия сервисных определений (Service Definitions) для предоставления web-службы.
В случае с SOAP ситуация несколько сложнее: надо определить свой сервис с применением WSDL, плюс, ко всему прочему, возникают существенные накладные расходы в процессе обработки/анализа сообщений SOAP-XML.
По материалам статьи "REST v SOAP - A few perspectives".