Які вирішальні фактори для вибору веб-сервісу як SOAP або REST?


30

Наскільки я бачу, для споживання SOAP потрібен стек SOAP, тому вашим клієнтам складніше споживати, тобто їм потрібно забезпечити наявність у них стека SOAP, який форматує дані POST та заголовки правильно, а потім поверне вам трохи структура даних, тоді як з REST ви просто робите HTTP GET-запит з аргументами в рядку запиту і отримуєте назад текст, який, напевно, є XML.

Отже, що дає додаткова накладність / складність SOAP, коли вам це потрібно і коли ви можете і чи не обійдетесь без цього?

Відповіді:


17

Я вже реалізував API REST і мені дуже сподобався. Загалом, коли ви реалізуєте REST через SOAP, ваш клієнт / сервер має більше ортогонального значення, тобто ви можете набагато вільніше змінювати сервер, не впливаючи на своїх клієнтів. Ця ортогональність обумовлена ​​використанням більш абстрактного та вже чітко визначеного зв'язку через дієслова HTTP. Крім того, використання гіперпосилань, вбудованих у ваші відповіді REST, полегшує розширення та розширення вашого API відносно безболісно. Клієнти повинні дотримуватися цих вбудованих посилань, щоб дістатися до нових ресурсів, як, наприклад, людина переходитиме до посилань на веб-сторінці, щоб «отримати детальну інформацію» для отримання додаткової інформації.

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

Загалом, я виявив, що REST добре підходить для високорозподілених програм , коли у вас є сотні, тисячі або мільйони клієнтів . Одна з причин - вищезазначена ортогональність, інша - кешування, яке ви отримуєте безкоштовно, оскільки ви використовуєте HTTP.

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


2
Ви отримуєте кешування через парадигму ресурсів та відсутність стану, а не через HTTP.
дієтабудда

@dietbuddha HTTP дає вам реалізацію безкоштовно.
Яків Райхле

17

Це може бути незначним моментом, але REST повністю базується на HTTP.

SOAP не вимагає HTTP, і ви можете безкоштовно використовувати будь-який транспорт.

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

REST нічого не розповідає про те, як повинні виглядати дані, які ви надсилаєте та отримуєте. Існує WADL, але в основному ви покладаєтесь на правильність документації API. SOAP має цирк XML-технологій, щоб зробити опис даних менш схильним до помилок. WSDL, схема ...

Наприкінці дня REST в основному отримує файлову систему на базі HTTP. Якщо ваша система може вписатися в цю парадигму - то це може бути хорошим вибором.


+1 для згадування декількох перевезень. Якщо вам дійсно потрібен транспортно-агностичний протокол (який, наприклад, підтримує роботу через SMTP або подібне), REST не працює. Зазвичай HTTP досить хороший, однак ...
sleske

6
Я не бачу, як REST прив’язаний до HTTP? Ось деталі реалізації. Більшість реалізацій REST надходять через HTTP, але я не бачу, чому я не міг реалізувати REST над іншими протоколами, наприклад FTP.
edalorzo

REST не обмежує спілкування певним протоколом ref: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
nmtoken

7

Отже, що дає додаткова накладність / складність SOAP, коли вам це потрібно і коли ви можете і чи не обійдетесь без цього?

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

Інша відмінність полягає в тому, що REST дуже орієнтований на ресурси або іменники . Ви взаємодієте з ресурсами за допомогою операцій CRUD. Все, що не відповідає цій парадигмі, стає громіздким і незграбним.

З іншого боку, SOAP - це лише протокол RPC (віддалений виклик процедури) . Це не з парадигмою, це лише транспортний шар.


1
І SOAP, і REST - це лише засоби для досягнення кінцевого результату. Вони можуть бути або не підходять для виконання завдання. Тому REST теж можна розглядати як транспортний шар. Навіть перегляд стану / менше не відповідає: ви можете спроектувати обидва аромати з обома - та іншими типами API. Ви навіть можете мати подвійний API, який має і SOAP, і кінцеву точку REST. І кінцева точка XML-RPC. І кінцева точка Apache Thrift. І кінцева точка буферів протоколів Google. І що ще. Зрештою, все - лише RPC.
JensG

4

REST також використовує пост. Насправді, коли використовуєте REST, дієслова http повідомляють про те, що відбувається.

REST і SOAP - це лише різні стандарти передачі даних через Інтернет.

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


4
Є хороша підтримка SOAP і в Java.

4

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


2
Погодьтеся. SOAP - галузевий стандарт, але надмірно складний, що призводить до безлічі порушених або неповних реалізацій. Крім цього, SOAP, як правило, найбільший слід щодо продуктивності та трафіку порівняно з будь-яким іншим підходом.
JensG

1

Якщо ви просто хочете простий, наочний посібник, який допоможе вам виміряти SOAP і REST відповідно до вимог ваших програм ...

Vijay Prasad Gupta склав просту та корисну діаграму.

Пряме посилання на блок-схему: https://drive.google.com/file/d/0B3zMtAq1Rf-sdVFNdThvNmZWRGc/edit

Посилання на статтю: https://www.linkedin.com/pulse/20140818062318-7933571-soap-vs-rest-flowchart-to-determine-the-right-web-services-protocol-for-your-needs


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

-2

Зараз 2015 рік. Я б сподівався, що SOAP вже помер, але він все ще затримується, як неприємний запах. Що б то не було, окрім найпростіших прикладних прикладів, інтеграція з сервісом SOAP - це завдання. Це складна архітектура, що має безліч варіантів на декількох рівнях, поєднаних з примхами численних реалізацій та тонкою (і не настільки тонкою) несумісністю. Я ніколи не мав жодного хорошого досвіду з цим. REST, з іншого боку, вітер: всі розуміють HTTP. У більшості випадків JSON настільки набагато корисніший, ніж XML InfoSet.

Щоб дати уявлення про складність SOAP, спробуйте інтегрувати бібліотеку SOAP у свій проект. Для Java, найпростіший клієнт Apache Axis2 (використовуючи просту прив'язку даних ADB), включає 23 нові JAR. Двадцять три! 20 МБ бібліотеки. CXF схожий: 21 JAR, коли я востаннє рахував.

Якщо ви дійсно цього хотіли, ви можете зробити REST за допомогою простої бібліотеки HTTP.


1
це більше схоже на розпусту, див. Як відповісти
gnat

Ти правий. Вибачте, я в той час був переповнений супом SOAP: D
Корнел Массон,

1
Ми мали таку саму скаргу з CORBA / IDL ще в 90-х. Тоді раптом "Простий протокол доступу до об'єктів" .. це буде просто! Це буде круто! Це буде швидко. Через десять років це вважається занадто складним. Поряд йде JSON (IMAO справді квадратне колесо для операцій з передачі даних у лабораторних умовах або обмежене "я знаю, що я роблю" ситуації швидкого виправлення) та RESTful ops. Промийте, повторіть ...
Девід Тонхофер

Я боюся, що кожне справжнє твердження про SOAP повинно читати як шахрайство. Це підприємництво за дизайном і надає вам безліч варіантів, куди потрібно просто надіслати деякі дані. Щодо кількох інтерфейсів SOAP, з якими я працював, кожен з них був надмірно безладним (не зовсім виною SOAP, але спорідненість до SOAP корелює з спорідненістю до програмного забезпечення). Вибачте за оренду.
maaartinus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.