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

724

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

Vicky
источник
5
Вы должны прочитать этот PDF для понимания веб-сервисов REST и SOAP.
Лалит Кумар Маурья
2
Вы можете проверить этот блог javapapers.com/web-service/rest-vs-soap
spideringweb
1
Могу ли я порекомендовать прочитать диссертацию Филдинга на тему REST: ics.uci.edu/~fielding/pubs/dis
Филип Коулинг,
возможный дубликат SOAP или REST для веб-служб?
Nawfal
1
@PhilipCouling Я бы не назвал ни одну докторскую диссертацию простым английским ...
stt106

Ответы:

1590

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

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

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


Отдых - Представительский государственный трансферт

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


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

Nakkeeran
источник
73
SOAP - это гораздо больше, чем отправка данных в конверте. Тем не менее, он в основном используется для отправки BLOB на сервер, игнорируя все функции, которые также предоставляет SOAP. В общем, большинство людей используют SOAP, как REST со стандартным конвертом. (SOAP - хороший пример чрезмерного проектирования)
elmuerte
15
SOAP не заставляет использовать HTTP или XML. HTTP и XML - это вещи, определенные в WS-I для взаимодействия, но также можно отправлять POJO через JMS. Дело в том, что программисту не нужно заботиться: служебная шина управляет транспортом и кодированием.
Коппор
56
Для каждой сложной проблемы есть ответ, который является ясным, простым и неправильным. - МХЛ Менкен
JMH
5
Пример был эпическим!
Кайдул
18
ПРОДОЛЖАЙ ЧИТАТЬ. Пока этот ответ интересный, ответ Павла ниже гораздо более полный.
Джош Джонсон
323

Оба метода используются многими крупными игроками. Это вопрос предпочтений. Я предпочитаю 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, и большинство из них имеет, вы можете очень легко использовать протокол REST HTTP.
  • Двоичные данные или двоичные ресурсы могут быть просто доставлены по их запросу.

В REST vs SOAP идут бесконечные дебаты в Google .

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

Брайан Р. Бонди
источник
28
REST не имеет ничего общего с HTTP (он не зависит от протокола), и XML прекрасно подходит для использования в архитектуре RESTful. GET / POST / PUT / DELETE просто правильно использует HTTP - необходимо для REST, но недостаточно.
aehlke
10
Как клиент REST может узнать, какие методы и типы он может использовать? В SOAP есть WSDL, из которого многие инструменты могут генерировать классы и методы.
jlp
3
@jlp: Разработчик клиента REST должен правильно использовать предоставляемый интерфейс REST.
Брайан Р. Бонди
14
REST просто говорит «использовать единый интерфейс». Поскольку HTTP-интерфейс [GET, POST, PUT, DELETE, (UPDATE, HEAD)] стал «унифицированным интерфейсом» сети, REST (в сети) как-то зависит от HTTP, по моему мнению!
Андре
3
@aehlke REST ОЧЕНЬ ОЧЕНЬ зависит от HTTP. Сказать иначе - безумие. Подход REST четко определен с помощью HTTP RFC (TAG W3C). Нет другой спецификации этого, кроме докторской диссертации Роя Филдинга из Калифорнийского университета в Ирвине. См .: en.wikipedia.org/wiki/Representational_state_transfer
Бренден,
260

ОСТАТОК

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

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

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

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

МЫЛО

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

В сравнении

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

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

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

Обновить

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

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

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

Как работают веб-сервисы

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

Павел Гатилов
источник
45
Это должен быть самый решительный ответ на сегодняшний день! У меня есть чувство юмора, но это удручает, когда комедийные ответы на StackOverflow превосходят хорошо продуманные.
Том У Холл,
3
@ TomHall Я думаю, что эта ситуация немного специфична для обсуждения REST - RPC, а не только для SO. Я полагаю, что по этой причине у нас нет разумных инструментов для клиентов REST. По крайней мере, в .NET реализация клиента службы REST оказалась намного сложнее, чем создание ссылки на службу SOAP. Нужно писать прокси-классы вручную. По какой-то причине люди думают о REST, как будто вообще не было никаких правил, в то время как оригинальная идея наоборот накладывает гораздо больше ограничений на архитектуру. Я хотел бы, чтобы сообщество поняло REST - тогда мы могли бы ожидать лучшего инструментария и принятия.
Павел Гатилов
2
@PavelGatilov Этот ответ отличный. Я читал другие объяснения REST и никогда не «понимал», что движущий принцип состоит в том, что возможные переходы состояний являются частью ответа. Тот факт, что вы нашли время подумать о своем опыте и признать трудности, также имеет большое значение для каждого из нас.
Отличный ответ. Интересно, сколько времени потребуется для развития REST-I сейчас, когда он начинает все больше и больше походить на SOAP с RAML, Swagger и WADL, выдвигая его в качестве фактического стандарта REST. Я обнаружил, что отсутствие инструментов для REST по сравнению с SOAP является серьезной проблемой при разработке некоторых довольно чувствительных и сложных финансовых систем. И REST, и SOAP потрясающие при правильном использовании. Мой дед всегда говорил, что вы можете использовать отвертку, чтобы забить гвоздь, но это не сработает. То же самое относится и здесь. Правильный инструмент для работы, менталитет не мой путь, это единственный путь. \
Namphibian
О, я также предпочитаю RAML и предпочитаю разработку сверху вниз, единственное, что меня больше всего беспокоит в REST, это отсутствие структурированного подхода сверху вниз. Мне нравится думать, прежде чем действовать.
Намфиб
40

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

