SOAP vs. REST: прагматические тематические исследования?

Меня не устраивают ответы, заданные особенностями SOAP и REST: Производительность SOAP и XML-RPC или REST

потому что это просто общие философские ответы, а не прагматические ответы с некоторыми исследованиями.

Никто не может дать точные случаи, когда мыло было бы более подходящим, чем отдых, особенно в плане производительности?

Обновление: я думаю, что REST выигрывает войну.

Ответ 1

Здесь вы можете найти статью, сравнивающую REST и SOAP: http://www.jopera.org/files/www2008-restws-pautasso-zimmermann-leymann.pdf

Выводы авторов выглядели следующим образом:

  • Используйте службы RESTful для тактической, специальной интеграции через Интернет.
  • Предпочитайте WS- * Web-сервисы в сценариях интеграции корпоративных корпоративных приложений с более длительным сроком службы и расширенными требованиями QoS.

Лично мне не нравится терминология типа "профессионального предприятия", потому что она свободна и неформальна. Однако, на мой взгляд, авторы сделали несколько хороших моментов в этой статье. Может быть, заключить и дать свои мысли:

  • Если вы хотите сделать API общедоступным - сделайте это с помощью RESTful. Зачем? Он прост в использовании для клиентского приложения, поэтому он сделает ваш сервис более популярным. Например, Amazon раскрывает API REST и SOAP, но 85% их пользователей выбрали версию REST Amazon API - SOAP vs. REST

  • Используйте SOAP и WS- * стек, если вы создадите (или у вас есть некоторый контроль над процессом создания) как потребителей, так и производителей ваших услуг, и вам нужны расширенные функции WS- *. Вероятно, для этого потребуется больше ресурсов, так как приложения SOAP имеют тенденцию быть "более тяжелыми" (больше функций, но более сложными).

Также учитывая производительность REST может быть быстрее (сообщения, безусловно, короче, и вам не нужно разбирать xml).

Надеюсь, это поможет.

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


Ответ на комментарий

Я должен использовать мыло, потому что я так называемое "профессиональное предприятие"

И предполагая, конечно, что ваш выбор на самом деле не диктуется крупными поставщиками программного обеспечения.

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

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

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

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

И, наконец, это не имеет ничего общего с разумными аргументами, но больше с политикой. Я думаю, что люди на уровне управления предпочитают WS- * стек и SOAP (он поддерживает "крупные предприятия", поэтому им легче оправдать их выбор). С другой стороны, люди с академической точки зрения [1] предпочитают REST - потому что в этом районе еще много исследований, которые могут проводиться в этом районе.

[1] Я где-то посередине, поэтому я могу наблюдать оба поведения: -)

Ответ 2

Производительность не является решающим фактором.

Сначала я должен сказать, что вопрос SOAP-vs-REST немного запутан, потому что SOAP представляет собой формат конверта XML, а REST - это архитектура. Поэтому я сделаю небольшое предположение и предположим, что вы действительно рассматриваете SOAP-vs-POX или SOAP-vs-JSON или SOAP-vs - некоторые другие методы форматирования данных.

Решающим фактором должно быть следующее:
Вам теперь нужно или вам понадобится в будущем конверт SOAP?

Конвертер SOAP позволяет, среди прочего, использовать такие функции, как шифрование с помощью каркаса, digsig, маршрутизация и авторизация. Вы можете, конечно, делать эти вещи с помощью REST (или, точнее, с помощью простого старого XML или JSON и т.д.), Но вам нужно больше работать самостоятельно, чтобы это произошло.

Если производительность - все, что вы понимаете, это значит - это ваш критерий №1, то вам, вероятно, следует отказаться от SOAP и POX и перейти к protobufs или что-то еще, оптимизированное для производительности. Это может быть быстрее для сериализации и более быстрой передачи.


Если вы считаете, что этот ответ "слишком философский", и вам действительно нужны жесткие цифры, ну, я полагаю, вам нужно будет провести некоторые тесты. Фактический перфоманс будет сильно отличаться от выбранных наборов инструментов, формы сообщений и дополнительных служб данных (например, шифрования и т.д.), Которые вы используете. Но в конце концов, первенство не будет или не должно быть решающим в любом случае.

Если ваш инструментарий SOAP на 20% проще в использовании. отлаживать и поддерживать в качестве своего инструментария POX, тогда вы должны использовать SOAP, независимо от производительности. Люди (кодеры, архитекторы, тестеры) в наши дни намного дороже, чем процессоры и сети. Вы всегда можете купить еще 2 cpus или большую сеть, если это необходимо, и если ваш дизайн правильный. Но вы не можете покупать на 20% меньше времени на разработку любой ценой, если ваша инфраструктура трудно использовать, или если она отгоняет ваших людей. Если вы не используете географическую сеть, вам лучше оптимизировать для людей, а не для сети.