Короткий ответ: оба протокола могут использоваться для совершения удаленных вызовов процедур (RPC). Оба протокола требуют определения схемы уровня приложения, и, вообще говоря, ни один протокол не требует какой-либо дополнительной схемы для определения того, как сериализовать объекты уровня языка (подробнее см. Ниже).
Однако XmlRpc пользуется большей поддержкой со стороны библиотек, которые используют функции метапрограммирования (отражения) языка для сопоставления вызовов XmlRpc, напрямую (ну, никогда не на 100% напрямую) на вызовы функций уровня языка. Причина в том, что XmlRpc лучше поддерживает XMLRpc, чем простой XML: либо a) историческая авария/результат маркетинга со стороны сторонников XmlRpc, либо (б) сумма незначительных проблем перевода, перечисленных ниже, подсказывает масштабы в пользу XmlRpc.
С другой стороны, XmlRpc имеет 2 основных недостатка: (1) он требует примерно в 4 раза больше полосы пропускания и (2) он подрывает намерение инструментов проверки XML-схемы: каждый пакет будет просто штамповаться как «да, это допустимо XmlRpc», независимо от орфографических ошибок и пропусков в полях прикладного уровня.
Длинный ответ:
Вопреки распространенному мнению, вам не нужен стандарт, чтобы определить, как кодировать объекты на уровне языка в виде простого XML - там, как правило, только один «разумный» способ (при условии, что уровень приложений схема определяет, используется ли атрибуты XML или нет), например:
class Room {
int id=1;
String code="MR-101";
String name="Maths room";
int capacity=30;
};
закодированные как:
<Room>
<id>1</id>
<code>MR-101</code>
<name>Maths room</name>
<capacity>30</capacity>
</Room>
XmlRpc был специально разработан для facilitat е создание библиотек, которые автоматически сериализация/unserialise объектов языка на уровне в RPC вызовов, и как таковой он имеют некоторые незначительные преимущества при использовании таким образом:
С простым XML, это возможно для структуры с один элемент, который следует путать с массивом с одним элементом.
XmlRpc определяет стандартный формат времени и даты. {Хотя обработка временных интервалов и чистых временных или чистых дат времени определяется на уровне приложения.}
XmlRpc позволяет передавать аргументы функции без их именования; Для простых вызовов XML RPC требуется, чтобы вы назвали каждый аргумент.
XmlRpc определяет стандартный способ назвать вызываемый метод: "methodName". С Plain XML тег корневого узла обычно используется для этой цели, хотя возможны альтернативы.
XmlRpc определяет простую систему типов: целые числа, строки и т. Д.{Обратите внимание, что со статически типизированными языками типы все равно должны быть скомпилированы в целевой объект и, следовательно, известны и с динамически типизированными языками, часто можно использовать переменные int и float и строки; обратите внимание также, что система типа XmlRpc, как правило, плохо подходит для системы типов целевого языка, которая может иметь несколько целых типов и т. д.}
Библиотеки XmlRpc обычно интегрируются непосредственно с библиотекой Http, тогда как Xml библиотеки сериализации все (?) требуют, чтобы программист приложения передавал XML-текст в Http-вызов. В более современных языках, таких как Java/Python/C#, это тривиальный вопрос, но не так, например. C++.
Существует «маркетинговое восприятие», которое XML описывает «документы», тогда как XmlRpc предназначен для вызовов процедур. Понимание состоит в том, что отправка сообщения XmlRpc содержит обязательство для сервера выполнять какое-либо действие, тогда как это восприятие не столь сильное с простым XML.
Некоторые люди скажут «кто заботится - разбор данных XML с помощью рекурсивного спуска/DOM/SAX довольно легко в любом случае», в этом случае большинство из вышеперечисленных возражений не имеют никакого отношения.
Для тех, кто по-прежнему предпочитают простоту использования получения родных объектов языка, созданный автоматически, многие основные языки имеют библиотеки, которые автоматически сериализация объектов языка уровня в XML, не прибегая к XmlRpc, например:
.NET - Java - Python
может быть, успех XmlRpc, такой, как она есть, проистекает из наличия библиотек, которые автоматически создают объекты языка на уровне, и в свою очередь, эти библиотеки имеют преимущество перед простыми аналогами XML из-за к ли выше.
Недостатки XmlRpc являются:
Как упомянуто в вопросе, это ужасно тучным
Поддержка простого XML вездесуща и обычно не требует интеграции с крупными библиотеками 3 участника. Многие приложения требуют преобразования автоматически создаваемых объектов в собственные объекты приложения в любом случае.
Многие реализации XmlRpc не могут создавать истинные объекты уровня языка, которые программисты сортировки ожидали бы и требовали бы, например, временные запросы полей или дополнительный синтаксис.
Если для проверки вызовов RPC, например DTD-файла, используется документ определения схемы, то вы теряете возможность проверки схемы уровня приложения - файл DTD просто скажет вам, что «это действительно XmlRpc ». Насколько мне известно, стандартный способ определения схемы уровня приложения с протоколом на основе XmlRpc.
3) Если бы я должен был делать удаленные вызовы процедур с помощью простых строк или двоичных файлов, это было бы ужасно и требовать разработки форматов для каждого взаимодействия. Но простой XML дает четко определенный формат для передачи структурированных значений. Я не думаю, что вы ответили на вопрос «что XmlRpc имеет над XML?» 1) Мои примеры сравнивают XmlRpc с XML и доказывают, что вам не нужно быть многоязычным для взаимодействия. XML считается протоколом, который хорош для интероперабельности. –
Вы ошибаетесь. Взяв ваш пример, ' ' как я могу узнать, как развязать это в объект, если бы я получил это по проводу? Это ничем не отличается от получения, скажем, «комнаты | 1 | MR-101 | Math Room | 30» и опираясь на заказ на поле. Дело в том, что XML-RPC обеспечивает ** четко определенный протокол связи ** - XML сам по себе не делает. –
ChssPly76
Я не понимаю смысла полагаться на порядок поля. В этом случае атрибуты (или теги) имеют имена. Почему бы вам не искать имена полей, а не порядок полей? –