В этой статье рассказывается о повествовании мужа и жены, где муж рассказывает своей жене о ОТДЫХ в чистом виде. Должны прочитать!

how-i-объяснил-отдыхать моей жене (оригинальная ссылка)
how-i-объяснил-отдыхать моей жене (2013-07-19 рабочая ссылка)

Vinay W
источник
2
Часть о полиморфизме прекрасна.
Profpatsch
38

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

ОТДЫХ - REpresentational State Transfer - это архитектурный стиль !

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

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

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

Основные принципы ОТДЫХА

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

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

Stateless

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

Cacheable

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

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

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

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

См. Этот пост в блоге о принципах дизайна REST для получения более подробной информации о REST и вышеупомянутых пунктах.

CMD
источник
Просто думая, что было бы совершенно HATEOAS запросить ресурс RESTful и получить ответ, который включает ссылку на WSDL, описывающую, какие операции доступны для этого ресурса в его текущем состоянии. Хотя я предполагаю, что веб-сервис RESTful SOAP был бы немного похож на пропуск 3-го уровня RMM и переход на 4-й уровень. :)
Стив
3
Это лучший ответ для отражения того, что он не связан ни с REST, ни с SOAP. +1 за то, что заметил, что REST - это стиль .
ABMagil
12

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

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

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

Одна из основных причин того, что многие люди перешли с SOAP на REST, заключается в том, что стандарты WS- * (называемые WS splat), связанные с веб-сервисами на основе SOAP, чрезвычайно сложны. Смотрите википедию для списка спецификаций. Каждая из этих спецификаций очень сложна.

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

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

Дэвид Г
источник
SOAP НЕ является протоколом. SOAP - это кодировка. SOAP используется во многих протоколах: JMS, http, ...
koppor
16
@koppor Ты имеешь в виду, кроме того, что он означает «Простой протокол доступа к объектам»? Кроме того, вы знаете, что такое протокол? Протокол - это, по сути, набор правил взаимодействия двух или более объектов, что и является для SOAP стандартным способом взаимодействия.
Кириас
4
@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-Reliable Messaging и многое другое "? Связь на транспортном уровне осуществляется через HTTP, SMTP, RMI / IIOP, JMS или другие. SOAP используется на уровне обмена сообщениями
koppor
По линии SOAP-соединения многие посредники могут находиться между ними. Это обеспечивается моделью обработки SOAP, которая различает конечного получателя SOAP и ноль или более посредников SOAP. Транспортный протокол может измениться между ними. Путь сообщения SOAP также обеспечивает прозрачную реализацию шаблонов EAI ( eaipatterns.com )
koppor
12
Это все еще протокол обмена сообщениями.
Кириас
7

