Передача репрезентативного состояния (REST) ​​и простой протокол доступа к объектам (SOAP)

Может ли кто-нибудь объяснить, что такое REST и что такое SOAP простым английским языком? А как работают веб-сервисы?


person Vicky    schedule 16.10.2008    source источник
comment
Вы должны прочитать этот PDF, чтобы понять REST и SOAP. веб-сервисы.   -  person Lalit Kumar Maurya    schedule 09.12.2013
comment
возможный дубликат SOAP или REST для веб-служб?   -  person nawfal    schedule 30.10.2014
comment
@PhilipCouling Я бы не назвал ни одну докторскую диссертацию простым английским ...   -  person stt106    schedule 10.02.2017
comment
вы можете использовать эти ссылки для буксировки: stackoverflow.com/questions/30581530/ И dotnettricks.com/learn/webapi/   -  person Mohamad Mirzadeh    schedule 05.08.2020


Ответы (14)


Простое объяснение SOAP и REST

SOAP - "Простой протокол доступа к объектам"

SOAP - это метод передачи сообщений или небольших объемов информации через Интернет. Сообщения SOAP форматируются в XML и обычно отправляются с использованием HTTP (протокола передачи гипертекста).


Остальное - переход в репрезентативное состояние

Rest - это простой способ отправки и получения данных между клиентом и сервером, и для него не так много определенных стандартов. Вы можете отправлять и получать данные в формате JSON, XML или даже в виде обычного текста. Это легкий вес по сравнению с SOAP.


введите описание изображения здесь

person Nakkeeran    schedule 24.01.2012
comment
SOAP - это гораздо больше, чем просто отправка данных в конверте. Однако он в основном используется для отправки BLOB на сервер, игнорируя любые функции, которые также предоставляет SOAP. Таким образом, большинство людей используют SOAP, например REST, со стандартным конвертом. (SOAP - хороший пример чрезмерной инженерии) - person elmuerte; 15.04.2013
comment
SOAP НИКОГДА не заставляет человека использовать HTTP или XML. HTTP и XML - это вещи, определенные в WS-I для взаимодействия, но можно также отправлять POJO через JMS. Дело в том, что программисту не нужно заботиться: служебная шина управляет транспортом и кодированием. - person koppor; 15.04.2013
comment
На каждую сложную проблему есть ясный, простой и неправильный ответ. --ЧАС. Л. Менкен - person jmh; 19.07.2013
comment
@Morten - Только что посетил techexplainedwithmartinlawrence.com. Сейчас это кемпинг. Почему-то я нахожу это фантастическим. +1 интернет тебе. - person JackMorrissey; 26.11.2013
comment
Он великолепно выдержан: теперь это ссылка на ITT tech. - person marky1991; 03.12.2013
comment
Пример был эпическим! - person Kaidul; 22.04.2014
comment
ПРОДОЛЖАЙ ЧИТАТЬ. Хотя этот ответ развлекательный, ответ @ Pavel ниже гораздо более полный. - person Josh Johnson; 30.07.2014
comment
Честно говоря, парень попросил ансера на простом английском. Это настолько просто, насколько это возможно. Хороший занимательный ответ. - person Dark Star1; 18.11.2015

Оба метода используются многими крупными игроками. Это вопрос предпочтений. Я предпочитаю REST, потому что его проще использовать и понимать.

Протокол простого доступа к объектам (SOAP):

  • SOAP строит протокол XML поверх HTTP или иногда TCP / IP.
  • SOAP описывает функции и типы данных.
  • SOAP является преемником XML-RPC и очень похож, но описывает стандартный способ взаимодействия.
  • Несколько языков программирования имеют встроенную поддержку SOAP, вы обычно передаете ему URL-адрес веб-службы и можете вызывать функции веб-службы без необходимости в конкретном коде.
  • Отправляемые двоичные данные должны быть сначала закодированы в такой формат, как кодировка base64.
  • Имеет несколько протоколов и относящихся к нему технологий: WSDL, XSD, SOAP, WS-Addressing.

Передача репрезентативного состояния (REST):

  • REST не обязательно должен быть поверх HTTP, но большинство моих замечаний ниже будут иметь предвзятость HTTP.
  • REST очень легкий, он говорит, подождите минутку, нам не нужна вся эта сложность, созданная SOAP.
  • Обычно использует обычные методы HTTP вместо большого формата XML, описывающего все. Например, для получения ресурса вы используете HTTP GET, чтобы разместить ресурс на сервере, вы используете HTTP PUT. Чтобы удалить ресурс на сервере, вы используете HTTP DELETE.
  • REST очень прост в том, что он использует методы HTTP GET, POST и PUT для обновления ресурсов на сервере.
  • REST обычно лучше всего использовать с ресурсо-ориентированной архитектурой (ROA). В этом способе мышления все является ресурсом, и вы будете оперировать этими ресурсами.
  • Пока ваш язык программирования имеет библиотеку HTTP, а в большинстве своем она есть, вы можете очень легко использовать протокол HTTP REST.
  • Двоичные данные или двоичные ресурсы могут быть просто доставлены по их запросу.

На Google < / а>.

Мне больше всего нравится эта. Обновление 27 ноября 2013 г .: сайт Пола Прескода, похоже, отключен, и эта статья больше не доступна, хотя копии можно найти на Wayback Machine или в виде PDF-файла на CiteSeerX.

person Brian R. Bondy    schedule 16.10.2008
comment
REST не имеет ничего общего с HTTP (он не зависит от протокола), а XML можно использовать в архитектуре RESTful. GET / POST / PUT / DELETE просто правильно использует HTTP - это необходимо для REST, но этого недостаточно. - person aehlke; 20.07.2009
comment
Как REST-клиент может узнать, какие методы и типы он может использовать? В SOAP есть WSDL, из которого многие инструменты могут генерировать классы и методы. - person jlp; 23.07.2010
comment
@jlp: разработчик клиента REST должен правильно использовать открытый интерфейс REST. - person Brian R. Bondy; 23.07.2010
comment
@jlp - методы, которые разработчик REST может использовать через HTTP, - это просто GET, PUT, POST и DELETE (и, возможно, HEAD); просто как тот. Это преимущество, а не ограничение, и одна из вещей, которые делают REST настолько мощным по сравнению с протоколом RPC, как SOAP. - person MikeSchinkel; 08.04.2011
comment
REST просто говорит «используйте единый интерфейс». Поскольку HTTP-интерфейс [GET, POST, PUT, DELETE, (UPDATE, HEAD)] стал «унифицированным интерфейсом» Интернета, REST (в Интернете) так или иначе зависит от HTTP, на мой взгляд! - person Andre Schweighofer; 22.06.2012
comment
SOAP не обязательно должен быть поверх HTTP и XML, но в основном он использует это для взаимодействия. Например, см. w3.org/TR/soapjms/#introduction-outofscope - person koppor; 15.04.2013
comment
›Как REST-клиент может узнать, какие методы и типы он может использовать? Вы должны вернуть определенную карту доступных URL-адресов действий из вашего обработчика запросов, которую клиент может использовать, чтобы посмотреть, куда идти дальше. Я не уверен, есть ли что-нибудь, кроме условных обозначений типов. - person berkus; 16.04.2013
comment
типы определяются ... заголовками типа содержимого! Они являются частью интерфейса HTTP вместе со стандартными командами. - person pjz; 15.05.2013
comment
http://zacstewart.com/2012/04/14/http-options-method.html - заголовок OPTIONS может использоваться, чтобы помочь определить, какие команды поддерживает конкретный URL-адрес ресурса. - person dmp; 17.05.2013
comment
developer.mozilla.org/en-US/docs/HTTP/ - также полезное чтение о предварительных запросах - person dmp; 17.05.2013
comment
@aehlke REST ОЧЕНЬ сильно зависит от HTTP. Сказать иначе - безумие. Подход REST четко определен в HTTP RFC (W3C TAG). Нет никакой другой спецификации этого, кроме докторской диссертации Роя Филдинга из Калифорнийского университета в Ирвине. См. en.wikipedia.org/wiki/Representational_state_transfer - person Brenden; 27.09.2013
comment
Привет @Brenden, спасибо за ваш комментарий. Однако вы отвечаете на то, что я написал 4 года назад - я согласен с его зависимостью от HTTP. - person aehlke; 30.09.2013
comment
REST работает только через HTTP и HTTPS. WS / SOAP работает через HTTP, HTTPS, SMTP, XMPP и т. Д. - person spideringweb; 27.12.2013

ОТДЫХ

Я понимаю, что основная идея REST чрезвычайно проста. Мы использовали веб-браузеры в течение многих лет и убедились, насколько легкими, гибкими, производительными и т. Д. Бывают веб-сайты. HTML-сайты используют гиперссылки и формы в качестве основных средств взаимодействия с пользователем. Их главная цель - позволить нам, клиентам, знать только те ссылки, которые мы можем использовать в текущем состоянии. А REST просто говорит: «Почему бы не использовать те же принципы для управления клиентскими компьютерами через наше приложение?» Объедините это с мощью инфраструктуры WWW, и вы получите отличный инструмент для создания отличных распределенных приложений.

Другое возможное объяснение - для людей с математическим мышлением. Каждое приложение - это, по сути, машина состояний, в которой действиями бизнес-логики являются переходы между состояниями. Идея REST состоит в том, чтобы отображать каждый переход на некоторый запрос к ресурсу и предоставлять клиентам ссылки, представляющие переходы, доступные в текущем состоянии. Таким образом, он моделирует конечный автомат с помощью представлений и ссылок. Вот почему это называется REpresentational State Transfer.

Довольно удивительно, что все ответы, похоже, сосредоточены либо на формате сообщения, либо на использовании HTTP-глаголов. На самом деле формат сообщения вообще не имеет значения, REST может использовать любой, при условии, что разработчик сервиса его задокументирует. Глаголы HTTP делают службу только службой CRUD, но еще не RESTful. Что действительно превращает службу в службу REST, так это гиперссылки (также известные как элементы управления гипермедиа), встроенные в ответы сервера вместе с данными, и их количества должно быть достаточно, чтобы любой клиент мог выбрать следующее действие из этих ссылок.

К сожалению, довольно сложно найти правильную информацию о REST в Интернете, за исключением Диссертация Роя Филдинга. (Он тот, кто получил REST). Я бы порекомендовал книгу REST на практике как он дает исчерпывающее пошаговое руководство по переходу от SOAP к REST.

SOAP

Это одна из возможных форм архитектурного стиля RPC (удаленный вызов процедур). По сути, это просто технология, которая позволяет клиентам вызывать методы сервера через границы служб (сеть, процессы и т. Д.), Как если бы они вызывали локальные методы. Конечно, на самом деле он отличается от вызова локальных методов скоростью, надежностью и так далее, но идея проста.

