Плюси і мінуси WSDL проти REST


108

Пов'язані:

Чому можна використовувати REST замість веб-сервісів?

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


На це питання також можуть бути корисні відповіді: stackoverflow.com/questions/90451/…
Роб Груська

2
Це залежить від контексту, і SOAP, і REST мають своє місце. Зазвичай ви не бачите привіт-SOAP та lo-SOAP, як чуєте про REST. Причина в тому, що там є специфікація, або ви її дотримуєтеся, або не дотримуєтесь. SOAP вважає його застосованим у центрах обробки даних, де потрібна сумісність між різними серверами, які не можуть безпосередньо спілкуватися, а продуктивність є важливим фактором. У таких випадках приємно робити SOAP через TCP. SOAP був розроблений як незалежність від транспорту, тому по суті ви повинні мати можливість використовувати його через TCP, MSMQ тощо. REST має справу лише з HTTP.
Шрікар Додді

CodeToGlory має рацію. Власне, WCF Майкрософт був розроблений спеціально для того, щоб зробити SOAP над будь-яким транспортним середовищем таким же простим, як значення у конфігураційному файлі.
Тревіс Гесэман

Відповіді:


111

Два протоколи мають дуже різне використання в реальному світі.

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, як правило, читаються лише для людей.


5
@JohnSaunders Чому існують конверти, якщо немає документа? Я не думаю, що я сказав, що DTD є унікальною характеристикою SOAP. Я не дуже в настрої сьогодні обговорювати, вибачте. Можливо, перечитайте коментарі до своєї відповіді на це питання майже 3 роки тому. Я не думаю, що великоваговик - це не обов'язково погана річ, іноді ти хочеш Холіфілда, але в інших випадках Паккьяо виконує роботу. Не сприймайте це неправильно, і нічого особисто :)
Kekoa

1
SOAP працює з інтерфейсами або в стилі документа, або в стилі RPC. Крім того, SOAP взагалі не використовує DTD, наскільки мені відомо. І ви ніколи не оцінювали «важку вагу». Вибачте, що я щойно побачив вашу відповідь, або я спростував три роки тому.
Джон Сондерс

2
@JohnSaunders Немає проблем, приємного дня!
Кекоа

2
REST, як SOAP, не залежить від протоколу. Він не покладається на HTTP, хоча він найчастіше використовується таким чином. Я думаю, що важливим фактом, який часто залишається незгаданим, є те, що SOAP проти REST порівнює стандартний протокол w3c зі слабко визначеною прагматичною архітектурною схемою.
joelmdev

1
@ jm2 Я ніколи не бачив відпочинку, використовуваного поза HTTP. Мені було б цікаво подивитися, як дієслова GET / POST / PUT / DELETE / тощо. робота в режимі спокою "протокол" без HTTP. Посилання?
Кекоа

33

Наступні посилання надають корисну інформацію про 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 -вадла


3
REST був розроблений для розподілених систем: "[...] архітектурний стиль передачі репрезентативних держав (REST) ​​для розподілених систем гіпермедіа [...]" (Fielding, 2000) ics.uci.edu/~fielding/pubs/dissertation/ rest_arch_style.htm
Томас Ейзінгер

19

Що стосується WSDL (що означає "SOAP") як "важкої ваги". Важкі питання як? Якщо набір інструментів робить для вас весь «важкий підйом», то чому це важливо?

Мені ніколи ще не потрібно було споживати складний API REST. Коли я це роблю, я сподіваюся, що побажаю WSDL, який мої інструменти з радістю перетворять у набір класів проксі, тому я можу просто зателефонувати, що здається методами. Натомість я підозрюю, що для того, щоб споживати нетривіальний API на основі REST, потрібно буде вручну написати значну кількість "легкого" коду.

Навіть коли це все зроблено, ви все одно будете перекладені читатими людьми документацію в код, з усім супровідним ризиком того, що люди прочитають її неправильно. Оскільки WSDL - це машиночитаний опис послуги, набагато складніше "прочитати його неправильно".


