SOAP или REST для веб-сервисов? [закрыто]

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

Я был бы особенно признателен за информацию об этих концепциях и их отношении к PHP-вселенной, а также о современном высоком уровне. веб-приложения.

380
задан 07.06.2019, 20:30

12 ответов

Я создал один из первых серверов SOAP, включая генерацию кода и поколение WSDL, от исходной спецификации, поскольку это разрабатывалось, когда я работал в Hewlett-Packard. Я НЕ рекомендую использовать SOAP для чего-либо.

акроним "SOAP" является ложью. Это не Просто, это не Объектно-ориентировано, это не определяет правил Доступа. Это - возможно, Протокол. Это - худшая спецификация Don Box когда-либо, и это - настоящий подвиг, как он - человек, который совершил "COM".

нет ничего полезного в SOAP, который не может быть сделан с REST для транспорта, и JSON, XML или даже простым текстом для представления данных. Для транспортной безопасности можно использовать https. Для аутентификации, основного автора Для сессий, существуют cookie. ОСТАЛЬНЫЕ присваивают версию, будет более простым, более ясным, работать быстрее и использовать меньше пропускной способности.

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

561
ответ дан 04.10.2019, 13:45
  • 1
    Вы забыли упоминать, что запись сервисной обертки для веб-сервиса REST возьмет 100000x дольше, чем мгновенная генерация классов от WSDL веб-сервиса SOAP. REST IMO хорош для получения блоба данных что Вы don' t должны работать с. Но если Вы хотите получить объект, SOAP является путем, более быстрым и легче реализовать. См. мое сообщение здесь для большего количества информации: stackoverflow.com/questions/3285704/… – Josh M. 05.11.2010, 06:32
  • 2
    Если Вы намереваетесь генерировать обертку, рассмотрите использование декодера JSON вместо этого. Позвольте SOAP спокойно отдохнуть. – Ivo Danihelka 19.11.2010, 02:18
  • 3
    Неутешительно видеть, что этот ответ получает столько upvotes и щедрость. Это не полезный ответ. " нет ничего полезного в SOAP этого can' t быть сделанным с REST..". таким образом, этот парень исследовал каждую возможную проблему, которую кому-то, возможно, придется решить и может безопасно сказать, что Ваш веб-сервис не должен использовать SOAP (WS -*, кажется, подразумевается здесь)? Да право. Я устал от слушания сильных криков REST > WS -* или SOAP.. это едва сопоставимо. – insipid 07.10.2012, 05:59
  • 4
    Читатели должны отметить, что опыт, что OP имел запись сервера для первой версии SOAP, имеет мало влияния на современные версии SOAP и его связанных протоколов. – John Saunders 19.12.2012, 09:52

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

2
ответ дан 04.10.2019, 13:45
  • 1
    Можно сохранить конструктора путем добавления constructor: MyClass или в более общем плане constructor: Myclass.prototype.constructor в новом объекте свойства. – HBP 19.08.2013, 09:25

Слушайте этот подкаст для обнаружения. Если Вы хотите знать ответ без слушания, то хорошо, его REST. Но я действительно рекомендую слушать.

6
ответ дан 04.10.2019, 13:45
  • 1
    cHao - Я don' t понимают много Вашей точки. Если это weren' t для it' s огромные дефекты безопасности, MSIE 5 мог обработать новые системы управления сеансами с рассмотрением it' s минимальный размер cookie ~4k. Вставьте поддержку SSL (начиная с MSIE2), и it' s уже отмечает более безопасный, чем некоторые современные системы. I' m, не говоря MSIE немного лучше, наоборот, если MSIE делает это, все остальные должны делать его лучше. – Christian 12.07.2010, 00:30

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

мне любопытно относительно того, какие другие думают.