По сравнению

Такие детали, как транспортные протоколы, форматы сообщений, xsd, wsdl и т. Д., Не имеют значения при сравнении любой формы RPC с REST. Основное отличие состоит в том, что служба RPC заново изобретает велосипед, создавая собственный протокол приложения в RPC API с семантикой, которую знает только он. Следовательно, все клиенты должны понимать этот протокол перед использованием службы, и никакая общая инфраструктура, такая как кеши, не может быть построена из-за проприетарной семантики всех запросов. Кроме того, API RPC не предлагают, какие действия разрешены в текущем состоянии, это должно быть получено из дополнительной документации. REST, с другой стороны, подразумевает использование унифицированных интерфейсов, позволяющих различным клиентам иметь некоторое представление о семантике API, и элементов управления гипермедиа (ссылок) для выделения доступных опций в каждом состоянии. Таким образом, он позволяет кэшировать ответы для масштабирования сервисов и сделать правильное использование API легко обнаруживаемым без дополнительной документации.

В некотором смысле, SOAP (как и любой другой RPC) - это попытка туннелирования через границу службы, рассматривающая подключаемый носитель как черный ящик, способный передавать только сообщения. REST - это решение признать, что Интернет представляет собой огромную распределенную информационную систему, принять мир таким, какой он есть, и научиться управлять им, а не бороться с ним.

SOAP, кажется, отлично подходит для внутренних сетевых API, когда вы контролируете и сервер, и клиентов, и при этом взаимодействия не слишком сложны. Разработчикам это более естественно. Однако для общедоступного API, который используется многими независимыми сторонами, является сложным и большим, REST должен подходить лучше. Но это последнее сравнение очень нечеткое.

Обновить

Мой опыт неожиданно показал, что разработка REST сложнее, чем SOAP. По крайней мере, для .NET. Хотя существуют отличные фреймворки, такие как веб-API ASP.NET, нет инструментов, которые автоматически генерировали бы прокси на стороне клиента. Ничего подобного «Добавить ссылку на веб-службу» или «Добавить ссылку на службу WCF». Приходится писать весь код сериализации и запроса сервисов вручную. И, черт возьми, это много шаблонного кода. Я думаю, что для разработки REST необходимо что-то похожее на WSDL и реализацию инструментов для каждой платформы разработки. На самом деле, похоже, есть хорошая основа: WADL или WSDL 2.0, но ни один из стандартов не поддерживается.

Обновление (январь 2016 г.)

Оказывается, теперь существует широкий спектр инструментов для определения REST API. . В настоящее время я предпочитаю RAML.

Как работают веб-службы

Что ж, это слишком широкий вопрос, потому что он зависит от архитектуры и технологий, используемых в конкретной веб-службе. Но в целом веб-служба - это просто какое-то приложение в Интернете, которое может принимать запросы от клиентов и возвращать ответы. Он доступен в Интернете, поэтому является веб-службой и обычно доступен круглосуточно и без выходных, поэтому это служба. Конечно, это решает некоторые проблемы (иначе зачем кому-то использовать веб-сервис) для своих клиентов.

person Pavel Gatilov    schedule 19.09.2012
comment
Этот ответ должен быть самым популярным! У меня есть чувство юмора, но это удручает, когда комедийные ответы на StackOverflow превосходят хорошо продуманные. - person Tom W Hall; 14.01.2014
comment
@TomHall Я думаю, эта ситуация немного специфична для обсуждения REST - RPC, а не только для SO. Думаю, именно по этой причине у нас нет разумного инструментария для клиентов REST. По крайней мере, в .NET реализация клиента службы REST оказалась намного сложнее, чем создание ссылки на службу SOAP. Приходится писать прокси-классы вручную. Почему-то люди думают о REST как о том, что правил вообще не было, тогда как исходная идея, наоборот, накладывает гораздо больше ограничений на архитектуру. Я бы хотел, чтобы сообщество поняло REST - тогда мы могли бы ожидать лучшего инструментария и принятия. - person Pavel Gatilov; 23.01.2014
comment
@PavelGatilov Отличный ответ. Я читал другие объяснения REST и никогда не понимал, что движущий принцип заключается в том, что возможные переходы между состояниями являются частью ответа. Тот факт, что вы нашли время, чтобы вспомнить свой опыт и признать трудности, также имеет большую ценность для каждого из нас. - person ; 29.03.2014
comment
Отличный ответ. Интересно, сколько времени уйдет на разработку REST-I, когда он будет выглядеть все больше и больше как SOAP, как с RAML, Swagger и WADL, изнуряющими его де-факто стандартом REST. Я обнаружил, что отсутствие инструментов для REST по сравнению с SOAP является серьезной проблемой при разработке некоторых довольно чувствительных и сложных финансовых систем. И REST, и SOAP прекрасны при правильном использовании. Мой дед всегда говорил, что можно забить гвоздь отверткой, но это не так хорошо. То же самое и здесь. Правильный инструмент для менталитета работы - это не мой способ. \ - person Namphibian; 23.07.2017
comment
О, я также предпочитаю RAML, и я предпочитаю разработку сверху вниз, единственное, что меня больше всего беспокоило в REST, - это отсутствие структурированного подхода сверху вниз. Мне нравится думать, прежде чем действовать. - person Namphibian; 24.07.2017
comment
Не знаю, как долго, но в настоящее время существует несколько способов использовать Rest-Apis в качестве .Net Developer. Существует Add - ›REST API Client на том же уровне, что и Add-› Service Reference, а классическая справка по добавлению Service Reference была переработана, чтобы можно было добавлять OpenAPI и другие. Я знаю, что это старый пост, но он по-прежнему отображается поверх результатов поиска - person Paul Pascher; 10.11.2020
comment
@Pavlov - Спасибо за отличный ответ. Не могли бы вы объяснить разницу между REST API и HTTP API? - person AwsAnurag; 12.11.2020
comment
@AwsAnurag, я не уверен, что знаю, что такое HTTP API. Я подозреваю, что под этим термином разные люди подразумевают разные вещи. Поэтому я не думаю, что есть общий ответ. Я бы порекомендовал вам задать отдельный вопрос и лучше объяснить контекст, в котором вы сталкиваетесь с этим термином, - чтобы получить содержательный ответ. - person Pavel Gatilov; 12.05.2021

