Чому можна використовувати REST замість послуг на основі SOAP? [зачинено]


153

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

Які причини: Чому хтось із "реального світу" використовує REST замість служб на основі SOAP?


37
Під веб-службами ви посилаєтесь на веб-сервіси у стилі SOAP? Тому що, наскільки я знаю, ви також можете мати RESTful веб-сервіси.
Джеймс Макмахон

Відповіді:


160

Менше накладних витрат (немає конвертів SOAP, щоб завершити кожен дзвінок)

Менше дублювання (HTTP вже представляє такі операції, як DELETE, PUT, GET тощо), які в іншому випадку повинні бути представлені в конверті SOAP).

Більш стандартизовані - операції HTTP добре розуміються та працюють послідовно. Деякі реалізації SOAP можуть стати вибагливими.

Більш зрозумілий для людини і тестуваний (складніше перевірити SOAP за допомогою браузера).

Не потрібно використовувати XML (добре, що вам не потрібно для SOAP, але це навряд чи має сенс, оскільки ви вже робите розбір конверта).

Бібліотеки спростили SOAP (вид). Але ви скорочуєте багато зайвих, як я вже зазначав. так, теоретично SOAP може переходити на інші транспортні засоби, щоб уникнути проїзду поверх шару, роблячи подібні речі, але насправді майже вся робота SOAP, яку ви коли-небудь будете робити, це над HTTP.


1
Я хотів би додати, що міжплатформна комунікація SOAP може бути також і PITA (чи не це була частина пункту SOAP?!?).
Джастін Бозоньє

7
Також чудово співпрацює з інфраструктурою HTTP - наприклад, GET агресивно кеширується разом із використанням останніх модифікованих та етагів
Джеймс Страчан,

Чудова співпраця з веб-браузерами для надання універсального клієнта для ваших послуг також допомагає :)
Джеймс Страчан

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

6
HTTP настільки ж стандартизований, як SOAP, і існує вже довше, тому впровадження дійсно стабільне в усьому світі та справді сумісне. SOAP також по суті буде менш читабельним, навіть з однаковим контентом, через конверт, в який вміщено контент. На практиці впродовж останніх кількох років я вважав, що JSON через HTTP є найкращою комбінацією, просто достатньо читаною, будучи достатньою для читання ще більш компактний.
Kendall Helmstetter Gelner

36

Послуги RESTful набагато простіше споживати, ніж звичайні послуги на основі SOAP . Причиною цього є те, що REST заснований на звичайних HTTP-запитах, що дозволяє зробити висновок про намір залежно від типу запиту, який робиться (GET = вилучити, POST = написати, DELETE = видалити тощо). З іншого боку, ви можете стверджувати, що він менш гнучкий, оскільки він не відповідає концепції конвертів повідомлень, що містить контекст запиту.

На мій досвід, SOAP віддав перевагу послугам на підприємстві, а REST надав перевагу послугам, які піддаються відкритим API.

З такими інструментами, як WCF в .NET-рамках, дуже тривіально реалізувати послугу як REST або SOAP.

Деякі відповідні читання:


9
Я розумію, що файли WSDL можна використовувати для генерації класів для викриття методів веб-служб. Напевно, це робить споживання послуг таким же простим, як виклик функції? Чи можете ви поясніть свій погляд ще трохи.
Говард

1
Говард Мей: Якщо припустити, що ви викликаєте функції, використовуючи лише примітивні типи даних, це, безумовно, вірно. Але в цьому випадку ви точно не можете стверджувати, що SOAP простіше, ніж відпочинок. Якщо у вас складні типи даних, обробка WSDL може працювати чудово між двома машинами з однаковими стеками WS. Але у вас неминуче виникнуть проблеми, як тільки ви змішаєте стеки. Він перестає бути таким простим, як тільки вам доведеться вручну копатися до WSDL, щоб налагодити несумісність.
Джозеф Холстен