6
ответ дан 04.10.2019, 13:45
  • 1
    Точка, всегда будет кто-то не желающий или неспособный придерживаться любой политики безопасности, которую Вы имеете в распоряжении. Вы или угождаете им и делаете Ваш сайт более популярным, но менее безопасный, или Вы сохраняете свои политики и говорите отставшим быть изогнутыми. (Я wasn' t говорящий об определенном браузере для точно, что причина: люди слишком срываются в специфических особенностях. Теперь выход, заботящийся о IE по сравнению с Firefox по сравнению с Lynx по сравнению с Wget, по сравнению со что.) Проблемой является SERVER' s управление сессиями, НЕ CLIENT' S. Клиенты shouldn' t даже ОБРАБОТАТЬ сессии, кроме передачи сервера cookie. – cHao 12.07.2010, 00:34

Это детально.

, Если у Вас должен быть другой системный интерфейс с Вашими сервисами, чем много клиентов, будет более довольно SOAP, из-за слоев "проверки", которую Вы имеете с контрактами, WSDL и стандартом SOAP.

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

9
ответ дан 04.10.2019, 13:45
  • 1
    @cHao - Я wouldn' t рассчитывают на это, но это все еще остается долговременной оценкой. – Christian 12.07.2010, 00:23

Я уверен, что Don Box создал SOAP, поскольку шутка - 'смотрит, Вы можете методы RPC вызова по сети' и сегодня стонете, когда он понимает то, что чрезмерно увеличенный в размерах кошмар веб-стандартов это стало:-)

, REST хорош, прост, реализован везде (так больше 'стандарт', чем стандарты) быстрый и легкий. Используйте REST.

16
ответ дан 04.10.2019, 13:45
  • 1
    Рекурсия childs componets является хорошим tatic. Но я don' t хотят добавить слушателя каждого управления. К событиям от нажатия мыши Приложение. Работа AddMessageFilter, но я думаю, что Ваша идея хороша к другим типам событий. Спасибо за справку! – Gustavo Cardoso 30.04.2009, 15:38
  • 2
    " I' m верный Don Box создал SOAP как шутку - ' посмотрите можно назвать методы RPC по web' " вероятно, верный. +1 – Mukus 28.03.2014, 14:42

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

REST играет хорошо с веб-страницами AJAX'y. Если Вы сохраняете свои запросы простыми, можно сделать служебные вызовы непосредственно из JavaScript, и это входит очень удобное. Попытайтесь избегать наличия любых пространств имен в Вашем ответе XML, я видел дроссель браузеров на тех. Так, xsi:type, вероятно, не собирается работать на Вас, никакие чрезмерно сложные XML-схемы.

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

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

Мой процесс принятия решений следующие: если я хочу, чтобы мой сервис был легко оснащен потребителями, и сообщения, которые я пишу, будут medium-to-small-ish (10 МБ или меньше), и я не возражаю записывать некоторые дополнительные циклы ЦП на сервере, я иду с SOAP. Если я должен служить Ajax на веб-браузерах, или мне нужна вещь передать потоком, или мои ответы являются гигантскими, я иду REST.

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

40
ответ дан 04.10.2019, 13:45
  • 1
    Спасибо за справку! Все работает правильно. Я использовал Приложение. AddMessageFilter с suscess. Я сцепляю события от нажатия мыши и создаю C# MouseEventHandler для диспетчеризации события на уровне WinForm к другим средствам управления. – Gustavo Cardoso 30.04.2009, 15:34

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

10
ответ дан 04.10.2019, 13:45
  • 1
    Я пытался переопределить WinProc, но законченный той же проблемой: щелчки мышью были только выгодой, когда я нажал непосредственно по форме. Если я нажал на дочерний элемент управления, Winproc не назвали. – Gustavo Cardoso 30.04.2009, 15:36

Я рекомендовал бы пойти с REST сначала - если Вы используете взгляд Java на JAX-RS и Джерси реализация. REST намного более прост и легок к interop на многих языках.

, Поскольку другие сказали в этом потоке, проблемой с SOAP является своя сложность, когда другой WS -* спецификации входят и существуют бесчисленные проблемы interop, если Вы отклоняетесь в неправильные части WSDL, XSDs, SOAP, Обращение WS и т.д.

