XML-RPC

XML-RPC是一個远程过程调用（，RPC）的分布式计算協議，通过XML将调用函数封装，並使用HTTP协议作為傳送機制。

 歷史 

XML-RPC發表於1998年，由UserLand Software（）的Dave Winer及Microsoft共同發表。後來在新的功能不斷被引入下，這個標準慢慢演變成為今日的SOAP協定。

XML-RPC協定是已登記的專利項目，由Phillip Merrick、Stewart Allen及Joseph Lapp共同持有，於1998年3月提出申請，指其將用於一個構想中的應用程式，並於2006年4月獲得接納。現時這個專利由位於美國維珍尼亞州費爾法克斯的webMethods使用。

 用法 
XML-RPC调用过程是由客户端通过向实现XML-RPC的服务器发送HTTP请求并接收响应实现。一次调用包含多个参数和一个结果。协议为参数和结果定义了若干数据类型。这些数据类型可以包含嵌套的，例如可以构建由五个整数组成的数组作为参数。

参数-结果结构和不同数据类型旨反映常见编程语言中使用的结构和数据类型。

可以使用流行的 HTTP 安全方法实现客户端的授权识别。基本认证可用于识别和身份验证。

JSON-RPC跟 XML-RPC 相類似。

数据类型

以下的例子為日常的数据类型在轉化為等同的XML後的面貌：
 名稱 標記範例 描述array<array>
  <data>
    <value><i4>1404</i4></value>
    <value><string>Something here</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>以ISO 8601格式存储的日期和时间double<double>-12.53</double>雙倍精確浮點數integer<i4>42</i4>
or
<int>42</int>整數string<string>Hello world!</string>字符串，必須遵守XML encoding（XML encoding）的格式。struct<struct>
  <member>
    <name>foo</name>
    <value><i4>1</i4></value>
  </member>
  <member>
    <name>bar</name>
    <value><i4>2</i4></value>
  </member>
</struct>结构体nil<nil/>

 範例 

以下為一個尋常的 XML-RPC 請求的範例：
<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>

相對於上述請求，以下為一個尋常回應的範例：
<?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>

 批評 

 实现 
 Python 
 xmlrpclib
 Renamed xmlrpc.client  in Python 3.
 Creating XML-RPC Servers and Clients with Twisted 
 C++ 
 Libiqxmlrpc 
 Ultra lightweight XML-RPC library for C++ 
 XML-RPC for C and C++ 
 XmlRpc++ 
 XmlRpc C++ client for Windows 
 gSOAP toolkit for C and C++ supporting XML-RPC and more 
 libmaia: XML-RPC for Qt/C++ 

 Objective-C / GNUstep / Cocoa 
 XMLRPC Framework 
 Cocoa XML-RPC Framework : Open Source XML-RPC framework written for use in Mac OS X Cocoa applications.
 Erlang 
 XML-RPC for Erlang: This is an HTTP 1.1 compliant XML-RPC library for Erlang. It is designed to make it easy to write XML-RPC Erlang clients and/or servers. The library is compliant with the XML-RPC specification published by https://web.archive.org/web/20051210031514/http://www.xmlrpc.org/
 Java 
 Apache XML-RPC : Open source library for Java
 XML-RPC Delight : Convenient serialisation/deserialisation for Apache XML-RPC using Java Annotations and Beans
  Secure Apache XML-RPC  
 Redstone XML-RPC Library : Redstone's Open Source Library - XML-RPC implementation in Java
 XML-RPC Library for Java ME : Open source client-side library for Java ME

 XMPP 
 pyJabberXMLRPC : Python classes for XMPP
 Jabber-RPC : Over the Extensible Messaging and Presence Protocol protocol

 Other 
 JSON/XML-RPC Client and Server : Abstract away the differences between JSON-RPC and XML-RPC
 RemObjects SDK  Delphi and .NET package for XML-RPC, in addition to SOAP and others
 RealThinClient SDK : For Delphi/C++
 XML::RPC : Perl module implementation
 XML-RPC for ActionScript : For Flash ActionScript 2.0
 as3-rpclib : For Flex/Actionscript 3
  XML-RPC.NET: Open source library for .NET clients and servers
 XmlRpc-Light : Client and server library for OCaml
 S-XML-RPC : Client and server library for Common Lisp
 PHP-XML-RPC : For PHP
 HaXR: Client and server library for Haskell
 xi library with PHP and Javascript XML-RPC: For PHP and Javascript
 Ruby XML-RPC library: For Ruby
 XML-RPC interface to Lua: For Lua
 android-xmlrpc : A light XML-RPC client for Google Android
 XML-RPC for Tcl : A Tcl implementation of XML-RPC providing client and server support
  : RebXR, a full client/server XML-RPC implementation for REBOL.

 參看 
AJAX
Component technologies
List of Web service markup languages
OPML
Web服務

 參考資料 

 外部連結 
 XML-RPC Homepage 
 Forum 
 Tutorials
 Technology Reports 
 Citations from CiteSeer 

Category:基于XML的标准
Category:Web服务规范
Category:网际协议
Category:分布式计算
Category:遠端程序呼叫