Введение
Формат сериализации данных.
XML-RPC — это протокол удаленного вызова процедур (RPC), использующий XML для кодирования вызовов и HTTP в качестве транспортного механизма.
История
Протокол XML RPC был создан в 1998 году Дэйвом Уайнером из UserLand Software и компанией Microsoft, которая рассматривала этот протокол как ключевой элемент для масштабирования своих усилий в сфере электронной коммерции между предприятиями. С появлением новых функций стандарт эволюционировал и стал известен как SOAP. UserLand поддерживал XML RPC, начиная с версии 5.1 своей системы управления веб-контентом Frontier. Идея XML RPC о стандарте для HTTP-запросов и ответов, удобном для чтения и записи человеком и поддающемся обработке скриптами, также была реализована в конкурирующих спецификациях, таких как Web Distributed Data Exchange (WDDX) от Allaire и Web Interface Definition Language (WIDL) от webMethod. Ранее существовали технологии, такие как WebBroker от DataChannel, которые позволяли оборачивать объекты COM, CORBA и Java RMI в синтаксис XML и передавать их по HTTP. Общее использование XML для удаленного вызова процедур (RPC) было запатентовано Филиппом Мерриком, Стюартом Алленом и Джозефом Лаппом в апреле 2006 года, со ссылкой на приоритет предварительной заявки, поданной в марте 1998 года. Патент был передан компании webMethods, расположенной в Фэрфаксе, штат Вирджиния, и срок его действия истек 23 марта 2019 года.
XML RPC's idea of a human readable and writable, script parsable standard for HTTP based requests and responses has also been implemented in competing specifications such as Allaire's Web Distributed Data Exchange (WDDX) and webMethod's Web Interface Definition Language (WIDL). Prior art wrapping COM, CORBA, and Java RMI objects in XML syntax and transporting them via HTTP also existed in DataChannel's WebBroker technology. The generic use of XML for remote procedure call (RPC) was patented by Phillip Merrick, Stewart Allen, and Joseph Lapp in April 2006, claiming benefit to a provisional application filed in March 1998. The patent was assigned to webMethods, located in Fairfax, Virginia. The patent expired on March 23, 2019.
Использование
В XML RPC клиент выполняет удаленный вызов процедур (RPC), отправляя HTTP-запрос на сервер, реализующий XML RPC, и получая HTTP-ответ. Вызов может содержать несколько параметров и возвращать один результат. Протокол определяет несколько типов данных для параметров и результата. Некоторые из этих типов данных являются составными, то есть вложенными. Например, параметр может представлять собой массив из пяти целых чисел. Структура параметров/результатов и набор типов данных разработаны таким образом, чтобы соответствовать типам, используемым в распространенных языках программирования. Идентификация клиентов для целей авторизации может быть реализована с использованием стандартных методов безопасности HTTP. Для идентификации и аутентификации можно использовать простую HTTP-аутентификацию. В отличие от RESTful-протоколов, где передаются представления ресурсов (документов), XML RPC предназначен для вызова методов. Основное различие заключается в том, что XML RPC имеет более строгую структуру, что позволяет использовать общий код библиотек для реализации клиентов и серверов и снижает объем работы по проектированию и документированию для конкретного прикладного протокола. Важное техническое отличие между типичными RESTful-протоколами и XML RPC состоит в том, что многие RESTful-протоколы используют HTTP URI для передачи информации о параметрах, в то время как в XML RPC URI служит только для идентификации сервера. JSON RPC аналогичен XML RPC.
Критика
Недавние критики (с 2010 года и далее) протокола XML RPC утверждают, что вызовы RPC можно выполнять, используя обычный XML, и что XML RPC не предоставляет никаких преимуществ по сравнению с XML. Как XML RPC, так и XML требуют наличия модели данных на уровне приложения, например, определения имен полей в схеме XML или имен параметров в XML RPC. Более того, для кодирования одних и тех же объектов XML RPC использует примерно в 4 раза больше байтов, чем обычный XML, который сам по себе является многословным по сравнению с JSON.