XML-RPC

XML-RPC (от англ. eXtensible Markup Language Remote Procedure Call — XML-вызов удалённых процедур) — стандарт/протокол вызова удалённых процедур, использующий XML для кодирования своих сообщений и HTTP в качестве транспортного механизма[1]. Является прародителем SOAP, отличается исключительной простотой в применении. XML-RPC, как и любой другой интерфейс Remote Procedure Call (RPC), определяет набор стандартных типов данных и команд, которые программист может использовать для доступа к функциональности другой программы, находящейся на другом компьютере в сети.

Протокол XML-RPC был изначально разработан Дэйвом Винером из компании «UserLand Software» в сотрудничестве с Майкрософт, в 1998 году. Однако корпорация Майкрософт вскоре сочла этот протокол слишком упрощённым, и начала расширять его функциональность. После нескольких циклов по расширению функциональности, появилась система, ныне известная как SOAP. Позднее Майкрософт начала широко рекламировать и внедрять SOAP, а изначальный XML-RPC был отвергнут. Но, несмотря на отвержение его Майкрософтом, стандарт XML-RPC очаровал многих программистов своей необычайной простотой и, за счёт этого, существует по сей день и даже постепенно набирает популярность.

Типы данных

[править | править код]
Имя типа Пример тега Описание типа
array
 <array>    <data>      <value><i4>1404</i4></value>      <value><string>Что-нибудь здесь</string></value>      <value><i4>1</i4></value>    </data>  </array> 
Массив величин, без ключей
base64
<base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64> 
Кодированные в Base64 двоичные данные
boolean
<boolean>1</boolean> 
Логическая (булева) величина (0 или 1)
date/time
<dateTime.iso8601>19980717T14:08:55</dateTime.iso8601> 
Дата и время
double
<double>-12.53</double> 
Дробная величина двойной точности
integer
<i4>42</i4> 
Целое число
string
<string>Здравствуй, Мир!</string> 
Строка символов (в той же кодировке, что и весь XML-документ)
struct
 <struct>    <member>      <name>Что-то</name>      <value><i4>1</i4></value>    </member>    <member>      <name>Ещё что-то</name>      <value><i4>2</i4></value>    </member>  </struct> 
Массив величин, с ключами
nil
<nil/> 
Нулевая (пустая) величина — это расширение XML-RPC

Типичный пример запроса XML-RPC:

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

Типичный пример ответа на запрос XML-RPC:

 <?xml version="1.0"?>  <methodResponse>    <params>      <param>          <value><string>South Dakota</string></value>      </param>    </params>  </methodResponse> 

Типичный пример ошибки на запрос XML-RPC:

<?xml version="1.0"?> <methodResponse>   <fault>     <value>       <struct>         <member>           <name>faultCode</name>           <value><int>4</int></value>         </member>         <member>           <name>faultString</name>           <value><string>Too many parameters.</string></value>         </member>       </struct>     </value>   </fault> </methodResponse> 

При этом тэги с типом данных при передаче от клиента могут быть опущены и не указываться вовсе.

Недавние критики (начиная с 2010 года и далее) XML-RPC утверждают, что вызовы RPC могут быть сделаны с простым XML, и что XML-RPC не добавляет никакой ценности по сравнению с XML. Как XML-RPC, так и XML требуют модель данных уровня приложения, например, какие имена полей определены в схеме XML или имена параметров в XML-RPC. Более того, XML-RPC использует примерно в 4 раза больше байтов по сравнению с обычным XML для кодирования тех же объектов, что само по себе многословно по сравнению с JSON.

  1. Simon St. Laurent, Joe Johnston, Edd Dumbill. (June 2001) Programming Web Services with XML-RPC. O'Reilly. First Edition.