Часто в вакансиях можно обнаружить требования по «знанию REST API и SOAP API», иногда – с вариациями вроде «RESTful API». Видимо, из-за этого у многих начинающих и возникает вопрос: что это вообще за технологии и какая между этими API разница. Проблема кроется в том, что за простым словом «API» скрываются целые архитектуры, и с учетом этого сталкивать лбами REST vs SOAP не очень корректно, так как эти технологии достаточно сильно отличаются. Ниже – о том, чем именно они отличаются и в чем их все же можно сравнивать.
Пойдем в историческом порядке – начнем с SOAP. SOAP – это Web API, то есть принцип построения веб-интерфейсов, с помощью которых разные приложения могут общаться друг с другом. Самая распространенная версия – SOAP 1.2. SOAP – это протокол обмена данными, и эта формулировка будет важна в дальнейшем. Что она значит?
Протокол – это четкий формат обмена информацией, которому должны все участники этого обмена. Если вы хотите послать на какой-то сервис запрос – вам нужно изучить документацию по SOAP и изучить документацию по взаимодействию с сервером, из них вы узнаете, что и в каком формате нужно передать серверу, чтобы получить интересующий вас ответ. SOAP полностью построен на формате XML – то есть все запрос должны переводиться в этот формат, все ответы тоже приходят в этом формате. В SOAP и запросы, и ответы засовываются в XML-пакеты, пакет – это законченная и полностью самостоятельная единица информации. Вот как выглядит XML-пакет авторизации (запрос на сервер):
Если авторизация прошла успешно – сервер тоже присылает XML-пакет с подтверждением:
Поскольку в SOAP данные передаются изолированными XML-пакетами, SOAP API вообще никак не зависит от протокола передачи данных – пакет можно передать по протоколу HTTP, FTP, TCP/UDP и так далее, передавать можно хоть по протоколам канального уровня, если вам это зачем-то пригодится. Кроме того, SOAP поддерживает возможность практически бесконечного расширения действий, которые может совершить сервер – главное, чтобы веб-сервис понял, что от него требуется, а добавить еще одну строчку в XML – вообще не проблема.
SOAP как Web API вырос из протокола передачи данных внутри крупных компаний, и когда интернет стал разрастаться, в SOAP обнаружилась большая проблема: слишком много лишних данных. Пакеты по протоколу HTTP сами по себе содержат мета-данные, и приходилось в HTTP-пакет с метаданными помещать SOAP-пакет со своими метаданными – получалось очень тяжело и медленно. Для того, чтобы обойти проблему, разработчики придумывали свои протоколы (некоторые из них живы до сих пор) – а потом, абсолютно внезапно, появился REST.
Если SOAP был протоколом передачи данных, строго определяющим формат передаваемых данных, то REST пошел дальше – он предложил архитектуру веб-приложений, то есть SOAP отвечает на вопрос: «В каком формате передать данные?», а REST отвечает на вопрос: «Как создать приложение, которые будет наиболее эффективно передавать данные?». Да, в REST тоже есть правила форматирования данных, кроме того – есть и правила, ограничивающие запрашиваемые действия (стандартные в HTTP)/ответы сервера (коды). Но все это касается только одного принципа (единообразие интерфейса), а всего принципов у REST – 6:
Если сервис соблюдает 5 основных принципов, его называют RESTful-сервисом.
Сравнивать SOAP vs REST – некорректно, поскольку SOAP – протокол обмена информацией, а REST – архитектура для построения API. Единственное сходство между ними – в том, что оба подхода как-то стандартизируют формат передачи данных, но даже здесь они сильно отличаются:
Ну и, собственно, на этом сравнение заканчивается, потому что мы не можем спросить, например: «Где больше раскрыта тема кэширования – в REST или в SOAP?», потому что нет такой темы в SOAP.
Единственное, о чем еще в рамках «противопоставления» можно поговорить – где лучше использовать REST/SOAP? В целом все просто: если у вас нет четкой уверенности, что вам нужен SOAP – используйте REST, потому что последний даст вам и скорость, и готовый архитектурный подход (в случае с SOAP архитектуру будете продумывать сами). SOAP может понадобиться в следующих ситуациях:
REST и SOAP – не единственные Web API, которые существуют на этой планете. В основном другие API требуются тем разработчикам, для которых REST оказывается либо слишком медленными, либо слишком ненадежным. API – много, но для примера выделим 3 других популярных: