SOAP vs REST

Содержание
SOAP и REST - это две распространенные парадигмы API для взаимодействия с веб-службами. SOAP был первоначально разработан компанией Microsoft и существует уже долгое время. REST был создан в ответ на недостатки SOAP и пытается решить проблемы SOAP и обеспечить более простой способ доступа к веб-службам.
Основные различия между SOAP и REST?
- SOAP - это коммуникационный протокол, в то время как REST - это просто архитектурный шаблон
- SOAP требует большей пропускной способности для использования, в то время как REST больше ориентирован на данные и требует меньшей пропускной способности
- SOAP работает только с XML, в то время как REST может работать с обычным текстом, XML, HTML и JSON
- SOAP лучше подходит для интеграции со средствами безопасности корпоративного уровня
- SOAP имеет встроенное соответствие ACID, которое защищает целостность базы данных, а REST не соответствует ACID
- Вызовы на основе SOAP не могут быть кэшированы, а вызовы REST могут быть кэшированы
Что такое API?
API расшифровывается как Application Programming Interface и представляет собой способ программного взаимодействия с другими компонентами программного обеспечения. API позволяет двум приложениям взаимодействовать друг с другом.
Например, каждый раз, когда вы отправляете мгновенное сообщение по телефону или проверяете погоду в браузере, вы используете API. Существует несколько моделей для разработки API, но две наиболее распространенные - SOAP и REST.
Что такое SOAP?
SOAP - это простой протокол доступа к объектам, разработанный компанией Microsoft для замены старых технологий, которые плохо работают в Интернете, таких как DCOM (Distributed Component Object Model) и Shared CORBA (Object Request Broker Architecture). DCOM и CORBA не работают, потому что они полагаются на двоичные сообщения, в то время как SOAP использует XML и лучше работает через Интернет.
Основная идея SOAP заключалась в том, чтобы программы, созданные на разных платформах и языках программирования, могли легко обмениваться данными. SOAP опирается исключительно на XML и, вместе со схемами, определяет очень сильно типизированную структуру обмена сообщениями.
Каждая операция, предоставляемая сервисом, определена в явном виде вместе с XML-структурой запроса и ответа для этой операции.
В SOAP каждый входной параметр определяется аналогичным образом и привязывается к типу: например, целое число, строка или другие сложные объекты. Все это зашифровано в WSDL - описаниях веб-служб (или определениях в более поздних версиях). WSDL часто называют контрактом между поставщиком и потребителем услуги. С точки зрения программирования, WSDL можно представить как подпись метода для веб-сервиса.
Пример сообщения SOAP, содержащего блоки заголовка и тела SOAP.
<?xml version='1.0' Encoding='UTF-8' ?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header> <m:reservation xmlns:m="https://website.com/reservation" env:role="http://www.w3.org/2003/05/soap-envelope/role/next"> <m:reference>uuid:11111-22222-333333-444444-555555</m:reference> <m:dateAndTime>2020-01-01</m:dateAndTime> </m:reservation> <n:passenger xmlns:n="https://website.com/employees" env:role="http://www.w3.org/2003/05/soap-envelope/role/next"> <n:name>John Smith</n:name> </n:passenger> </env:Header> <env:Body> <p:itinerary xmlns:p="https://website.com/reservation/travel"> <p:departure> <p:departing>New York</p:departing> <p:arriving>Los Angeles</p:arriving> <p:departureDate>2020-01-01</p:departureDate> </p:departure> </p:itinerary> </env:Body> </env:Envelope>
Пример полного запроса SOAP:
POST /Reservation HTTP/1.1 Host: website.com Content-Type: text/xml; charset = utf-8 Content-Length: 874 <?xml version='1.0' Encoding='UTF-8' ?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header> <m:reservation xmlns:m="https://website.com/reservation" env:role="http://www.w3.org/2003/05/soap-envelope/role/next"> <m:reference>uuid:11111-22222-333333-444444-555555</m:reference> <m:dateAndTime>2020-01-01</m:dateAndTime> </m:reservation> <n:passenger xmlns:n="https://website.com/employees" env:role="http://www.w3.org/2003/05/soap-envelope/role/next"> <n:name>John Smith</n:name> </n:passenger> </env:Header> <env:Body> <p:itinerary xmlns:p="https://website.com/reservation/travel"> <p:departure> <p:departing>New York</p:departing> <p:arriving>Los Angeles</p:arriving> <p:departureDate>2020-01-01</p:departureDate> </p:departure> </p:itinerary> </env:Body> </env:Envelope>
Что такое REST?
REST (Representative State Transfer) был разработан в ответ на сложность SOAP для работы с такими компонентами, как медиа-составляющие, файлы или даже для взаимодействия с аппаратными устройствами.
Любая веб-служба, определенная в терминах принципов REST, может быть названа RestFul веб-службой. REST - это стиль архитектуры программного обеспечения, основанный на протоколе связи без статических данных и представляющий собой более легкую альтернативу SOAP. Многие разработчики считают SOAP громоздким и сложным в использовании.
Вместо использования XML для отправки запроса, REST (обычно) полагается на целевой URL. Конечно, в некоторых ситуациях приходится предоставлять больше информации, но большинство веб-сервисов, использующих REST, полагаются исключительно на использование подхода URL. Служба Restful использует обычные HTTP-методы GET, POST, PUT и DELETE для выполнения своих задач.
В отличие от SOAP, REST не требует использования XML для ответа. Вы можете найти веб-службы на базе REST, которые выводят CSV (Command Separated Values), JSON (JavaScript Object Notation) и RSS (Really Simple Syndication). Однако наиболее широко используется формат JSON, поскольку он легче и может использоваться в браузерах. REST ориентирован на данные, в отличие от SOAP, который ориентирован на функции.
POST /echo/post/json HTTP/1.1 Host: reqbin.com Accept: application/json Content-Type: application/json Content-Length: 81 { "Id": 78912, "Customer": "Jason Sweet", "Quantity": 1, "Price": 18.00 }
В чём преимущества SOAP?
SOAP обеспечивает следующие преимущества перед REST:
- SOAP не зависит от языка, платформы и транспорта (REST требует HTTP).
- SOAP хорошо работает в распределенных корпоративных средах (REST предполагает прямую связь "точка-точка")
- SOAP строго стандартизирован
- SOAP обеспечивает значительную расширяемость до сборки в виде стандартов WS*
- SOAP имеет встроенную обработку ошибок
В чём преимущества REST?
REST обеспечивает следующие преимущества перед SOAP:
- REST требует меньшей кривой обучения
- REST ориентирован на данные и эффективен
- REST - это быстро (не требуется длительная обработка)
- REST ближе к другим веб-технологиям по философии проектирования
- REST легко читается людьми и компьютерами
В чем разница между SOAP и REST API?
SOAP | REST |
SOAP - это коммуникационный протокол, который имеет свою собственную спецификацию и включает в себя WSDL-файл, содержащий необходимую информацию о том, что делает веб-сервис, в дополнение к его местоположению. | REST - это архитектурный шаблон. Веб-служба может считаться RESTful, только если она отвечает следующим требованиям: 1. Архитектура клиент/сервер 2. Нестационарный 3. Кэшируемый |
SOAP не может использовать REST, потому что SOAP - это протокол, а REST - архитектурный паттерн. | REST может использовать SOAP, потому что это просто архитектурный паттерн и может использовать любой протокол, включая SOAP. |
SOAP раскрывает свою функциональность клиентским приложениям через интерфейсы сервисов. Файл WSDL предоставляет клиенту всю информацию о том, какие услуги предлагает веб-служба. | REST полагается на локаторы Uniform Service для доступа к компонентам. Служба REST не предоставляет никакой информации о том, какие услуги предлагает веб-служба. Для этого необходимо использовать документацию REST API. |
Для использования SOAP требуется большая пропускная способность. Сообщения SOAP содержат много вспомогательной информации, объем передачи данных с использованием SOAP обычно значителен. | REST не требует большой пропускной способности при отправке запросов на сервер, поскольку сообщения REST в основном представляют собой JSON-сообщения и не содержат лишней информации. |
SOAP может работать только с форматом XML, и все данные отправляются и принимаются только в формате XML. | Клиенты и серверы REST в основном используют JSON, но REST поддерживает множество других форматов, включая обычный текст, HTML, XML и CSV. |
SOAP имеет встроенную логику обработки ошибок success/retry и обеспечивает сквозную надежность даже через посредников SOAP. | REST не имеет встроенной обработки ошибок и может устранять сбои связи только путем повторных попыток. |
Вызовы на основе SOAP не могут быть кэшированы. | Вызовы на основе REST можно кэшировать. |
SOAP поддерживает SSL и WS-Security и лучше подходит для интеграции со средствами безопасности корпоративного уровня. | REST поддерживает SSL для обеспечения сквозной безопасности. |
В чем сходство между SOAP и REST?
И SOAP, и REST опираются на четко определенные правила, которые все согласились соблюдать в интересах обмена информацией. И несмотря на глобальные различия, у них есть и общие черты:
- И SOAP, и REST обеспечивают связь между двумя приложениями посредством данных, которые могут быть прочитаны как человеком, так и компьютером.
- Оба обычно используют протокол и методы HTTP (такие как GET, POST, DELETE), но могут использовать и другие сетевые протоколы.
- Оба могут использовать формат XML в запросах и ответах.
Когда использовать SOAP?
SOAP следует использовать в следующих ситуациях:
- Высокая надежность и безопасность - если клиенту требуется гарантированный уровень надежности и безопасности при асинхронной обработке данных. В SOAP встроено множество полезных функций, особенно когда речь идет о безопасности.
- Строго формализованный интерфейс взаимодействия - если клиент и сервер договариваются о формате обмена, то SOAP предоставляет жесткие спецификации для поддержки этого формата.
- Операции с состоянием - если приложение требует, чтобы состояние сохранялось от одного запроса к другому, то стандарт SOAP предоставляет структуру WS* для поддержки этих требований.
Когда использовать REST?
Службы REST следует использовать в следующих ситуациях:
- Ограниченные ресурсы и пропускная способность - поскольку запросы REST легче и потребляют меньше пропускной способности, REST следует использовать в ситуациях, когда пропускная способность сети ограничена (например, в мобильных приложениях).
- Stateless - если вам не нужно сохранять состояние информации от одного запроса к другому, вам следует использовать REST.
- Кэширование - если вы можете кэшировать запросы API, REST - лучшее решение. Кэширование может помочь минимизировать количество обращений к серверу и повысить производительность сервера.
- Сокращение времени разработки - разработка REST-сервисов намного проще, чем SOAP.
Сравнительная таблица SOAP и REST
SOAP | REST | |
Дизайн | Стандартизированный протокол с заранее определенными правилами. | Архитектурный стиль с четкими ориентирами и рекомендациями. |
Подход | Функционально-ориентированные (данные доступны как услуга, например: "getPrice") | Управляемые данными (данные доступны в виде ресурсов, например, "/get/price"). |
Состояние | По умолчанию не имеет состояния, но может сделать его с сохранением состояния. | Stateless (без сессий на стороне сервера). |
Кэширование | Вызовы SOAP не могут кэшироваться. | Вызовы REST могут быть кэшированы. |
Безопасность | Поддерживает SSL и WS-Security. Встроенное соответствие стандарту ACID. | Поддерживает HTTPS и SSL. |
Производительность | Требует большей пропускной способности и вычислительной мощности. | Требуется меньшая пропускная способность и меньшая вычислительная мощность. |
Формат сообщения | Только XML. | TXT, XML, JSON, CSV и другие. |
Протоколы передачи | HTTP, Web Sockets и другие. | Только HTTP |
Рекомендуется для | Приложения корпоративного уровня, финансовые и платежные услуги. | Публичные API для веб- и мобильных сервисов. |
Преимущества | Высокая безопасность, надежность, стандартизация. | Легкость, лучшая производительность, гибкость. |
Недостатки | Меньшая производительность, большая сложность. | Меньше безопасности. |
Заключение
И REST, и SOAP имеют свои преимущества и недостатки.Выбор в пользу SOAP или REST зависит от требований проекта, квалификации вашей команды разработчиков, используемого языка программирования и требований к стоимости владения.
Оба подхода имеют свои преимущества и недостатки. В то время как REST является наиболее популярным и с его помощью можно сократить время разработки, SOAP лучше подходит, когда требуется повышенная надежность и безопасность.
Разработчики обычно выбирают REST, когда нет необходимости в повышенной надежности и безопасности, и нет других дополнительных требований, которые делают SOAP лучшим выбором, например, для корпоративных приложений.