跳转到内容

XML-RPC

维基百科,自由的百科全书

这是本页的一个历史版本,由Tomchiukc留言 | 贡献2010年9月1日 (三) 07:26编辑。这可能和当前版本存在着巨大的差异。

XML-RPC是一個远端过程调用remote procedure call,RPC)的分布式计算通信協定,通过XML将调用函数封装,並使用HTTP协议作為傳送機制[1]

歷史

XML-RPC發表於1998年,由UserLand SoftwareDave WinerMicrosoft共同發表[2]。後來在新的功能不斷被引入下,這個標準慢慢演變成為今日的SOAP協定。

XML-RPC協定是已登記的專利項目,由Phillip Merrick、Stewart Allen及Joseph Lapp共同持有,於1998年3月提出申請,指其將用於一個構想中的應用程式,並於2006年4月獲得接納。The patent is assigned to webMethods, located in Fairfax, VA.[3]

Usage

XML-RPC works by sending a HTTP request to a server implementing the protocol. The client in that case is typically software wanting to call a single method of a remote system. Multiple input parameters can be passed to the remote method, one return value is returned. The parameter types allow nesting of parameters into maps and lists, thus larger structures can be transported. Therefore XML-RPC can be used to transport objects or structures both as input and as output parameters.

Identification of clients for authorization purposes can be achieved using popular HTTP security methods. Basic access authentication is used for identification, HTTPS is used when identification (via certificates) and encrypted messages are needed. Both methods can be combined.

In comparison to REST, where resources are transported, XML-RPC is designed to call methods.

XML-RPC is simpler to use and understand than SOAP because it

  • allows only one method of method serialization, whereas SOAP defines multiple different encodings
  • has a simpler security model
  • does not require (nor support) the creation of WSDL service descriptions, although XRDL provides a simple subset of the functionality provided by WSDL

JSON-RPC is similar to XML-RPC.

Data types

Common datatypes are converted into their XML equivalents with example values shown below:

Name Tag Example Description
array
<array>
  <data>
    <value><i4>1404</i4></value>
    <value><string>Something here</string></value>
    <value><i4>1</i4></value>
  </data>
</array>
Array of values, storing no keys
base64
<base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64>
Base64-encoded binary data
boolean
<boolean>1</boolean>
Boolean logical value (0 or 1)
date/time
<dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>
Date and time in ISO 8601 format
double
<double>-12.53</double>
Double precision floating point number
integer
<i4>42</i4>

or

<int>42</int>
Whole number, integer
string
<string>Hello world!</string>
String of characters. Must follow 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>
Associative array
nil
<nil/>
Discriminated null value; an XML-RPC extension

Examples

An example of a typical XML-RPC request would be:

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

An example of a typical XML-RPC response would be:

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

A typical XML-RPC fault would be:

<?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>

Criticism

Critics of XML-RPC argue that RPC calls can be made with plain XML, and that XML-RPC doesn't add any value over XML. Both XML-RPC and XML require an application level data model, such as which field names are defined in the XML schema or the parameter names in XML-RPC [4] [5] [6]

Implementations

Python

C++

Objective-C / GNUstep / Cocoa

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 http://www.xmlrpc.org/

Java

XMPP

Other

See also

參考資料

  1. ^ Simon St. Laurent, Joe Johnston, Edd Dumbill. Programming Web Services with XML-RPC. First Edition. O'Reilly. 2001-06. 
  2. ^ Box, Don. A Brief History of SOAP. O'Reilly. 2001-04-01 [2008-10-09]. 
  3. ^ Merrick; et al. US Patent 7,028,312. 11 April 2006 [18 September 2008]. 
  4. ^ What is the benefit of XmlRpc over plain XML? StackOverflow post 9.9.2009
  5. ^ [1] An open poll on the merits of XmlRpc versus alternatives
  6. ^ [2] An overview of all the alternatives

外部連結