И веб-сервисы 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), куки, localStorage и т. Д. сохранить некоторые части состояния клиента, если мы хотим. Причина ограничения безгражданства в том, что сервер хорошо масштабируется - даже при очень высокой нагрузке (миллионы пользователей) - когда ему не нужно поддерживать сеанс каждого отдельного клиента.
  • Кэш - ответ должен содержать информацию о том, может ли клиент быть кэширован или нет. Это улучшает масштабируемость в дальнейшем.
  • Единый интерфейс

    • Идентификация ресурсов - ресурс REST такой же, как ресурс RDF . Согласно Филдингу, если вы можете назвать что-то, то это может быть ресурс, например: «текущая местная погода» может быть ресурсом, или «ваш мобильный телефон» может быть ресурсом, или «конкретный веб-документ» может быть ресурс. Для идентификации ресурса вы можете использовать идентификаторы ресурса: URL и URN (например, номер ISBN по книгам ). Один идентификатор должен принадлежать только определенному ресурсу, но у одного ресурса может быть много идентификаторов, которые мы часто используем, например, путем разбивки на страницы с такими URL-адресами https://example.com/api/v1/users?offset=50&count=25. URL имеют некоторые характеристикиНапример, URL-адреса с одинаковыми путями, но разными запросами не идентичны, или часть пути должна содержать иерархические данные URL, а часть запроса должна содержать неиерархические данные. Это основы того, как создавать URL-адреса с помощью REST. Btw. структура URL имеет значение только для разработчиков сервиса, реальный клиент REST не имеет к этому отношения. Другой часто задаваемый вопрос - версионирование API, которое является простым, потому что согласно Филдингу единственная постоянная вещь по ресурсу - это семантика. Если семантика изменится, вы можете добавить новый номер версии. Вы можете использовать классическую версию с 3 номерами и добавлять только основные номера в URL (https://example.com/api/v1/). Таким образом, с изменениями с обратной совместимостью ничего не происходит, с изменениями без обратной совместимости вы будете иметь семантику с обратной совместимостью с новым корнем API https://example.com/api/v2/. Таким образом, старые клиенты не сломаются, потому что они могут использовать https://example.com/api/v1/старую семантику.
    • Управление ресурсами с помощью представлений. Вы можете манипулировать данными, относящимися к ресурсам (состоянием ресурсов), отправляя предполагаемое представление ресурсов - вместе с методом 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 следует той же концепции, представления, отправляемые службой, могут содержать гиперссылки. Мы используем эти гиперссылки для отправки запросов в сервис. В ответ мы получаем данные (и, возможно, больше ссылок), которые мы можем использовать для создания нового состояния клиента и т. Д. Так вот почему гипермедиа является двигателем состояния приложения (состояния клиента). Вам, наверное, интересно, как клиенты распознают гиперссылки и следуют за ними? Для людей это довольно просто, мы читаем заголовок ссылки, возможно, заполняем поля ввода, и после этого всего один клик.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:

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

Хорошо, я начну со второго вопроса: что такое веб-сервисы? по понятным причинам.

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

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

ОТДЫХ против МЫЛА

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

Саянский
источник
5

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

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

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

pbreitenbach
источник
1
Это не имеет ничего общего с REST, это просто «правильное использование HTTP»
aehlke
Сам HTTP является лучшим примером системы RESTful.
pbreitenbach
1
@pbreitenbach Нет, HTTP это не так, он в основном не имеет понятия о гипермедиа. Но HTML с его гиперссылками и формами - это система RESTful. Фактически, это был прототип REST-спецификации
Павел Гатилов
SOAP НЕ заставляет вас использовать кодировку XML. Кодировка XML используется только в том случае, если сервис предлагает взаимодействие. Внутренне POJO могут отправляться без кодирования в XML.
Коппор
2

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

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

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

StingyJack
источник
Уточните, что вы подразумеваете под «они работают по-другому». SOAP, как правило, используется для того, чтобы разные системы, написанные с использованием разных или неизвестных технологий, могли общаться, используя общий понятный язык с четко определенными параметрами.
MyItchyChin
Веб-службы работают по-разному, в зависимости от того, на каком языке они написаны. Просто неважные дополнительные детали.
StingyJack
Хорошо, я не был уверен, что вы намекаете, что что-то препятствует взаимодействию.
MyItchyChin
2

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

aehlke
источник
2
Это против идеалов, и мы только что это заметили. Это было где-то с 1998 года или около того, и мы только подхватили его. Блин, мы тупые!
Джон Сондерс
Нет, Джон, «мы», как информированное сообщество веб-разработчиков, знали все это время. Только медленные и те, которые выходят из школы CS без надлежащего образования, только что потерпели неудачу.
Николас Шенкс
«Мы» не все веб-разработчики. Некоторые из нас просто пытаются добиться наилучшего результата, и нам все равно , «не используем ли мы весь потенциал Интернета».
Джон Сондерс
"Глупо" просто подводит итог, да.
Роб Грант
2

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

Hulk1991
источник
1

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

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

REST - «Представительный государственный трансферт»

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


источник
-4

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

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

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

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

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

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

Работа веб-сервиса

Капил дас
источник
2
-1 Почти все, что ты говоришь, неверно. SOAP не содержит описания. WSDL делает. WSDL - это формат XML - он не «работает» ни на одном протоколе. SOAP не требует промежуточного программного обеспечения. REST - это не «второе поколение веб-сервисов». WADL не является стандартом. См. En.wikipedia.org/wiki/Web_Application_Description_Language .
Джон Сондерс