跳转到内容

XML-RPC

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

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

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月獲得接納。現時這個專利由位於美國維珍尼亞州費爾法克斯webMethods使用[3]

用法

XML-RPC透過向裝置了這個協定的伺服器發出HTTP請求。發出請求的用戶端一般都是需要向遠端系統要求呼叫的軟件。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.

数据类型

以下的例子為日常的数据类型在轉化為等同的XML後的面貌:

名稱 標記範例 描述
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>
布尔型邏輯值 (0 或 1)
date/time
<dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>
Date and time in ISO 8601 format
double
<double>-12.53</double>
雙精度浮點數字
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

參看

參考資料

  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. 2006-04-11 [2008-09-18]. 
  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

外部連結