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?

SOAPREST
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 следует использовать в следующих ситуациях:

  1. Высокая надежность и безопасность - если клиенту требуется гарантированный уровень надежности и безопасности при асинхронной обработке данных. В SOAP встроено множество полезных функций, особенно когда речь идет о безопасности.
  2. Строго формализованный интерфейс взаимодействия - если клиент и сервер договариваются о формате обмена, то SOAP предоставляет жесткие спецификации для поддержки этого формата.
  3. Операции с состоянием - если приложение требует, чтобы состояние сохранялось от одного запроса к другому, то стандарт SOAP предоставляет структуру WS* для поддержки этих требований.

Когда использовать REST?

Службы REST следует использовать в следующих ситуациях:

  1. Ограниченные ресурсы и пропускная способность - поскольку запросы REST легче и потребляют меньше пропускной способности, REST следует использовать в ситуациях, когда пропускная способность сети ограничена (например, в мобильных приложениях).
  2. Stateless - если вам не нужно сохранять состояние информации от одного запроса к другому, вам следует использовать REST.
  3. Кэширование - если вы можете кэшировать запросы API, REST - лучшее решение. Кэширование может помочь минимизировать количество обращений к серверу и повысить производительность сервера.
  4. Сокращение времени разработки - разработка REST-сервисов намного проще, чем SOAP.

Сравнительная таблица SOAP и REST

SOAPREST
ДизайнСтандартизированный протокол с заранее определенными правилами.Архитектурный стиль с четкими ориентирами и рекомендациями.
ПодходФункционально-ориентированные (данные доступны как услуга, например: "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 лучшим выбором, например, для корпоративных приложений.

Написать комментарий