Тільки примітка: так як цей пост, я вже мав можливість працювати з помірно ускладненою служби REST. Я дійсно хотів би отримати WSDL або його еквівалент, і мені справді довелося писати багато коду вручну. Насправді значна частина часу на розробку була витрачена на видалення дублювання коду всього коду, який називав різні сервісні операції "вручну".


Я думаю, що "легка вага" - це ефективність, скажімо, наприклад, для завантаження запропонованих пошукових термінів під час введення. Я хлопець .NET, і я дуже ціную деякі функції IDE, схожі на те, що ви говорите (автоматично генеровані класи проксі), але для REST ws. Така річ існує?
Ромія

1
Приклад, який ви пропонуєте, - це проста послуга REST, і, ймовірно, важко "неправильно читати". Крім того, кожен, хто відчуває, що SOAP працює гірше, повинен підкріплювати це цифрами. У мене не склалося враження, що про це говорять шанувальники REST, коли вони говорять про "важку вагу".
Джон Сондерс

3
Важка вага не є зневажливим, я просто мав на увазі, що SOAP дає вам багато, і приносить трохи ціну на продуктивність та складність. У боксі важкий вага, швидше за все, може завдати більше шкоди, ніж у легкій вазі, але легкий вага може виконувати цю роботу в той час, коли важку вагу не потрібно. Крім того, додаткові «речі», такі як WS-Security або транзакції, вносять додаткову складність, якої REST просто не має.
Кекоа

3
"Назад, що йде з цифрами" - класичний вогник. Я шанувальник обох, але жоден не є єдиним розміром.
Кекоа

4
@kekoav: Я відповідав Роміасу, кажучи, що думав, що "легка вага" стосується продуктивності. Я відчував, що це має підтримати кожен, хто так почуває. Крім того, знову ж таки, я б не припускав кращої продуктивності, не вимірюючи її, і я б не вимірював, наприклад, транзакції проти жодних транзакцій або WS-Security проти HTTPS. Це не полум'я, щоб запропонувати перевірити стан.
Джон Сондерс

15

Це, мабуть, справді належить до коментарів у декількох вищезазначених публікаціях, але я ще не маю відповіді, щоб це зробити, тому ось що.

Я думаю, що цікаво, що багато плюсів і мінусів, які часто згадуються для SOAP і REST, мають (IMO) дуже мало спільного з фактичними значеннями або обмеженнями двох технологій. Напевно, найбільш процитованим профі для REST є те, що він "легкий" або має тенденцію бути більш "читабельним для людини". На одному рівні це, безумовно, вірно, REST має менший бар'єр для входу - там потрібна структура менш, ніж SOAP (хоча я згоден з тими, хто сказав, що хороший інструмент є значною мірою відповіддю тут - занадто погано багато інструментів SOAP досить жахливо).

Однак, окрім початкової вхідної вартості, я думаю, що враження від REST походить від поєднання форми URL-адреси запиту та складності даних, якими обмінюється більшість служб REST. REST прагне заохочувати більш прості, зрозуміліші для людини URL-адреси запитів, а також дані є більш зрозумілими. Наскільки вони притаманні REST і в якій мірі вони є лише випадковими. Простіша структура URL - це прямий результат архітектури - але вона може бути однаково добре застосована до служб на основі SOAP. Чим більше засвоюваних даних швидше буде наслідком відсутності будь-якої визначеної структури. Це означає, що вам краще зберегти прості формати даних, або ви будете мати велику роботу. Отже, тут додаткова структура SOAP,

Тож для використання в обміні структурованими даними між комп'ютерними системами я не впевнений, що REST за своєю суттю кращий, ніж SOAP (або без візи), вони просто різні. Я думаю, що порівняння вище REST проти SOAP до динамічного проти статичного набору тексту є гарним. Там, де діаманські мови, як правило, стикаються з неприємностями, - це тривале обслуговування та обслуговування системи (і довгостроково я не говорю рік чи 2, я говорю 5 чи 10). Буде цікаво побачити, чи REST стикається з тими ж проблемами з часом. Я схильний вважати, що це станеться так, якби я будував розподілену систему обробки інформації, я би тяжів до SOAP як механізму зв'язку (також через шарування протоколу передачі та застосування та гнучкість, яку він надає, як було зазначено вище).

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