лучший способ судить остальных, v дебаты SOAP являются взглядом на Интернет - в значительной степени, все крупные игроки в интернет-пространстве, Google, амазонке, eBay, Твиттер и др. - склонны использовать и предпочитать УСПОКОИТЕЛЬНЫЕ API по SOAP.

другой хороший подход к движению с REST состоит в том, что можно снова использовать много кода и infratructure между веб-приложением и фронтэндом REST. например, рендеринг HTML по сравнению с XML по сравнению с JSON Ваших ресурсов обычно довольно легок с платформами как JAX-RS и неявные представления - плюс его легкое работать с УСПОКОИТЕЛЬНЫМИ ресурсами с помощью веб-браузера

17
ответ дан 04.10.2019, 13:45
  • 1
    +1 ре " лучший способ судить..." хорошим примером является Google' s API JavaScript. Первоначально в SOAP, затем в ответ на жалобы разработчика, переоборудованные в REST. Вскоре после того, как это стало API Google № 1 (нет. из запросов) - удивил это, это бьет API карт, но по-видимому это сделало (по словам ведущего разработчика на API JS). – doug 24.07.2010, 14:40

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

REST более прост, может быть легче поддержать, в результате лежит в основе веб-архитектуры, допускает лучшую видимость протокола и, как доказывали, масштабировался в размере самого WWW. Некоторые платформы там помогают Вам создать сервисы REST, как Ruby on Rails, и некоторые даже помогают Вам с пишущими клиентами, как Услуги передачи данных ADO.NET. Но по большей части, поддержке инструмента недостает.

