Аргументы о простоте решений, использующих XML-RPC или REST, легко понять, и с ними сложно спорить.
Я также часто слышал аргументы о том, что увеличенные накладные расходы SOAP могут значительно повлиять на используемую полосу пропускания и, возможно, даже на задержку. Я хотел бы увидеть результаты теста, который количественно оценивает воздействие. Кто-нибудь знает хороший источник такой информации?


REST как протокол не определяет какую-либо форму конверта сообщения, в то время как SOAP имеет этот стандарт.
Поэтому довольно упрощенно пытаться сравнить эти два, это яблоки с апельсинами.
Тем не менее, конверт SOAP (без данных) составляет всего несколько k, поэтому не должно быть заметной разницы в скорости при условии, что вы получаете сериализованный объект как через SOAP, так и через REST.
Да неужели? Я хочу отправить сериализованный класс C#, как потребитель протокола REST узнает, как разобрать его из типа mime.
Я думаю, что проблема начинается, когда вы пытаетесь рассматривать REST как протокол. REST - это архитектурный стиль, который может использовать протокол HTTP.
Я интерпретирую вопрос как использование «REST» для обозначения (обычно) «XML через HTTP» или (реже) «настраиваемого формата через HTTP», и в этом случае сравнение является допустимым вопросом.
@ Тим Купер - Человек, придумавший термин REST, категорически не согласен с этим утверждением, как и большинство других, которые помогли распространить информацию о REST. [Узнайте больше о REST в Википедии] (помогите продвинуть), чтобы, надеюсь, понять, почему REST !== XML over HTTP.
Я не знаю ответа на вопрос о тестировании, однако то, что я знаю о формате SOAP, - да, у него есть накладные расходы, но эти накладные расходы не увеличиваются на запрос: если у вас есть один элемент, отправленный в веб-службу , у вас есть накладные расходы + создание одного элемента, и если у вас есть 1000 элементов, отправленных в веб-службу, у вас есть накладные расходы + создание 1000 элементов. Накладные расходы возникают, когда XML-запрос форматируется для конкретной операции, но каждый отдельный элемент аргумента в запросе форматируется одинаково.
Если вы придерживаетесь повторяемых коротких пакетов данных (скажем, 500 элементов), скорость должна быть приемлемой.
Основное влияние на скорость SOAP по сравнению с REST не связано со скоростью передачи данных, а с кэшируемостью. REST предлагает использовать семантику Интернета вместо того, чтобы пытаться туннелировать через него через XML, поэтому веб-службы RESTful обычно предназначены для правильного использования заголовков кеша, поэтому они хорошо работают со стандартной инфраструктурой Интернета, такой как прокси-серверы кеширования и даже кеши локального браузера. Кроме того, использование веб-семантики означает, что такие вещи, как ETags и автоматическое сжатие zip-файлов, являются хорошо понятными способами повышения эффективности.
... а теперь вы говорите, что хотите эталонов. Что ж, с помощью Google я нашел один парень, тестирование которого показывает, что REST в 4-6 раз быстрее, чем SOAP, и еще один бумага, который также поддерживает REST.
Отличный ответ, pjz, вы поняли, что ваш ответ ничего не говорит о XML-RPC или о том, почему он не входит в число лучших вариантов, которые следует учитывать.
Обновлена ссылка на "один парень" learnosity.com/techblog/2008/03/cfmx-soap-vs-rest-benchmarks
Если вы получаете много операций SOAP на основе ИНФОРМАЦИИ (get * type of calls), в настоящее время вы не можете их кэшировать. Но если вы реализуете те же операции с помощью REST, есть вероятность, что данные (в зависимости от вашего бизнес-контекста) могут быть кэшированы, как упоминалось выше. Поскольку SOAP использует POST для своих операций, он не может кэшировать информацию на стороне сервера.
SOAP и любой другой протокол, использующий XML, обычно сильно раздувает ваши сообщения - это может быть или не быть проблемой в зависимости от контекста.
Что-то вроде JSON было бы более компактным и, возможно, быстрее для сериализации / десериализации, но не используйте его исключительно по этой причине. Делайте то, что кажется вам разумным в данный момент, и измените это, если это проблема.
Все, что обычно использует HTTP (если только не повторно используется соединение поддержки активности HTTP 1.1, чего не делают многие реализации), запускает новое TCP-соединение для каждого запроса; это довольно плохо, особенно по ссылкам с высокой задержкой. HTTPS намного хуже. Если у вас много коротких запросов от одного отправителя к одному получателю, подумайте, как вы можете уменьшить эти накладные расходы.
Использование HTTP для любого типа RPC (будь то SOAP или что-то еще) всегда приведет к этим накладным расходам. Другие протоколы RPC обычно позволяют поддерживать соединение открытым.
SOAP определенно медленнее. Полезные нагрузки значительно больше, и их медленнее собирать, транспортировать, анализировать, проверять и обрабатывать.
По этому поводу было проведено несколько исследований, которые могут оказаться для вас информативными. См. Следующее:
Также есть (несколько устаревший) интересный разговор о производительности на эту тему на Форумы MSDN.
Короче говоря, большинство этих источников, похоже, согласны с тем, что SOAP и REST примерно одинаковы по производительности для данных общего назначения. Однако некоторые результаты, похоже, указывают на то, что с двоичными данными REST может быть менее производительным. См. Ссылки на форуме, на который я указал, для получения более подробной информации об этом.
Думаю, главный вопрос здесь в том, как сравнить RPC с SOAP.
они оба служат одному и тому же подходу к абстракции связи, имея объекты-заглушки, с которыми вы работаете, и примитивные / сложные типы данных, которые вы получаете, не зная, как все это обрабатывается ниже.
Я всегда предпочитаю (JSON-) RPC, потому что
хотя есть причины, по которым вы должны использовать SOAP, т.е. если вам нужно именовать параметры, а не полагаться на их правильный порядок
некоторые дополнительные сведения вы получите из этого stackoverflow вопрос
Я считаю неискренним сказать, что REST не определяет конверт сообщения; он говорит «используйте то, что использует http», то есть mime-типы.