WSDL против REST Плюсы и минусы - PullRequest
98 голосов
/ 08 мая 2009

Связанный:

Зачем использовать REST вместо Web-сервисов?

При принятии решения о том, следует ли реализовывать веб-сервис с использованием SOAP или REST (под которым я имею в виду HTTP / XML в режиме RESTful), что мне следует знать и о чем следует думать? Я предполагаю, что это не один размер подходит всем, так как мне выбрать, какой использовать.

Ответы [ 13 ]

107 голосов
/ 08 мая 2009

Два протокола имеют очень разные применения в реальном мире.

SOAP (с использованием WSDL) - это тяжеловесный стандарт XML, ориентированный на передачу документов. Преимущество этого в том, что ваши запросы и ответы могут быть очень хорошо структурированы и даже могут использовать DTD. Недостатком является то, что это XML, и он очень многословен. Тем не менее, это хорошо, если две стороны должны иметь строгий договор (скажем, для межбанковского общения). SOAP также позволяет накладывать на документы такие вещи, как WS-Security. SOAP обычно не зависит от транспорта, то есть вам не обязательно использовать HTTP.

REST очень легок и использует стандарт HTTP для своей работы. Замечательно быстро запустить и запустить полезный веб-сервис. Если вам не нужен строгий Определение API, это путь. Большинство веб-сервисов попадают в эту категорию. Вы можете создать версию своего API, чтобы обновления API не нарушали его для людей, использующих старые версии (если они указывают версию). REST по сути требует HTTP и не зависит от формата (то есть вы можете использовать XML, JSON, HTML и т. Д.).

Обычно я использую REST, потому что мне не нужны необычные функции WS- *. SOAP хорош, если вы хотите, чтобы компьютеры понимали ваш веб-сервис с использованием WSDL. Спецификации REST обычно доступны только для чтения человеком.

33 голосов
/ 13 мая 2009

Следующие ссылки предоставляют полезную информацию о WSDL против REST, включая плюсы и минусы

Пара ключевых моментов в том, что

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

2) WADL может использоваться для определения интерфейса для служб REST.

http://www.ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest
http://ajaxonomy.com/2008/xml/web-services-part-2-wsdl-and-wadl

19 голосов
/ 08 мая 2009

Рассматривая WSDL (что означает "SOAP") как "тяжелый". Тяжелые вопросы, как? Если набор инструментов делает всю «тяжелую работу» за вас, то почему это важно?

Мне еще никогда не приходилось использовать сложный REST API. Когда я это сделаю, я ожидаю, что захочу WSDL, который мои инструменты с радостью преобразуют в набор прокси-классов, поэтому я могу просто вызывать то, что кажется методами. Вместо этого я подозреваю, что для использования нетривиального API на основе REST необходимо вручную написать значительное количество «облегченного» кода.

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


Просто примечание: с этого поста у меня есть была возможность работать с умеренно сложным сервисом REST. Я действительно хотел WSDL или его эквивалент, и мне действительно пришлось писать много кода вручную. Фактически значительная часть времени разработки была потрачена на устранение дублирования кода всего кода, который вызывал различные сервисные операции «вручную».

15 голосов
/ 13 мая 2009

Это, вероятно, действительно относится к комментариям в нескольких из вышеперечисленных постов, но у меня пока нет представителя, чтобы сделать это, поэтому здесь.

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

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

Поэтому для использования в обмене структурированными данными между компьютерными системами я не уверен, что REST по своей природе лучше SOAP (или наоборот), они просто разные. Я думаю, что сравнение REST vs SOAP с динамической и статической типизацией является хорошим. Дианмические языки, как правило, сталкиваются с проблемами - это долгосрочное обслуживание и обслуживание системы (и в долгосрочной перспективе я не говорю год или два, я говорю 5 или 10). Будет интересно посмотреть, сталкивается ли REST с теми же проблемами со временем. Я склонен думать, что так будет, если бы я строил распределенную систему обработки информации, я бы склонялся к SOAP как к механизму связи (также из-за многоуровневой передачи и прикладного протокола и гибкости, которую он обеспечивает, как было упомянуто выше).

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

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

5 голосов
/ 08 мая 2009

REST не является протоколом; Это архитектурный стиль. Или парадигма, если хотите. Это означает, что SOAP определено гораздо слабее. Для базового CRUD вы можете использовать стандартные протоколы, такие как Atompub, но для большинства сервисов у вас будет больше команд, чем просто.