44
ответ дан 04.10.2019, 13:45
  • 1
    REST легче поддержать - все, что необходимо сделать, контролировать документацию API для любых мелких изменений в структуре остальных методы или структура данных, которые они возвращают. Если Вы видите изменение, необходимо будет просто вручную внести изменение в рукописном коде, который анализирует ответ метода. С SOAP у Вас есть нагрузка щелчка правой кнопкой по Вашей ссылке и выбора " update" и затем фиксация нескольких ошибок компиляции. (Сарказм включен бесплатно.) – Josh M. 05.11.2010, 06:36
  • 2
    Ohh, уверенные, существуют пути, I' ll сообщают, как только я дома. прямо сейчас, I' ve должен работать. – Aman Alam 21.02.2011, 15:18
  • 3
    @JoshM: Если you' ve рукописный код для парсинга ответа сгенерированного ответа, основанного на мягкой и гибкой спецификации, you' ре, не используя REST; you' ve hardcoded к дереву ресурса. It' s то же как кодирующий к c:\windows\temp или что бы то ни было, в противоположность запросам для НАДЛЕЖАЩЕГО местоположения для использования. Поскольку это работает некоторое время, doesn' t делают его правильным поступком, ни он хорошая практика кодирования. – Paul Sonier 11.06.2011, 08:01
  • 4
    @PaulSonier: what' s правильный способ проанализировать ответ от того, что такое часто мягкая и гибкая спецификация? Я получаю это hardcoded хрупкий код isn' t большой, но I' m поиск совета или примеров на клиентском конце УСПОКОИТЕЛЬНЫХ API и подъема, короткого до сих пор. Я думаю, что это - то, что Josh достигает - SOAP нужна тонна шаблонного кода, но что Вы получаете для этого, видимый и осуществимый контракт на формате документа и безопасности типов; УСПОКОИТЕЛЬНЫЕ API не учитывают контракт и шаблон и часто выглядят достаточно простыми это doesn' t вопрос, но... как делают Вас не hardcode к дереву ресурса? – metamatt 17.11.2011, 14:51
  • 5
    (Я получаю аргумент HATEOAS, но использующий, скажем, martinfowler.com/articles/richardsonMaturityModel.html как пример - there' s все еще изрядное количество необходимой семантической интерпретации, после парсинга XML, прежде чем Вы доберетесь до элементов ссылки, которые являются " гиперсреда controls".) – metamatt 17.11.2011, 14:55
  • 6
    Если Вы роете в расширенные функции SOAP (весь WS -* материал), you' ll быстро обнаруживают это инструменты don' t поддерживают их так хорошо (включая EAI и продукты ESB) и это, платформы могут вести себя по-другому зависящий (как Метро по сравнению с C#) для тонкости, такой как " " и null. И сгенерированный шаблонный код обычно только для работы вокруг причины нагрузки самим SOAP. – rds 23.12.2012, 10:24

REST является архитектурой, SOAP является протоколом.

Это - первая проблема.

можно отправить конверты SOAP в приложении REST.

сам SOAP является на самом деле довольно основным и простым, это - WSS -* стандарты сверху его, которые делают его очень сложным.

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

, Если Вашими потребителями, более вероятно, будут УСТЬЯ РЕКИ или клиенты Ajax, Вы, вероятно, захотите что-то более простое, чем SOAP, и более собственный клиенту (особенно JSON).

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

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

198
ответ дан 04.10.2019, 13:45
  • 1
    В этом случае я думаю, что мы говорим приблизительно две архитектуры по протоколу. REST является действительно архитектурой, тогда как SOAP пытается определить новый протокол на существующем протоколе, сверху которого необходимо применить архитектуру RPC. Глупый пенсионер. –  11.06.2010, 21:05

REST является существенно различной парадигмой от SOAP. Хорошее чтение на REST может быть найдено здесь: , Как я объяснил REST своей жене .

, Если у Вас нет времени для чтения его, вот короткая версия: REST является определенным сдвигом парадигмы путем фокусировки на "существительных" и ограничения количества "глаголов", можно обратиться к тем существительным. Единственные позволенные глаголы, "получают", "помещают", "отправляют" и "удаляют". Это отличается от SOAP, где много различных глаголов могут быть применены ко многим различным существительным (т.е. многим различным функциям).

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

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

102
ответ дан 04.10.2019, 13:45
  • 1
    Единственные позволенные глаголы являются " get" " put" и " delete"? что относительно POST и ОПЦИЙ? – Andrew Swan 19.10.2009, 17:28
  • 2
    Извините, я забыл упоминать POST. ОПЦИИ (и ГОЛОВА) не считают частью остальных спецификацией, как бы то ни было. – toluju 21.10.2009, 05:45
  • 3
    @toluju I wasn' t зная, что REST имел спецификацию. Это - архитектурный стиль и хотя это могло бы быть верно, что ОПЦИИ редко используются я don' t думают, что можно сказать то же о ГОЛОВЕ. – blank 23.10.2009, 04:57
  • 4
    ГОЛОВА, ОПЦИИ и ТРАССИРОВКА являются всеми методами, которые справляются о метаинформации сервера, а не о содержании в самом URL. Как таковой они имеют крайнее применение для приложений стиля REST. Я признаю ошибку в столь же далекой спецификации. Основная спецификация значения для REST является самой спецификацией HTTP. – toluju 24.10.2009, 13:03
  • 5
    Как примечание, " Отдых обычно... отсылает к... запросам тот результат в JSON" - не корректно. Возвращенный тип среды не ограничивается или принял значение по умолчанию к любому формату. Действительно, многие сервисы REST возвращают application/xml, видео или другие типы среды. По моему опыту, например, в корпорациях, основанные на REST веб-сервисы возвращают XML в пользу JSON. В любом случае это до сервиса, что возвращается, и клиент может участвовать в этом согласовании типа контента через HTTP " Accept" заголовок. – Darrell Teague 29.05.2013, 06:32
  • 6
    +1 для включения информации о добавлении строки к AssemblyInfo.cs. Иначе log4net настройки в файле конфигурации приложения будут просто проигнорированы. – Mun 21.10.2019, 09:10

Теги

Похожие вопросы