Может кто-нибудь объяснить, что такое REST и что такое SOAP на простом английском языке? А как работают веб-сервисы?
Может кто-нибудь объяснить, что такое REST и что такое SOAP на простом английском языке? А как работают веб-сервисы?
Ответы:
SOAP - «Простой протокол доступа к объектам»
SOAP - это метод передачи сообщений или небольших объемов информации через Интернет. Сообщения SOAP форматируются в XML и обычно отправляются с использованием HTTP (протокол передачи гипертекста).
Отдых - Представительский государственный трансферт
Отдых - это простой способ отправки и получения данных между клиентом и сервером, и он не имеет очень многих определенных стандартов. Вы можете отправлять и получать данные в формате JSON, XML или даже в виде простого текста. Это легкий вес по сравнению с SOAP.
Оба метода используются многими крупными игроками. Это вопрос предпочтений. Я предпочитаю REST, потому что его проще использовать и понимать.
Протокол простого доступа к объектам (SOAP):
Представительный государственный перевод (REST):
В REST vs SOAP идут бесконечные дебаты в Google .
Мой любимый этот . Обновление 27 ноября 2013 г .: Сайт Пола Прескода, похоже, перешел в автономный режим, и эта статья больше не доступна, хотя копии можно найти на Wayback Machine или в формате PDF на CiteSeerX .
ОСТАТОК
Я понимаю, что основная идея 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, поэтому это сервис . Конечно, это решает некоторую проблему (иначе зачем кому-то когда-либо использовать веб-сервис) для своих клиентов.
Это самое простое объяснение, которое вы когда-либо найдете.
В этой статье рассказывается о повествовании мужа и жены, где муж рассказывает своей жене о ОТДЫХ в чистом виде. Должны прочитать!
how-i-объяснил-отдыхать моей жене (оригинальная ссылка)
how-i-объяснил-отдыхать моей жене (2013-07-19 рабочая ссылка)
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 и вышеупомянутых пунктах.
Мне нравится ответ Брайана Р. Бонди. Я просто хотел добавить, что Википедия дает четкое описание 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, и веб-сервисы 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 и стиль буквального кодирования и имеет следующие свойства:
REST (передача состояния представления) - это стиль архитектуры, который описан в диссертации Роя Филдинга. Это не касается протоколов, как SOAP. Он начинается с стиля нулевой архитектуры, не имеющего ограничений, и определяет ограничения архитектуры REST один за другим. Люди используют термин RESTful для веб-сервисов, которые выполняют все ограничения REST, но, по словам Роя Филдинга, не существует таких вещей, как уровни REST . Когда веб-сервис не соответствует каждому ограничению REST, он не является веб-сервисом REST.
Единый интерфейс
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/
старую семантику.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
будет запрошено.Гипермедиа как движок состояния приложения (далее HATEOAS) - Гипермедиа - это тип мультимедиа, который может содержать гиперссылки. В Интернете мы следуем ссылкам - описанным в формате гипермедиа (обычно HTML) - чтобы достичь цели, вместо того, чтобы вводить URL-адреса в адресную строку. REST следует той же концепции, представления, отправляемые службой, могут содержать гиперссылки. Мы используем эти гиперссылки для отправки запросов в сервис. В ответ мы получаем данные (и, возможно, больше ссылок), которые мы можем использовать для создания нового состояния клиента и т. Д. Так вот почему гипермедиа является двигателем состояния приложения (состояния клиента). Вам, наверное, интересно, как клиенты распознают гиперссылки и следуют за ними? Для людей это довольно просто, мы читаем заголовок ссылки, возможно, заполняем поля ввода, и после этого всего один клик.JSON-LD с Hydra ) или с решениями, специфичными для гипермедиа (например, отношения ссылок IANA и типы MIME, специфичные для поставщика, по HAL + JSON ). Существует много машиночитаемых гипермедиа форматов XML и JSON , только их краткий список:
Иногда трудно выбрать ...
Таким образом, веб-сервис REST очень отличается от веб-сервиса SOAP (со стилем привязки RPC и стилем буквального кодирования)
и так далее...
Веб-служба SOAP RPC не удовлетворяет всем ограничениям REST:
Хорошо, я начну со второго вопроса: что такое веб-сервисы? по понятным причинам.
WebServices - это, по сути, кусочки логики (которую вы можете смутно называть методом), которая предоставляет определенные функции или данные. Реализующему клиенту (технически говоря, слово « потребляющий» ) просто необходимо знать, какой параметр (-ы) будет принимать метод и тип данных, которые он будет возвращать (если он вообще это сделает).
Следующая ссылка говорит все о REST & SOAP чрезвычайно ясным способом.
Если вы также хотите знать, когда выбирать, что (REST или SOAP), тем больше причин для этого!
SOAP и REST относятся к способам взаимодействия различных систем друг с другом.
REST делает это, используя методы, которые напоминают взаимодействие вашего браузера с веб-серверами: использование GET для запроса веб-страницы, POSTing в полях формы и т. Д.
SOAP обеспечивает нечто подобное, но делает все, отправляя блоки XML туда и обратно. Другим ключевым компонентом SOAP является WSDL, который представляет собой документ XML, описывающий, какие функции и элементы данных поддерживаются. WSDL могут использоваться для программного «обнаружения» поддерживаемых функций, а также для создания заглушек программного кода.
Я думаю, что это так просто, как я могу это объяснить. Пожалуйста, кто угодно может поправить меня или добавить к этому.
SOAP - это формат сообщений, используемый отключенными системами (например, через Интернет) для обмена информацией / данными. Это происходит с сообщениями XML, идущими туда-сюда.
Веб-службы передают или получают сообщения SOAP. Они работают по-разному в зависимости от того, на каком языке они написаны.
Проблема с SOAP заключается в том, что он противоречит идеалам, стоящим за стеком HTTP. Любое промежуточное программное обеспечение должно иметь возможность работать с HTTP-запросами без понимания содержимого запроса или ответа, но, например, обычный сервер кэширования HTTP не будет работать с SOAP-запросами, не зная только, какие части содержимого SOAP имеют значение для кэширования. SOAP просто использует HTTP в качестве оболочки для своего собственного протокола связи, например прокси.
SOAP - «Простой протокол доступа к объектам»
SOAP - это небольшая передача сообщений или небольшое количество информации через Интернет. Сообщения SOAP отформатированы в XML и обычно отправляются с контролем HTTP .
REST - «Представительный государственный трансферт»
REST - это элементарный процесс возможной случайности и получения информации между вентилятором и сервером, и он не имеет однозначно определенных стандартов. Вы можете отправлять и принимать информацию в формате JSON , XML или даже в виде простого текста. Это легкий вес по сравнению с SOAP .
Веб-сервисы на основе SOAP Вкратце, модель Сервисов на основе SOAP рассматривает мир как экосистему равноправных партнеров, которые не могут контролировать друг друга, но должны работать вместе, выполняя опубликованные контракты. Это действительная модель беспорядочного реального мира, и контракты на основе метаданных формируют SOAP Service Interface.
мы все еще можем связать SOAP с удаленными вызовами процедур на основе XML, но технология веб-служб на основе SOAP превратилась в гибкую и мощную модель обмена сообщениями.
SOAP предполагает, что все системы являются независимыми, и ни одна система не знает внутренних и других функций. Большинство таких систем может отправлять сообщения друг другу и надеяться, что они будут приняты. Системы публикуют контракты, которые они обязуются соблюдать, и другие системы полагаются на эти контракты для обмена сообщениями с ними.
Контракты между системами в совокупности называются метаданными и включают описания услуг, поддерживаемые шаблоны обмена сообщениями и политики, определяющие качество обслуживания (услуга может нуждаться в шифровании, надежной доставке и т. Д.) Описание услуги, в свою очередь, является подробным указание данных (документов сообщения), которые будут отправлены и получены системой. Документы описываются с использованием языка описания XML, такого как определение схемы XML. Пока все системы выполняют свои опубликованные контракты, они могут взаимодействовать, и изменения во внутренних системах никогда не влияют ни на какие другие. Каждая система отвечает за перевод своих внутренних реализаций в свои контракты и из них.
ОТДЫХ - REpresentational State Transfer. Физический протокол HTTP. По сути, REST - это все отдельные ресурсы в сети, которые уникально идентифицируются по URL. Все операции, которые могут быть выполнены с этими ресурсами, могут быть описаны ограниченным набором глаголов (глаголы «CRUD»), которые в свою очередь отображаются на глаголы HTTP.
REST гораздо менее «тяжелый», чем SOAP.