У будь-якому разі, вони є обома життєздатними технологіями і залежно від того, які компроміси ви хочете зробити для даної програми, вони можуть служити вам добре (або неякісно).


5

REST - це не протокол; Це архітектурний стиль. Або парадигма, якщо хочете. Це означає, що це значно слабкіше визначено SOAP. Для базового CRUD ви можете спиратися на стандартні протоколи, такі як Atompub, але для більшості сервісів у вас буде більше команд, ніж просто у цьому.

Як споживач, SOAP може бути благом або прокляттям, залежно від мовної підтримки. Оскільки SOAP дуже моделюється на строго набраній системі, він найкраще працює зі статично набраними мовами. Для динамічної мови вона може легко стати суворою і зайвою. Крім того, підтримка клієнтської бібліотеки не така вже й поза світом Java та .NET


Чи є якась поважна причина поганої підтримки інструментів поза Java та .NET? Щось відсутнє у файлі WSDL, що заважало б, скажімо, не створити проксі-сервера Ruby?
Джон Сондерс

Технічно ні, але хтось повинен це реалізувати, і Ні Сонце (вибачте, Oracle), ні Microsoft не будуть платити кому-небудь за впровадження бібліотеки клієнтів в Ruby. Протокол SOAP досить складний. Додайте до цього той факт, що вся складність полягає в системі типів, яка є просто сміттям з динамічної мовної точки зору. Тож можна сказати, що SOAP примушує системи статичного типу на динамічні мови. REST - це щось навпаки.
troelskn

4

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

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

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

Що людям не подобається в SOAP, це те, що їм важко зрозуміти це, і вони не можуть генерувати запити вручну. Комп'ютери можуть це зробити дуже добре, але тому нам потрібно зрозуміти: чи запити веб-служб та відповіді повинні використовуватися безпосередньо кінцевими користувачами чи ми погоджуємось, що веб-сервіси знаходяться під API, що викликається комп'ютерними системами на основі деяких нормованих стандарти?


1
Це вже не було б REST?
Стівен Шоу

3

Мило : Його також можна транспортувати через SMTP, це означає, що ми можемо викликати послугу, використовуючи також електронний формат простого тексту

Потрібна додаткова рамка / механізм, який повинен бути у споживчій машині веб-сервісу для перетворення SOAP-повідомлення у відповідну структуру об'єктів на різних мовах.

ВІДПОВІДНИЙ : Тепер WSDL2.0 підтримує опис веб-сервісу REST

Ми можемо використовувати, коли ви хочете зробити вашу послугу легкою, наприклад дзвінки з мобільних пристроїв, таких як мобільний телефон, pda тощо.


Дякуємо, що ви довели це, @Jenith. Здається, ніхто не хоче цього доводити. WSDL має відношення до опису. REST - парадигма. Для інших: див. Вступ у ibm.com/developerworks/webservices/library/ws-restwsdl . Таким чином, оригінальне запитання (з огляду на дату вступу) показує, що назва питання обрана погано (ймовірно, на увазі WSDL 1.0).
Сонні

3

для корпоративних систем, в яких ваша система обмежена у ваших корпораціях, простіше користуватися милом, оскільки ви майже контролюєте клієнтів. це простіше, оскільки існує різноманітний інструмент, який створює класи (проксі) і виглядає так, як ви робите звичайний OOP, який відповідає вашому середовищу java або .net (в якому використовується більшість корпорацій).

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

Також для клієнтів, що стоять перед Інтернетом (всесвітня мережа Інтернет), простіше розібрати json або xml, що виходять з інтерфейсу спокою, а не чисто xml, що надходить із мильного інтерфейсу. важко використовувати проксі-сервери на javascript і JavaScript, природно, не підтримує об'єкти. Якщо ви використовуєте REST з JavaScript, ви просто розбираєте рядок json і ви виходите. Інтерфейси, що стоять перед Інтернетом, як правило, дуже прості (тому більшість часу це простий аналіз) і зазвичай не вимагають послідовності, тому REST достатньо адекватний.

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

