XML-RPC – простой протокол вызова удаленных процедур. XML-RPC является прародителем одного из популярных протоколов SOAP и, не смотря на свой возраст (реализован в 1998 году), XML-RPC не канул в лету, а напротив, очень даже часто используется в наши дни. Не является исключением использование XML-RPC также и в движке Drupal.
Протокол XML-RPC был изначально разработан Дэйвом Винером из компании «UserLand Software» в сотрудничестве с Майкрософт'ом в 1998 году. Однако корпорация Майкрософт вскоре сочла этот протокол слишком упрощённым, и занялась расширением его функциональности (и как следствие был создан расширенный протокол SOAP). Но, не взирая на холодность со стороны Майкрософт, стандарт XML-RPC очаровал многих программистов своей необычайной простотой, благодаря которой он по сей день существует и, даже, постепенно набирает популярность. (Википедия)
В Drupal XML-RPC начал существовать с версии 4.6. Небольшие изменения в работе функции произошли с выходом 7 версии Drupal.
Для начала давайте поставим себе задачи, то есть прикинем, для чего мы можем использовать протокол XML-RPC.
В нашем распоряжении 2 сайта:
- сайт «А»
- сайт «B»
Задачи перед нами следующие:
- Узнать все возможные методы сайта «В» находясь на сайте «А».
- Создать функционал вывода количества контента. Находясь на сайте «А» мы должны узнать количество нод на сайте «В» и наоборот.
- Создать функционал создания контента на сайте «В» находясь на сайте «А» и наоборот.
Задача 1
В друпале есть список системных методов, которые становятся доступными сразу же после его установки. Список стандартных методов такой:
- system.multicall– системный метод, который позволит нам вызвать несколько других методов.
- system.methodSignature– возвращает массив, с описанием типа возврата данных и типа требуемых данных для выбранного метода.
- system.getCapabilities- возвращает структуру описания XML-RPC спецификации поддерживаются этим сервером.
- system.listMethods– выводит список доступных методов.
- system.methodHelp– выводит строку описания для указанного метода.
Для решения задачи веб разработчику потребуется метод system.listMethods, который выведет все методы сайта.
Запрос любого метода исполняется с помощью функции xmlrpc ($url, $args, $options = array()).
Давайте разберем аргументы функции, их всего 3:
- $url– абсолютный адрес к файлу запросов, например «/example.com/xmlrpc.php».
- $args- ассоциативный массив, ключи которого являются методы, значения которых аргументы для передачи соответствующим методом. Если несколько методов не указаны, system.multicall не выполняется.
- $options(не обязательный аргумент) – параметры выполнения запроса.
Чтобы получить все методы сайта «В» нам потребуется всего то лишь написать следующую строчку кода:
php
$methods = xmlrpc('http://site-b.com/xmlrpc.php', array('system.listMethods' => array())результатом выполнения запроса у нас выведется массив со всеми доступными методами сайта «В». Так же можно получить все доступные методы на текущем сайте, стоит лишь поменять 1 аргумент функции xmlrpc, то есть поменять сайт, к которому обращаемся.










