XML-RPC
XML-RPC是一个远程过程调用(Remote Procedure Call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为发送机制。[1]
历史
XML-RPC发表于1998年,由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请求。发出请求的客户端一般都是需要向远程系统要求调用的软件。
数据类型
以下的例子为日常的数据类型在转化为等同的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
- 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
- [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
- 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
- [2] (页面存档备份,存于互联网档案馆): RebXR, a full client/server XML-RPC implementation for REBOL.
参看
参考资料
- ^ Simon St. Laurent, Joe Johnston, Edd Dumbill. Programming Web Services with XML-RPC. First Edition. O'Reilly. 2001-06.
- ^ Box, Don. A Brief History of SOAP. O'Reilly. 2001-04-01 [2008-10-09]. (原始内容存档于2008-09-15).
- ^ Merrick; et al. US Patent 7,028,312. 2006-04-11 [2008-09-18]. (原始内容存档于2011-12-03).