Я можу зробити висновок, що SOAP призначений для корпоративних систем, REST - для Інтернету або WWW. Ви можете користуватися нею взаємозамінно, але у вас може виникнути труднощі з часом, не використовуючи правильний інструмент для роботи.

вибачте за мою погану англійську.


2

На захист REST він чітко дотримується принципів HTTP та адресності, наприклад, операції читання використовують GET, операції оновлення використовують POST тощо. Я вважаю, що це набагато чистіший підхід. Книга Oreilly RESTful Web Services пояснює це набагато краще, ніж я можу, якщо ви читаєте його, я думаю, ви б віддали перевагу підходу REST


1

Набір інструментів на стороні клієнта буде одним. І знайомство з сервісами SOAP інше. Цього дня все більше та більше служб проходять шлях RESTful, і тестувати такі послуги можна з простих прикладів CURL. Хоча реалізувати обидва методи не так вже й складно, що дозволяє максимально широко використовувати клієнтів.

Якщо вам потрібно вибрати один, я б запропонував REST, це простіше.


1

Попередні відповіді містять багато інформації, але, думаю, є філософська різниця, на яку не було вказано. SOAP був відповіддю на питання "як створити сучасного, об'єктно-орієнтованого, платформового та протокольного незалежного спадкоємця RPC?". REST розвинувся з питання "як ми можемо зрозуміти, що зробило HTTP таким успішним для Інтернету та використовувати їх для розподілених обчислень?"

SOAP - це надання вам інструментів, щоб розподілене програмування виглядало як ... програмування. REST намагається нав'язати стиль для спрощення розподілених інтерфейсів, щоб розподілені ресурси могли посилатися один на одного, подібно, що сторінки з розподіленими HTML можуть посилатися один на одного. Один із способів - спроба (здебільшого) обмежувати операції "CRUD" на ресурсах (створювати, читати, оновлювати, видаляти).

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

На мою думку, тоді, якщо ви реалізуєте API «greenfield» і не знаєте, що багато про можливих клієнтів, я б вибрав REST як стиль, який він заохочує, щоб зробити інтерфейси зрозумілими та легкими для розробки. Якщо ви багато чого знаєте про клієнта та сервера, і є спеціальні засоби SOAP, які полегшать життя обом, то я б не був релігійним щодо REST.


-1: це фактично не відповідає на питання. Це говорить мало або нічого про те, "чому я повинен обирати одне над іншим"?
Джон Сондерс

1
Я зосереджувався на наданні інформації, яку інші не робили, але додав висновок, враховуючи ваше підказку.
shaunc

0

Ви можете легко перенести веб-компоненти WCF, що базується на WSDL, на інші види використання, просто змінивши налаштування конфігурації. Ви можете перейти через HTTP, а потім також назвати pipe, tcp, користувацькі протоколи тощо, не змінюючи код. Я вважаю, що компоненти WCF також можуть бути простішими у налаштуванні на такі речі, як безпека, двосторонні дзвінки, транзакції, одночасність тощо.

REST в значній мірі обмежує вас HTTP (що в багатьох випадках добре).


0

Я знаю, що це обговорення давнє, але, прочитавши всі відповіді та прокоментувавшись, я вважаю, що всі пропустили найважливіший пункт про різницю між двома системами: SOAP використовує складні типи, щоб не лише надати вам дані, але й підтвердити. і зберегти його в строгому типі, для якого він був визначений. WSDL повідомляє про те, що таке формат даних, який тип даних, дозволяє додавати правила reg-ex у стилі шаблону, і визначає, скільки разів повинен бути і може бути дозволений фрагмент даних у запиті / відповіді . З іншого боку, відпочинок не має жодного з цих механізмів.

SOAP є складним і важким, оскільки дозволяє надсилати складні важкі ієрархічні дані. REST - це звичайний текст, з початком і кінцевою точкою впорядковуються правила.

SOAP не залежить від бізнесу, оскільки в ньому вбудовані всі правила даних.

Різниця між SOAP та REST полягає в тому, що SOAP - це автономна схема, орієнтована на бізнес. REST - це текстовий документ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.