Это самое простое объяснение, которое вы когда-либо найдете.

Эта статья представляет собой повествование от мужа к жене, в котором муж объясняет своей жене об отдыхе в чисто непрофессиональных терминах. Должны прочитать!

как-я-объяснил-отдых-моей-жене (исходная ссылка)
как-я-объяснил-отдых- to-my-wife (рабочая ссылка 19.07.2013)

person Vinay W    schedule 13.07.2012
comment
Рассказ о полиморфизме прекрасен. - person Profpatsch; 01.03.2014

SOAP - протокол простого доступа к объектам - это протокол!

REST - REpresentational State Transfer - это архитектурный стиль!

SOAP - это протокол XML, используемый для передачи сообщений, обычно через HTTP.

REST и SOAP возможно не взаимоисключающие. Архитектура RESTful может использовать HTTP или SOAP или какой-либо другой протокол связи. REST оптимизирован для Интернета, поэтому HTTP - идеальный выбор. HTTP также является единственным протоколом, обсуждаемым в статье Роя Филдинга.

Хотя REST и SOAP явно очень разные, вопрос действительно проливает свет на тот факт, что REST и HTTP часто используются в тандеме. В первую очередь это связано с простотой HTTP и его очень естественным отображением на принципы RESTful.

Основные принципы REST

Связь клиент-сервер

Архитектуры клиент-сервер имеют очень четкое разделение задач. Все приложения, созданные в стиле RESTful, также должны быть клиент-серверными в принципе.

Без гражданства

Каждый клиентский запрос к серверу требует, чтобы его состояние было полностью представлено. Сервер должен быть в состоянии полностью понимать запрос клиента без использования какого-либо контекста сервера или состояния сеанса сервера. Отсюда следует, что все состояние должно храниться на клиенте. Мы обсудим представление без гражданства более подробно позже.

Кэшируемый

Могут использоваться ограничения кеширования, что позволяет помечать данные ответа как кэшируемые или не кэшируемые. Любые данные, помеченные как кэшируемые, могут быть повторно использованы в качестве ответа на тот же последующий запрос.

Единый интерфейс

Все компоненты должны взаимодействовать через единый унифицированный интерфейс. Поскольку все взаимодействие компонентов происходит через этот интерфейс, взаимодействие с различными службами очень простое. Интерфейс такой же! Это также означает, что изменения в реализации можно вносить изолированно. Такие изменения не повлияют на взаимодействие основных компонентов, потому что единый интерфейс всегда остается неизменным. Одним из недостатков является то, что вы застряли в интерфейсе. Если для определенной службы можно было бы оптимизировать, изменив интерфейс, вам не повезло, поскольку REST запрещает это. С другой стороны, REST оптимизирован для Интернета, отсюда невероятная популярность REST over HTTP!

Вышеупомянутые концепции представляют собой определяющие характеристики REST и отличают архитектуру REST от других архитектур, таких как веб-службы. Полезно отметить, что служба REST является веб-службой, но веб-служба не обязательно является службой REST.

Дополнительную информацию о ОТДЫХ и вышеперечисленные пункты.

person cmd    schedule 14.03.2014
comment
Просто подумайте, что было бы совершенно HATEOAS запрашивать ресурс RESTful и получать ответ, который включает ссылку на WSDL, описывающую, какие операции доступны для этого ресурса в его текущем состоянии. Хотя я предполагаю, что веб-сервис RESTful SOAP будет чем-то вроде пропуска уровня RMM 3 и перехода сразу на уровень 4. :) - person Steve; 29.05.2014
comment
Это лучший ответ для размышления о том, что это не REST и SOAP. +1 за то, что отметили, что REST - это стиль. - person ABMagil; 01.07.2014

Мне нравится ответ Брайана Р. Бонди. Я просто хотел добавить, что Википедия дает четкое описание REST. Статья отличает его от SOAP.

REST - это максимально простой обмен информацией о состоянии.

SOAP - это протокол сообщений, использующий XML.

Одна из основных причин, по которой многие люди перешли с SOAP на REST, заключается в том, что стандарты WS- * (называемые WS splat), связанные с веб-службами на основе SOAP, ЧРЕЗВЫЧАЙНО сложны. Список спецификаций см. В wikipedia. Каждая из этих спецификаций очень сложна.

