Каковы основные различия между REST и SOAP?

Ответ

REST (Representational State Transfer) — это архитектурный стиль, а SOAP (Simple Object Access Protocol) — строгий протокол.

Критерий REST SOAP
Основа Архитектурный стиль, набор принципов. Формальный протокол со строгой спецификацией (WSDL).
Транспорт Использует HTTP (и его методы: GET, POST и т.д.). Может работать поверх HTTP, SMTP, TCP и др.
Формат данных JSON, XML, текст — что угодно (чаще JSON). Только XML.
Стандарты Гибкость, меньше стандартов. Строгие стандарты для безопасности (WS-Security), транзакций и др.
Производительность Легковесный, быстрее из-за компактности JSON. Более тяжелый из-за XML-обёрток.
Кэширование Поддерживает кэширование HTTP. Не поддерживает на уровне протокола.

Пример REST-запроса (JSON):

GET /api/users/1 HTTP/1.1
Host: example.com
Accept: application/json

Пример SOAP-запроса (XML):

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <m:GetUserRequest xmlns:m="http://example.com/ws">
      <m:UserId>1</m:UserId>
    </m:GetUserRequest>
  </soap:Body>
</soap:Envelope>

Вывод: REST проще и популярен для публичных веб-API, SOAP используется в корпоративных системах, где критичны стандартизация и безопасность.

Ответ 18+ 🔞

Давайте разберем эту дичь, а то у меня уже глаза на лоб лезут от этих аббревиатур. REST и SOAP — это как два мужика в баре: один в шортах и майке (REST), а другой — в трёх-piece костюме с галстуком-бабочкой (SOAP). И оба пытаются заказать одно пиво, но делают это настолько по-разному, что у бармена сносит крышу.

REST — это не протокол, ёпта! Это типа философия, набор пьяных идей о том, как делать API, чтобы всем было просто. Как будто взяли HTTP, который уже 100 лет всем в рот, и сказали: «А давайте использовать его методы (GET, POST, PUT, DELETE) по прямому назначению, а не как попало!». Гениально и просто, как тапок.

SOAP — это уже не философия, а строгий протокол, документ на 500 страниц, где расписано, какую скобку в XML куда поставить. Это тот самый мужик в костюме, который для заказа пива заполняет анкету в трёх экземплярах, заверяет её у нотариуса и отправляет курьером.

Вот смотри, наглядная разница, чтобы не ебать мозг:

Критерий REST (Мужик в шортах) SOAP (Мужик в костюме)
Суть Стиль, принципы. Свобода, мать её! Протокол. Строгий, как устав в армии.
На чём ездит В основном HTTP. Может на HTTP, SMTP, TCP — хоть на осле, лишь бы XML вёз.
Что носит в кармане Чаще всего лёгкий JSON. Может и XML, но это уже как-то старомодно. Только и исключительно тяжёлый, раздутый XML.
Бюрократия Минимум. Захотел — сделал. Овердохуища стандартов: безопасность, транзакции — целый цирк.
Скорость Быстрый, лёгкий. Тяжеловесный, тормозной из-за своих XML-обёрток.
Кэш Даёт кэшировать, как обычная веб-страница. Сам по себе — нет. Надо городить огород.

Вот как REST-чувак просит данные о пользователе:

GET /api/users/1 HTTP/1.1
Host: example.com
Accept: application/json

Просто, ясно, в лоб. «Дай-ка мне пользователя №1 в формате JSON». И всё.

А вот как это делает SOAP-педант:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <m:GetUserRequest xmlns:m="http://example.com/ws">
      <m:UserId>1</m:UserId>
    </m:GetUserRequest>
  </soap:Body>
</soap:Envelope>

Сука, это же целое письмо! «Уважаемый сервер, имею честь обратиться к Вам с вежливой просьбой о предоставлении данных пользователя под номером один...». И это ещё короткий вариант!

Короче, вывод, блядь: Если тебе нужно быстро наколхозить API для мобильного приложения или фронтенда — REST твой выбор. Всё просто, как пять копеек. Если ты работаешь в банке, больнице или ещё где, где каждый чих должен быть по стандарту, с безопасностью и гарантиями доставки — тогда тебе в объятия SOAP. Готовься к тоннам XML и сложной настройке, зато всё официально и по бумажкам.

А в целом, 95% всего, что делается сейчас — это REST. SOAP — это такой каменный век, который до сих пор живёт в каких-нибудь древних корпоративных системах, от которых все давно хотят сбежать.