1
У 2014 році майже кожна платформа, навіть стародавня, підтримує WSDL. Класи проксі роблять використання API надзвичайно простим. Ми впроваджуємо push-сервіс, і я розглядаю REST, але у мене справді виникають проблеми, коли бачу якусь вигоду.
JohnOpincar

13

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

Канонічний аргумент полягає в тому, що послуги REST - це більш відповідна конструкція Інтернету - тобто дизайн HTTP та пов'язаної з цим інфраструктури. Таким чином, використання сервісу REST буде більш сумісним із існуючими веб-інструментами та методами.

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


10

Накладні витрати не так важливі, як хороша архітектура.

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

Інша причина - передбачувана вартість протоколів RESTful через HTTP, оскільки вона може використовувати існуючі технології (в основному проксі). Початкова вартість RPC є досить низькою, але вона, як правило, значно збільшується при посиленні навантаження.


7

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

На відміну від SOAP та WSDL, які краще для внутрішніх застосувань, де у вас є обидва кінці бібліотек та відомих хитромудрих людей. (І, можливо, вам не доведеться піклуватися про речі, такі як збалансування завантаження в Інтернеті, кешування HTTP тощо). Тоді ви отримуєте API, які самостійно документують, зберігають типи тощо з нульовою роботою.


Хороша відповідь, але я не погоджуюся, що SOAP означає, що ви не можете мати балансування навантаження в Інтернеті.
HDave

7

Маю прочитати найпрекраснішу дисертацію Роя Філдінга на цю тему. Він робить відмінний випадок і, безумовно, ШЛЯХ випереджав свій час, коли писав це (2000).


6

Блог Стіва Виноського та його останні статті , безумовно, варто переглянути. Він колишній гуру CORBA, який написав, мабуть, найкращу книгу на цю тему разом з Мічі Хеннінг, «Розширене програмування CORBA® за допомогою C ++» . Однак він з тих пір бачив помилку свого клієнта / сервера, і тепер присягає REST.


5

REST дозволяє кешувати ваші немутуючі операції (які зазвичай використовують дієслово GET) . Тобто кешований клієнтом та / або кешований проксі. Це може бути величезний виграш!


8
Це просто "правильне використання HTTP", а не REST.
aehlke

3

REST - це лише спосіб реалізації веб-сервісів. Це лише спосіб правильно використовувати HTTP для запиту веб-служб, на які ви намагаєтеся звернутися.

http://www.xfront.com/REST-Web-Services.html http://en.wikipedia.org/wiki/Representational_State_Transfer


1
REST не має нічого спільного з HTTP і повністю не залежить від протоколу. Однак він добре підходить для деяких видів веб-сервісів, орієнтованих на ресурси.
aehlke

0

Це супер просто і тонко. Ви можете зробити це за допомогою браузера за допомогою http verb: GET. Я не знайшов браузер, який легко вручну робити загальний http POST-запит


1
Оформити замовлення Fiddler. Це не браузер, але це чудовий спосіб побудови HTTP POST без коду. fiddler2.com/fiddler2
Ерік Шконовер

Я зазвичай це роблю, змінюючи наявний запит із Чарльзом. У мене є також Фіддлер.
Рей Лу

0

Ось один момент даних: Amazon пропонує свої API у форматах REST та SOAP, а 85% використання - REST.

REST простіший у впровадженні, легший для розуміння та підвищення продуктивності.


7
Чи є у вас посилання на заяву про "більш високу ефективність"?
Джеймс Макмахон

3
Де ви взяли 85% використання? Це дуже добре знати (якщо я можу побачити докази)
schmoopy

3
Ручне читання специфікації API, друк сторінок тощо легше реалізувати, ніж "Клацнути правою кнопкою миші, Додати довідку служби"? (VS2010)
BlueChippy

@schmoopy З блогу Amazon: aws.typepad.com/aws/2005/09/rest_vs_soap.html
joerage
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.