XML-RPC Спецификация

Опубликовано Опубликовано в рубрике Новости

Перевод оригинальной спецификации XML-RPC Specification

Перевод: Виталий Скальный 13 Январь 2016

Частичное или полное использование материалов данной статьи разрешается только при условии ссылки и/или прямой открытой для поисковых систем гиперссылки на непосредственный адрес материала на моем сайте.

Нарушение данного требования может трактоваться как нарушение авторского права.

 Данная страница содержит всю необходимую информацию, которая может вам понадобиться.

Обзор

XML-RPC — это протокол удаленного вызова процедур, который работает через Интернет.

XML-RPC запрос — это http — запрос отправленный методом Post. Тело запроса в формате XML. Процедура выполняется на сервере и ее результат, также возвращается в формате XML.

Параметрами процедуры могут быть скалярные величины, числа, строки, даты и т. д., а также могут быть сложными комбинированными и структурными.

Пример запроса

Это пример XML-RPC запроса:

POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181

<?xml version="1.0"?>
<methodCall>
   <methodName>examples.getStateName</methodName>
   <params>
      <param>
         <value><i4>41</i4></value>
      </param>
    </params>
</methodCall>

Требование к заголовку

Формат URI в первой строке заголовка не обязателен. Например, он может быть пустым, одиночный сплеш, если сервер обрабатывает только XML-RPC запросы. Однако если сервер обрабатывает сочетание входящих http запросов, заголовок URI поможет серверу корректно перенаправить запрос на код обрабатывающий xml-RPC запросы. (В нашем примере URI /RPC2 говорит серверу что запросы XML-RPC необходимо перенаправлять скрипту /RPC2.)

User-Agent и Host должен быть указан.

Content-Type равен text/xml.

Content-Length должен быть указан и должен юыть правильным.

Требование к телу сообщения:

Тело сообщения должно быть в XML формате в единственной <methodCall> теге.

В теге <methodCall> должен содержаться <methodName> тег, это строка, содержащая имя метода, который мы вызываем. Строка может содержать только символы верхнего и нижнего регистра от A до Z, цифровые символы, 0-9, символ подчеркивания, точку, двоеточие и Слэш. Имя метода зависит исключительно от сервера, чтобы решить, как интерпретировать символы в имя_метода.

Например, параметр methodname может быть Именем файла, содержащего скрипт, который выполняется на входящий запрос. Это может быть имя ячейки в таблице базы данных. Или это может быть путь к файлу в иерархии папок и файлов.

Если у вызываемой процедуры есть параметры, то <methodCall> должен содержать тег <params>, который может содержать любое количество тэгов <param>, каждый из которых имеет <value>.

Скалярные значения

Тег <value> может содержать значения скалярного типа, тип обозначает вложенное значение внутри одного из тегов. Перечень возможных скалярных типов:

  • <i4> или <int> — четырехбайтовое знаковое целое число
  • <boolean> — булевое 0 (false) или 1 (true)
  • <string> — строка
  • <double> — число с плавающей точкой двойной точности
  • <dateTime.iso8601> — дата/время в формате 19980717T14:08:55
  • <base64> — в base64-кодировке

если тип не указан, по умолчанию принимается строка.

Структурное значение <struct>

Значение может также быть типа структура <struct>

Тег <struct> содержит теги <member>, а каждый тег <member> содержит тег  <name> и <value>

Пример двух-элементной структуры:

<struct>
    <member>
      <name>lowerBound</name>
      <value><i4>18</i4></value>
      </member>
   <member>
      <name>upperBound</name>
      <value><i4>139</i4></value>
    </member>
</struct>

Структура может быть рекурсивной, значение <value> может содержать новую структуру <struct> или значение любого другого типа, включая Массивы <array>, которые будут описаны ниже.

Массив <array>

Значение <value> может быть типа Массив <array>.

Тег <array> содержит единичный тег <data>который, в свою очередь содержит любое количество тегов <value>.

Это пример четырег-элементного массива:

<array>
   <data>
      <value><i4>12</i4></value>
      <value><string>Egypt</string></value>
      <value><boolean>0</boolean></value>
      <value><i4>-31</i4></value>
    </data>
</array>

<array> элементы не имеют имен.

Вы можете смешивать элементы, как на примере выше.

Массив может быть рекурсивным, значение <value> может содержать новый массив <array> или значение любого другого типа, включаю Структуру <struct>, которая была описана выше.

 

Ответы XML-RPC сервера будут описаны позже.

Спасибо за внимание.