Как потребитель, SOAP может быть благословением или проклятием, в зависимости от языковой поддержки. Поскольку SOAP очень сильно смоделирован в строго типизированной системе, он лучше всего работает со статически типизированными языками. Для динамического языка он может легко стать грубым и лишним. Кроме того, поддержка клиентских библиотек не так хороша вне мира Java и .NET

4 голосов
/ 26 сентября 2010

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

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

Для меня REST-сервисы почти как если бы вы создали сервлет вместо SOAP-веб-сервиса. Сервлет получает данные и возвращает данные. Формат данных основан на xml. Мы также можем представить себе использование чего-то другого, кроме xml, если мы хотим. Например, теги можно использовать вместо xml, и это будет уже не REST, а что-то другое (может быть даже легче с точки зрения веса, потому что xml не является легким по своей природе). Будем ли мы называть это все еще веб-сервисом? Да, мы могли бы, но это не будет соответствовать какому-либо текущему стандарту, и это главная проблема, если мы начнем называть все веб-сервисами, но мы можем делать это так, как мы хотим, тогда мы теряем функциональную совместимость. Это означает, что формат данных, которыми обмениваются веб-службы, больше не стандартизирован. Для этого требуется, чтобы сервер и клиент согласовали формат данных, в то время как с SOAP все это уже предопределено, и сервер и клиент могут взаимодействовать друг с другом, не зная друг друга, поскольку они следуют одному и тому же стандарту.

Что не нравится людям с SOAP, так это то, что им трудно понять это, и они не могут генерировать запросы вручную. Компьютеры могут делать это очень хорошо, однако, вот где нам нужно прояснить: должны ли запросы и ответы веб-служб использоваться непосредственно конечными пользователями, или мы согласны с тем, что веб-службы подчиняются API, вызываемому компьютерными системами на основе некоторых нормализованных стандарты?

3 голосов
/ 22 апреля 2015

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

Я бы использовал REST для интернет-приложений для отображения интерфейсов (таких как twitter api), так как клиенты могут использовать javascripts или html или другие, в которых ввод текста не является строгим. Отдых более либеральный, имеет больше смысла.

Также для интернет-клиентов (всемирная паутина) проще анализировать json или xml, исходящие из интерфейса rest, нежели чисто xml, исходящий из интерфейса soap. на javascript сложно использовать прокси, а javascript не поддерживает объекты. Если вы используете REST с javascript, вы обычно просто анализируете строку json, и все готово. Интерфейсы, обращенные к Интернету, обычно очень просты (поэтому в большинстве случаев это простой анализ) и обычно не требуют согласованности, поэтому REST достаточно адекватен.

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

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

извините за мой плохой английский.

3 голосов
/ 20 мая 2011

SOAP : он также может быть транспортирован через SMTP, что означает, что мы также можем вызвать службу с использованием простого текстового формата электронной почты

Требуется дополнительная инфраструктура / механизм, который должен быть на компьютере потребителя веб-службы для преобразования сообщения SOAP в соответствующую структуру объектов на разных языках.

REST : теперь WSDL2.0 также поддерживает описание веб-службы REST

Мы можем использовать, когда вы хотите сделать свой сервис максимально легким, например, звонить с мобильных устройств, таких как сотовый телефон, кпк и т. Д ...

2 голосов
/ 08 мая 2009

В защиту REST он тесно следует принципам HTTP и адресуемости, например, операции чтения используют GET, операции обновления используют POST и т. д. Я считаю, что это гораздо более чистый подход. Книга Oreilly RESTful Web Services объясняет это гораздо лучше, чем я, если вы прочитаете это, я думаю, вы бы предпочли подход REST

1 голос
/ 15 ноября 2012

Предыдущие ответы содержат много информации, но я думаю, что есть философское различие, которое не было указано. SOAP был ответом на вопрос «как создать современного, объектно-ориентированного, независимого от платформы и протокола преемника RPC?». REST развился из вопроса: «Как нам понять, что сделало HTTP столь успешным для сети, и использовать их для распределенных вычислений?»

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

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

Тогда, на мой взгляд, если вы реализуете API "с нуля" и не очень много знаете о возможных клиентах, я бы выбрал REST, поскольку поощряемый им стиль помогает сделать интерфейсы понятными и легкими для разработки. к. Если вы много знаете о клиенте и сервере, и есть специальные инструменты SOAP, которые облегчат жизнь обоим, тогда я не буду религиозен в отношении REST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...