XML-RPC — это протокол удаленного вызова процедур (один процесс вызывает функцию другого процесса через удаленное соединение), который использует XML для представления данных и HTTP для выполнения вызовов. Хотя приложения могут явно предоставлять свои собственные API REST для RPC, стандартный протокол может помочь в обеспечении безопасности и предоставить множество других преимуществ. Например, разработчикам не нужно разрабатывать архитектуру REST API с нуля, а также можно использовать один клиент для удаленного вызова процедур для различных серверных приложений, которые поддерживают стандартный протокол. Поэтому XML-RPC был представлен как стандартный протокол для RPC.
В этом уроке мы рассмотрим различные основные функции WordPress, которые можно выполнять удаленно с помощью XML-RPC. Это может помочь нам создать инструменты, которые могут выполнять различные операции при установке WordPress. Одним из лучших примеров этого является мобильное приложение WordPress .
Обзор запроса и ответа протокола XML-RPC
Чтобы сделать запрос XML-RPC, вам нужно обернуть имя и параметры удаленной функции в формате XML, а затем отправить запрос POST, используя HTTP.
Это пример HTTP-запроса XML-RPC:
POST /xmlrpc HTTP 1.0 User-Agent: myXMLRPCClient/1.0 Host: 192.168.124.2 Content-Type: text/xml Content-Length: 169 <?xml version="1.0"?> <methodCall> <methodName>circleArea</methodName> <params> <param> <value><double>2.41</double></value> </param> </params> </methodCall>
Вот пример ответа на вышеуказанный запрос:
HTTP/1.1 200 OK Date: Sat, 06 Oct 2001 23:20:04 GMT Server: Apache.1.3.12 (Unix) Connection: close Content-Type: text/xml Content-Length: 124 <?xml version="1.0"?> <methodResponse> <params> <param> <value><double>18.24668429131</double></value> </param> </params> </methodResponse>
В этом руководстве мы будем использовать PHP для отправки запросов XML-RPC в WordPress и отображения необработанного ответа.
Обычно мы пишем код для переноса имени и параметров нашей функции в формате XML, а затем делаем HTTP-запрос с использованием cURL, но написание кода для этого с нуля занимает много времени. Вместо этого мы можем использовать библиотеку PHPXMLRPC , которая обеспечивает абстракцию для всех этих шагов и позволяет нам гораздо проще выполнять запросы XML-RPC.
Библиотеки XML-RPC доступны для всех популярных языков программирования, вы можете найти одну для предпочитаемого вами языка с помощью вашей любимой поисковой системы.
Функции WordPress XML-RPC
Существует множество основных функций WordPress, которые WordPress предоставляет через XML-RPC. Все функции XML-RPC подразделяются на 9 категорий: сообщения, таксономии, медиа, комментарии, параметры, пользователи, категории, теги и страницы.
Список функций
Вот полный список всех функций:
Функции сообщений : доступно из WordPress 3.4. Вот список функций, которые относятся к категории сообщений:
wp.getPost wp.getPosts wp.newPost wp.editPost wp.deletePost wp.getPostType wp.getPostTypes wp.getPostFormats wp.getPostStatusList
Функции таксономии : доступно из WordPress 3.4. Вот список функций, которые относятся к категории таксономии:
wp.getTaxonomy wp.getTaxonomies wp.getTerm wp.getTerms wp.newTerm wp.editTerm wp.deleteTerm
Медиа-функции : доступны из WordPress 3.1. Вот список функций, которые относятся к категории таксономии:
wp.getMediaItem wp.getMediaLibrary wp.uploadFile
Функции комментариев : доступно из WordPress 2.7. Вот список функций, которые принадлежат категории комментариев:
wp.getCommentCount wp.getComment wp.getComments wp.newComment wp.editComment wp.deleteComment wp.getCommentStatusList
Функции функций : доступны из WordPress 2.6. Вот список функций, которые относятся к категории параметров:
wp.getOptions wp.setOptions
Функции пользователя : доступно из WordPress 3.5. Вот список функций, которые принадлежат категории пользователей:
wp.getUsersBlogs wp.getUser wp.getUsers wp.getProfile wp.editProfile wp.getAuthors
Функции категорий : доступны из WordPress 3.4. Вот список функций, которые принадлежат категории категории:
wp.getCategories wp.suggestCategories wp.newCategory wp.deleteCategory
Функции тегов : доступно из WordPress 3.4. Вот список функций, которые относятся к категории тегов:
wp.getTags
Функции страниц : доступно из WordPress 3.4. Вот список функций, которые относятся к категории страниц:
wp.getPage wp.getPages wp.getPageList wp.newPage wp.editPage wp.deletePage wp.getPageStatusList wp.getPageTemplates
Все названия категорий и имена функций, а также их использование и цели вполне понятны.
Давайте посмотрим несколько примеров вышеуказанных функций:
Получение списка авторов WordPress
Вот код для получения списка всех авторов удаленной установки WordPress с использованием PHP:
<?php include("lib/xmlrpc.inc"); $function_name = "wp.getAuthors"; $url = "http://sitepoint.com/xmlrpc.php"; $client = new xmlrpc_client($url); $client->return_type = "phpvals"; $message = new xmlrpcmsg($function_name, array(new xmlrpcval(0, "int"), new xmlrpcval("username", "string"), new xmlrpcval("password", "string"))); $resp = $client->send($message); if ($resp->faultCode()) echo 'KO. Error: '.$resp->faultString(); else foreach ($resp->val as $key => $value) { echo "User id: " . $value["user_id"]; echo "<br><br>"; echo "Username: " . $value["user_login"]; echo "<br><br>"; echo "Display name: " . $value["display_name"]; echo "<br><br>"; }; ?>
в<?php include("lib/xmlrpc.inc"); $function_name = "wp.getAuthors"; $url = "http://sitepoint.com/xmlrpc.php"; $client = new xmlrpc_client($url); $client->return_type = "phpvals"; $message = new xmlrpcmsg($function_name, array(new xmlrpcval(0, "int"), new xmlrpcval("username", "string"), new xmlrpcval("password", "string"))); $resp = $client->send($message); if ($resp->faultCode()) echo 'KO. Error: '.$resp->faultString(); else foreach ($resp->val as $key => $value) { echo "User id: " . $value["user_id"]; echo "<br><br>"; echo "Username: " . $value["user_login"]; echo "<br><br>"; echo "Display name: " . $value["display_name"]; echo "<br><br>"; }; ?>
Давайте посмотрим, как работает приведенный выше код:
- Сначала мы включили библиотеку PHPXMLRPC.
- Затем мы создаем переменную
$function_name
для хранения имени функции. - Мы создали еще одну переменную, которая указывает на файл
xmlrpc.php
установки WordPress. Этот файл всегда существует в корне WordPress. - Затем мы создаем объект клиента XML-RPC и передаем URL конструктору.
- Затем мы даем указание библиотеке преобразовать данные ответов в переменную массива PHP, чтобы их было легко читать и работать с данными ответов. Работать с необработанными данными ответов XML будет сложно, так как мы должны проанализировать XML.
- Затем мы создаем объект сообщения запроса с параметрами для функции
wp.getAuthors
. Первый параметр — это идентификатор блога, два других параметра — это имя пользователя и пароль администратора. - Далее мы отправляем запрос XML-RPC.
- Наконец мы получаем ответ. Если есть ошибка, мы отображаем ошибку, в противном случае мы зацикливаем свойство value объекта ответа, чтобы напечатать основную информацию авторов.
Создание сообщения
Мы только что увидели, как легко получить список авторов, вот как вы можете создать сообщение:
<?php include("lib/xmlrpc.inc"); $function_name = "wp.newPost"; $url = "http://sitepoint.com/xmlrpc.php"; $client = new xmlrpc_client($url); $client->return_type = 'phpvals'; $message = new xmlrpcmsg( $function_name, array( new xmlrpcval(0, "int"), new xmlrpcval("my_cool_username", "string"), new xmlrpcval("my_super_secret_password", "string"), new xmlrpcval( array( "post_type" => new xmlrpcval("post", "string"), "post_status" => new xmlrpcval("draft", "string"), "post_title" => new xmlrpcval("Sitepoint is Awesome", "string"), "post_author" => new xmlrpcval(1, "int"), "post_excerpt" => new xmlrpcval("excerpt", "string"), "post_content" => new xmlrpcval("content", "string") ), "struct" ) ) ); $resp = $client->send($message); if ($resp->faultCode()) echo 'KO. Error: '.$resp->faultString(); else echo "Post id is: " . $resp->value(); ?>
в<?php include("lib/xmlrpc.inc"); $function_name = "wp.newPost"; $url = "http://sitepoint.com/xmlrpc.php"; $client = new xmlrpc_client($url); $client->return_type = 'phpvals'; $message = new xmlrpcmsg( $function_name, array( new xmlrpcval(0, "int"), new xmlrpcval("my_cool_username", "string"), new xmlrpcval("my_super_secret_password", "string"), new xmlrpcval( array( "post_type" => new xmlrpcval("post", "string"), "post_status" => new xmlrpcval("draft", "string"), "post_title" => new xmlrpcval("Sitepoint is Awesome", "string"), "post_author" => new xmlrpcval(1, "int"), "post_excerpt" => new xmlrpcval("excerpt", "string"), "post_content" => new xmlrpcval("content", "string") ), "struct" ) ) ); $resp = $client->send($message); if ($resp->faultCode()) echo 'KO. Error: '.$resp->faultString(); else echo "Post id is: " . $resp->value(); ?>
Здесь мы вызвали функцию wp.newPost
. Вместе с идентификатором блога, именем пользователя и паролем. Мы также передали тип структуры, содержащий тип сообщения, статус, заголовок, содержание, автора и выдержку.
Примечание. Обнаружение запроса XML-RPC
Небольшое примечание: если вы разработчик плагинов или тем, вы можете захотеть, чтобы ваш код функционировал по-разному для запросов XML-RPC. WordPress позволяет темам и плагинам определять, обрабатывает ли WordPress запрос XML-RPC.
Вот код для обнаружения запросов XML-RPC:
if(defined('XMLRPC_REQUEST')) { // XML-RPC request } else { // Normal HTTP request }
Вывод
В этой статье мы рассмотрели основы XML-RPC для WordPress, включая основы XML-RPC и то, как WordPress раскрывает этот протокол. Мы также продемонстрировали, как выполнять различные операции при установке WordPress с использованием XML-RPC. Теперь вы можете создать XML-RPC-клиент для мобильных устройств, компьютеров или веб-приложений для WordPress.