РЕДАКТИРОВАТЬ: по какой-то причине ссылки отображаются неправильно. REST = http://en.wikipedia.org/wiki/REST

WS- * = http://en.wikipedia.org/wiki/WS- *

person David G    schedule 16.10.2008
comment
SOAP - это НЕ протокол. SOAP - это кодирование. SOAP используется по многим протоколам: JMS, http, ... - person koppor; 15.04.2013
comment
@koppor Вы имеете в виду, кроме того, что это означает простой протокол доступа к объектам? Кроме того, вы знаете, что такое протокол? Протокол - это, по сути, набор правил, определяющих, как должны взаимодействовать две или более вещи, а это именно то, для чего предназначен SOAP, стандартный способ взаимодействия. - person remmy; 16.04.2013
comment
@Demizey Вы имеете в виду самую последнюю версию SOAP - 1.2? w3.org/TR/soap12-part1 SOAP теперь стоит отдельно, как в на практике это НЕ используется в качестве протокола. В протоколе SOAP 1.2 аббревиатура отсутствует. (w3.org/TR/2007/REC-soap12- part0-20070427 / # L4697) Известны ли вам уровни стека веб-сервисов, как (например) описанные в архитектуре платформы книжных веб-сервисов: Soap, Wsdl, Ws-Policy, Ws-Addressing, Ws-Bpel , Ws-надежный обмен сообщениями и многое другое? Связь на транспортном уровне осуществляется через HTTP, SMTP, RMI / IIOP, JMS или другие. SOAP используется на уровне обмена сообщениями - person koppor; 16.04.2013
comment
Вдоль линии SOAP-соединения многие посредники могут находиться между ними. Это обеспечивается моделью обработки SOAP, которая различает конечный получатель SOAP и ноль или более посредников SOAP. Транспортный протокол может меняться между ними. Путь сообщения SOAP также обеспечивает прозрачную реализацию шаблонов EAI (eaipatterns.com) - person koppor; 16.04.2013
comment
Это все еще протокол обмена сообщениями. - person remmy; 16.04.2013
comment
SOAP использует информационный набор XML, который позволяет, например, использовать CSV или JSON для передачи данных. msdn.microsoft.com/en-us/library/aa302293.aspx / cxf.apache.org/docs/json-support.html. Хотя на практике он широко не используется. - person koppor; 17.04.2013
comment
Тем не менее SOAP не используется в качестве протокола в сервис-ориентированной архитектуре. Обратите внимание, что протокол доступа встречается в спецификации SOAP 1.2 только один раз. В том месте, где SOAP 1.1 появляется в разделе «Справочная информация». - person koppor; 17.11.2020

Как веб-службы SOAP, так и веб-службы REST могут использовать протокол HTTP и другие протоколы (просто упомяну, что SOAP может быть основным протоколом REST). Я буду говорить только о протоколах HTTP, связанных с SOAP и REST, потому что это наиболее частое их использование.

МЫЛО

SOAP («простой» протокол доступа к объектам) - это протокол (а стандарт W3C). Он определяет, как создавать, отправлять и обрабатывать сообщения SOAP.

  • Сообщения SOAP - это XML-документы с определенной структурой: они содержат конверт, который содержит заголовок и основной раздел. Тело содержит фактические данные, которые мы хотим отправить, в формате XML. Есть два стиля кодирования , но мы обычно выбираем буквальный, который означает, что наше приложение или его драйвер SOAP выполняет сериализацию XML и десериализацию данных.

  • Сообщения SOAP передаются как сообщения HTTP с подтипом SOAP + XML MIME. Эти HTTP-сообщения могут быть составными, поэтому при желании мы можем прикреплять файлы к SOAP-сообщениям.

  • Очевидно, что мы используем архитектуру клиент-сервер, поэтому клиенты SOAP отправляют запросы на веб-серверы SOAP, а службы отправляют ответы клиентам. Большинство веб-сервисов используют файл WSDL для описания сервиса. Файл WSDL содержит схему XML (далее XSD) данных, которые мы хотим отправить, и привязку WSDL, которая определяет, как веб-сервис привязан к протоколу HTTP. Есть два стиля привязки : RPC и документ. Благодаря привязке стиля RPC тело SOAP содержит представление вызова операции с параметрами (HTTP-запросы) или возвращаемыми значениями (HTTP-ответ). Параметры и возвращаемые значения проверяются на соответствие XSD. Благодаря привязке стиля документа тело SOAP содержит XML-документ, который проверяется на соответствие XSD. Я думаю, что стиль привязки документа лучше подходит для систем, основанных на событиях, но я никогда не использовал этот стиль привязки. Стиль привязки RPC более распространен, поэтому большинство людей используют SOAP для целей XML / RPC в распределенных приложениях. Веб-службы обычно находят друг друга, запрашивая сервер UDDI. Серверы UDDI - это реестры, в которых хранится местоположение веб-сервисов.

SOAP RPC

Итак, на мой взгляд, наиболее распространенный веб-сервис SOAP использует стиль привязки RPC и буквальный стиль кодирования и имеет следующие свойства:

  • Он сопоставляет URL-адреса с операциями.
  • Он отправляет сообщения с подтипом SOAP + XML MIME.
  • У него может быть хранилище сеансов на стороне сервера, в этом нет никаких ограничений.
  • Драйверы клиента SOAP используют WSDL-файл службы для преобразования операций RPC в методы. Приложение на стороне клиента взаимодействует с веб-службой SOAP, вызывая эти методы. Таким образом, большинство клиентов SOAP ломаются из-за изменений интерфейса (результирующих изменений имен методов и / или параметров).
  • Можно написать клиентов SOAP, которые не будут ломаться из-за изменений интерфейса, используя RDF и найдут операции по семантике, но семантический веб-сервис очень редки, и у них не обязательно есть постоянный клиент (я думаю).

ОТДЫХАТЬ

REST (репрезентативная передача состояния) - это архитектурный стиль, описанный в диссертации в Рой Филдинг. Это не касается протоколов, таких как SOAP. Он начинается с нулевого стиля архитектуры, не имеющего ограничений, и определяет ограничения архитектуры REST одно за другим. Люди используют термин RESTful для веб-сервисов, которые соответствуют всем ограничениям REST, но, по словам Роя Филдинга, не существует таких вещей, как уровни REST < / а>. Когда веб-сервис не соответствует всем ограничениям REST, это не REST веб-сервис.

Ограничения REST

  • Клиент-серверная архитектура - думаю, эта часть всем знакома. Клиенты REST обмениваются данными с веб-службами REST, веб-службы поддерживают общие данные - состояние ресурсов в дальнейшем - и обслуживают их клиентов.
  • Без сохранения состояния - часть аббревиатуры "передача состояния": REST. Клиенты поддерживают состояние клиента (состояние сеанса / приложения), поэтому службы не должны иметь хранилища сеансов. Клиенты передают соответствующую часть состояния клиента при каждом запросе службам, которые отвечают соответствующей частью состояния ресурса (поддерживаемой ими). Таким образом, запросы не имеют контекста, они всегда содержат информацию, необходимую для их обработки. Например, при базовой аутентификации HTTP имя пользователя и пароль хранятся у клиента, и он отправляет их с каждым запросом, поэтому аутентификация происходит по каждому запросу. Это сильно отличается от обычных веб-приложений, где аутентификация происходит только при входе в систему. Мы можем использовать любой механизм хранения данных на стороне клиента, такой как в памяти (javascript), файлы cookie, localStorage и так далее ... для сохранения некоторых частей состояния клиента, если мы хотим. Причина ограничения безгражданства в том, что сервер хорошо масштабируется - даже при очень высокой нагрузке (миллионы пользователей) - когда ему не нужно поддерживать сеанс каждого отдельного клиента.
  • Кэш - ответ должен содержать информацию о том, может быть кэширован клиент или нет. Это дополнительно улучшает масштабируемость.
  • Единый интерфейс

    • Identification of resources - REST resource is the same as RDF resource. According to Fielding if you can name something, then it can be a resource, for example: "the current local weather" can be a resource, or "your mobile phone" can be a resource, or "a specific web document" can be a resource. To identify a resource you can use resource identifiers: URLs and URNs (for example ISBN number by books). A single identifier should belong only to a specific resource, but a single resource can have many identifiers, which we frequently exploit for example by pagination with URLs like https://example.com/api/v1/users?offset=50&count=25. URLs have some specifications, for example URLs with the same pathes but different queries are not identical, or the path part should contain the hierarhical data of the URL and the query part should contain the non-hierarchical data. These are the basics of how to create URLs by REST. Btw. the URL structure does matter only for the service developers, a real REST client does not concern with it. Another frequently asked question is API versioning, which is an easy one, because according to Fielding the only constant thing by resource is semantics. If the semantics change, then you can add a new version number. You can use classical 3 number versioning and add only the major number to the URLs (https://example.com/api/v1/). So by backward compatible changes nothing happens, by non-backward compatible changes you will have a non-backward compatible semantics with a new API root https://example.com/api/v2/. So the old clients won't break, because they can use the https://example.com/api/v1/ with the old semantics.
    • Управление ресурсами с помощью представлений. Вы можете управлять данными, связанными с ресурсами (состоянием ресурса), отправляя предполагаемое представление ресурсов вместе с методом HTTP и идентификатором ресурса в службу REST. Например, если вы хотите переименовать пользователя после вступления в брак, вы можете отправить запрос PATCH https://example.com/api/v1/users/1 {name: "Mrs Smith"}, где {name: "Mrs Smith"} - это JSON-представление предполагаемого состояния ресурса, другими словами: новое имя. Это происходит наоборот, служба отправляет представления ресурсов клиентам, чтобы изменить их состояния. Например, если мы хотим прочитать новое имя, мы можем отправить GET https://example.com/api/v1/users/1?fields="name" поисковый запрос, который приведет к ответу 200 ok, {name: "Mrs Smith"}. Таким образом, мы можем использовать это представление для изменения состояния клиента, например, мы можем отобразить «Добро пожаловать на нашу страницу, миссис Смит!». сообщение. Ресурс может иметь множество представлений в зависимости от идентификатора ресурса (URL) или заголовка accept, который мы отправили с запросом. Например, мы можем отправить изображение миссис Смит (возможно, не обнаженной), если будет запрошено image/jpeg.
    • Самоописательные сообщения - сообщения должны содержать информацию о том, как их обрабатывать. Например, метод URI и HTTP, заголовок типа содержимого, заголовки кеша, RDF, который описывает значение данных и т. Д. Важно использовать стандартные методы. Важно знать спецификацию методов HTTP. Например, GET означает получение информации, идентифицированной URL-адресом запроса, DELETE означает запрос сервера на удаление ресурса, идентифицированного данным URL-адресом, и так далее ... коды состояния HTTP имеют спецификация, например 200 означает успех, 201 означает создание нового ресурса, 404 означает, что запрошенный ресурс не был найден на сервере и т. д. Использование существующих стандартов - важная часть REST.
    • Гипермедиа как механизм состояния приложения (далее HATEOAS). Гипермедиа - это тип мультимедиа, который может содержать гиперссылки. В Интернете мы следуем ссылкам, описываемым гипермедийным форматом (обычно HTML), для достижения цели, вместо того, чтобы вводить URL-адреса в адресную строку. REST следует той же концепции, представления, отправленные службой, могут содержать гиперссылки. Мы используем эти гиперссылки для отправки запросов в службу. В ответ мы получаем данные (и, возможно, больше ссылок), которые мы можем использовать для создания нового состояния клиента и так далее ... Вот почему гипермедиа является движком состояния приложения (состояния клиента). Вы, наверное, задаетесь вопросом, как клиенты узнают гиперссылки и переходят по ним? Для людей это довольно просто: мы читаем заголовок ссылки, возможно, заполняем поля ввода, а после этого всего лишь один щелчок. На машинах мы должны добавлять семантику к ссылкам с помощью RDF (с помощью JSON-LD с Hydra) или с помощью специальных решений для гипермедиа (например, Отношения ссылок IANA и типы MIME, специфичные для поставщика, от HAL+JSON). Существует множество машиночитаемых XML и форматы гипермедиа JSON, вот лишь краткий их список:

      Иногда сложно выбрать ...

  • Многоуровневая система - мы можем использовать несколько уровней между клиентами и службами. Никто из них не должен знать обо всех этих дополнительных слоях, только о слое рядом с ним. Эти уровни могут улучшить масштабируемость, применяя кеши и балансировку нагрузки, или они могут применять политики безопасности.
  • Код по запросу - мы можем отправить обратно код, который расширяет функциональные возможности клиента, например код javascript для браузера. Это единственное необязательное ограничение REST.

Веб-сервис REST - различия веб-сервисов SOAP RPC

Таким образом, веб-сервис REST сильно отличается от веб-сервиса SOAP (со стилем привязки RPC и буквальным стилем кодирования)

  • Он определяет единый интерфейс (помимо протокола).
  • Он сопоставляет URL-адреса с ресурсами (а не с операциями).
  • Он отправляет сообщения с любыми типами MIME (вместо SOAP + XML).
  • Он имеет связь без сохранения состояния, поэтому у него не может быть хранилища сеансов на стороне сервера. (SOAP не имеет ограничений по этому поводу)
  • Он обслуживает гипермедиа, и клиенты используют ссылки, содержащиеся в этой гипермедиа, для запроса услуги. (SOAP RPC использует привязки операций, описанные в файле WSDL)
  • Он не нарушается при изменении URL, только при изменении семантики. (Клиенты SOAP RPC без использования семантики RDF прерываются изменениями файла WSDL.)
  • Он масштабируется лучше, чем веб-сервис SOAP, из-за его поведения без сохранения состояния.

и так далее...

Веб-сервис SOAP RPC не соответствует всем ограничениям REST:

  • клиент-серверная архитектура - всегда
  • без состояния - возможно
  • кеш - возможно
  • единый интерфейс - никогда
  • многоуровневая система - никогда
  • код по запросу (необязательно) - возможно
person inf3rno    schedule 07.09.2014

Я начну со второго вопроса: Что такое веб-службы? по очевидным причинам.

Веб-службы - это, по сути, элементы логики (которые вы можете неопределенно назвать методом), которые предоставляют определенные функции или данные. Клиент, реализующий (технически говоря, потребление - это слово) просто должен знать, какие параметры (параметры) принимает метод, и тип данных. собираюсь вернуться (если вообще вернется).

Следующая Ссылка очень наглядно рассказывает о REST и SOAP.

REST против SOAP

Если вы также хотите знать, когда выбрать, что (REST или SOAP), еще одна причина пройти через это!

person Sayan    schedule 11.10.2012

И SOAP, и REST относятся к способам взаимодействия различных систем друг с другом.

REST делает это, используя методы, которые напоминают взаимодействие вашего браузера с веб-серверами: использование GET для запроса веб-страницы, POSTing в полях формы и т. Д.

SOAP предоставляет нечто подобное, но делает все через отправку блоков XML туда и обратно. Другой ключевой компонент SOAP - это WSDL, который представляет собой XML-документ, описывающий, какие функции и элементы данных поддерживаются. WSDL можно использовать для программного «обнаружения» поддерживаемых функций, а также для создания заглушек программного кода.

person pbreitenbach    schedule 04.07.2009
comment
Это не имеет ничего общего с REST, это просто «правильное использование HTTP». - person aehlke; 20.07.2009
comment
Сам HTTP - лучший пример системы RESTful. - person pbreitenbach; 21.07.2009
comment
@pbreitenbach Нет, HTTP - нет, в нем нет понятия гипермедиа. Но HTML с его гиперссылками и формами - это система RESTful. Собственно, это был прототип спецификации REST. - person Pavel Gatilov; 19.09.2012
comment
SOAP НЕ заставляет вас использовать кодировку XML. Кодирование XML используется только в том случае, если служба предлагает возможность взаимодействия. Внутри POJO можно отправлять без кодирования в XML. - person koppor; 15.04.2013

Проблема с протоколом SOAP заключается в том, что он противоречит идеалам, лежащим в основе стека HTTP. Любое промежуточное программное обеспечение должно иметь возможность работать с HTTP-запросами без понимания содержимого запроса или ответа, но, например, обычный сервер кэширования HTTP не будет работать с запросами SOAP, не зная только, какие части содержимого SOAP имеют значение для кэширования. SOAP просто использует HTTP как оболочку для своего собственного протокола связи, например прокси.

person aehlke    schedule 20.07.2009
comment
Это противоречит идеалам, и мы только что это заметили. Он существует с 1998 года или около того, и мы только начинаем понимать это. Блин, мы тупые! - person John Saunders; 24.07.2009
comment
Нет, Джон, мы, как информированное сообщество веб-разработчиков, знали все это время. Только медлительные и те, кто заканчивают школу CS без надлежащего образования, только что усвоили. - person Nicholas Shanks; 10.05.2013
comment
Мы не все веб-разработчики. Некоторые из нас просто пытаются сделать все как можно лучше и не заботятся, если мы не используем весь потенциал Интернета. - person John Saunders; 01.02.2014
comment
stupif примерно подводит итог, да. - person Rob Grant; 06.02.2014

Я думаю, что это настолько просто, насколько я могу это объяснить. Пожалуйста, любой может поправить меня или добавить к этому.

SOAP - это формат сообщений, используемый отключенными системами (например, в Интернете) для обмена информацией / данными. Это работает с XML-сообщениями, перемещающимися туда и обратно.

Веб-службы передают или получают сообщения SOAP. Они работают по-разному в зависимости от того, на каком языке написаны.

person StingyJack    schedule 16.10.2008
comment
Разберитесь с тем, что вы имеете в виду, говоря, что они работают по-разному. SOAP обычно используется для того, чтобы разные системы, написанные на разных или неизвестных технологиях, разговаривали на общем понятном языке с четко определенными параметрами. - person MyItchyChin; 15.04.2013
comment
Веб-сервисы работают по-разному в зависимости от того, на каком языке они написаны. Это неважная дополнительная деталь. - person StingyJack; 15.04.2013
comment
Хорошо, я не был уверен, что вы имели в виду, что что-то мешает совместимости. - person MyItchyChin; 16.04.2013

REST - это архитектурный стиль для разработки сетевых приложений. Идея состоит в том, что вместо использования сложных механизмов, таких как CORBA, RPC или SOAP для соединения между машинами, для выполнения вызовов между машинами используется простой HTTP.

person Hulk1991    schedule 11.06.2013

SOAP - "Простой протокол доступа к объектам"

SOAP - это небольшая передача сообщений или небольших объемов информации через Интернет. Сообщения SOAP отформатированы в XML и обычно отправляются с управлением по HTTP.

REST - «REpresentational State Transfer»

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

person Community    schedule 04.02.2015

Веб-службы на основе SOAP Короче говоря, модель служб на основе SOAP рассматривает мир как экосистему равноправных партнеров, которые не могут контролировать друг друга, но должны работать вместе, соблюдая опубликованные контракты. Это действительная модель беспорядочного реального мира, а контракты на основе метаданных образуют интерфейс службы SOAP.

мы по-прежнему можем связывать SOAP с удаленными вызовами процедур на основе XML, но технология веб-служб на основе SOAP превратилась в гибкую и мощную модель обмена сообщениями.

SOAP предполагает, что все системы независимы, и ни одна из систем не имеет сведений о внутреннем устройстве другой и внутренней функциональности. Самое большее, что могут сделать такие системы, - это посылать друг другу сообщения и надеяться, что они будут приняты во внимание. Системы публикуют контракты, которые они обязуются соблюдать, а другие системы полагаются на эти контракты при обмене сообщениями с ними.

Контракты между системами в совокупности называются метаданными и включают описания услуг, поддерживаемые шаблоны обмена сообщениями и политики, регулирующие качество обслуживания (услугу может потребоваться шифрование, надежная доставка и т. Д.). Описание услуги, в свою очередь, является подробным. спецификация данных (документов сообщений), которые будут отправлены и получены системой. Документы описываются с использованием языка описания XML, такого как определение схемы XML. Пока все системы соблюдают свои опубликованные контракты, они могут взаимодействовать, и изменения во внутреннем устройстве систем никогда не влияют на другие. Каждая система отвечает за перевод собственных внутренних реализаций в свои контракты и обратно.

REST - Перенос состояния репрезентации. Физический протокол - HTTP. По сути, REST - это все отдельные ресурсы в Интернете, которые однозначно идентифицируются по URL-адресу. Все операции, которые могут быть выполнены с этими ресурсами, можно описать ограниченным набором глаголов (глаголов «CRUD»), которые, в свою очередь, сопоставляются с глаголами HTTP.

REST гораздо менее «тяжеловесен», чем SOAP.

Работа веб-службы

person kapil das    schedule 19.10.2013
comment
-1 Почти все, что вы говорите, неверно. SOAP не содержит описания. WSDL делает. WSDL - это формат XML - он не работает ни по одному протоколу. SOAP не требует промежуточного программного обеспечения. REST - это не второе поколение веб-сервисов. WADL не является стандартом. См. en.wikipedia.org/wiki/Web_Application_Description_Language. - person John Saunders; 01.02.2014