XML-RPC

XML-RPC是一個远程过程调用Remote Procedure Call,RPC)的分布式计算協議,通过XML将调用函数封装,並使用HTTP协议作為傳送機制。[1]

歷史

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

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

用法

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

JSON-RPC(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>
boolean
<boolean>1</boolean>
布尔型邏輯值 (0 或 1)
date/time
<dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>
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
  • Creating XML-RPC Servers and Clients with Twisted (页面存档备份,存于互联网档案馆

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
  • [1]: 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

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
  • [2] (页面存档备份,存于互联网档案馆): RebXR, a full client/server XML-RPC implementation for REBOL.

參看

參考資料

  1. ^ Simon St. Laurent, Joe Johnston, Edd Dumbill. Programming Web Services with XML-RPC. First Edition. O'Reilly. 2001-06.  引文格式1维护:冗余文本 (link)
  2. ^ Box, Don. A Brief History of SOAP. O'Reilly. 2001-04-01 [2008-10-09]. (原始内容存档于2008-09-15). 
  3. ^ Merrick; et al. US Patent 7,028,312. 2006-04-11 [2008-09-18]. (原始内容存档于2011-12-03).  引文格式1维护:显式使用等标签 (link)

外部連結