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
|
|
Логическая (булева) величина (0 или 1)
|
date/time
|
<dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>
|
Дата и время
|
double
|
|
Дробная величина двойной точности
|
integer
|
|
Целое число
|
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
|
|
Нулевая (пустая) величина — это расширение 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.
См. также
Ссылки
- ↑ Simon St. Laurent, Joe Johnston, Edd Dumbill. (June 2001) Programming Web Services with XML-RPC. O'Reilly. First Edition.