XML-RPC协议规范
Overview
XML-RPC是运行在internet之上的远程过程(函数)调用协议。
一个XML-RPC消息就是一个HTTP-POST请求。请求发送的数据主体是XML形式。
在服务端过程被执行并且也已XML的形式返回值。
过程的参数可以是数字,字符串,日期等等还可以是复合数据和列表结构。
Request样例
- POST /RPC2 HTTP/1.0
- User-Agent: Frontier/5.1.2 (WinNT)
- Host: betty.userland.com
- Content-Type: text/xml
- Content-length: 181
- <?xml version="1.0"?>
- <methodCall>
- <methodName>examples.getStateName</methodName>
- <params>
- <param>
- <value><i4>41</i4></value>
- </param>
- </params>
- </methodCall>
必须的HTTP头(HTTP头介绍查看:http://www.aspstat.com/92)
在头的第一行里的URI格式没有任何要求。例如,如果服务只处理XML-RPC请求,则可以是空,也可以是一个斜杠。尽管如此,如果服务需要处理多种HTTP请求,我们允许通过URI来让相应的代码来处理XML-RPC请求。
User-Agent,Host必须指定。
Content-Type必须是text/xml。
Content-Length必须指定并且要正确。
数据主体的格式
请求的数据主体用一个<methodCall>结构的XML。
<methodCall>必须包含一个<methodName>子节点,并且元素值是一个包含调用方法名称的字符串。字符串只能是包含这些标识字符,区分大小写的A-Z,数字0-9,下划线,点,冒号,斜扛。methodName完全依赖于服务程序这样去解析它。
例如,methodName可以是一个包含脚本的文件名。也可以是数据库表中某个字段名。还可以一个包含目录和文件结构的文件路径。如果过程调用有参数的话,<methodCall>元素还必须包含一个<params>子节点。<params>元素能包含任意数量的<param>元素,每个<param>元素还有一个<value>子节点。
标量值<value>s
类型根据镶套值的标签指定,下表列出了对应的标签。
Tag Type Example
<i4> or <int> 4字节带符号整形 -12
<boolean> 0(false) or 1(true) 1
<string> 字符串 hello world
<double> 双精度带符号浮点数 -12.214
<dateTime.iso8601> 日期/时间 19980717T14:08:55
<base64> base64-encoded二进制 eW91IGNhbid0IHJlYWQgdGhpcyE=
如果表中没有相应类型,则用string来处理。
<struct>s
一个值也可以是一个<struct>类型
一个<struct>包含<member>s,每个<member>包含一个<name>以及<value>
如:
- <struct>
- <member>
- <name>lowerBound</name>
- <value><i4>18</i4></value>
- </member>
- <member>
- <name>upperBound</name>
- <value><i4>139</i4></value>
- </member>
- </struct>
<struct>s可以递归,任何<value>可能包含一个<struct>或者其他类型,包括<array>,下面将说明。
<array>s
一个值也可以是<array>类型
一个<array>包含唯一的一个<data>元素,它能够包含任何数量的<value>s
例如:
- <array>
- <data>
- <value><i4>12</i4></value>
- <value><string>Egypt</string></value>
- <value><boolean>0</boolean></value>
- <value><i4>-31</i4></value>
- </data>
- </array>
<array>元素没有names
<array>s可以递归,任何值可能包含一个<array>或任何其他类型,包括上面介绍的<struct>
Response example
下面是一个 XML-RPC请求回送例子:
- HTTP/1.1 200 OK
- Connection: close
- Content-Length: 158
- Content-Type: text/xml
- Date: Fri, 17 Jul 1998 19:55:08 GMT
- Server: UserLand Frontier/5.1.2-WinNT
- <?xml version="1.0"?>
- <methodResponse>
- <params>
- <param>
- <value><string>South Dakota</string></value>
- </param>
- </params>
- </methodResponse>
回送格式
除非发生错误,否则始终返回200状态码(HTTP返回状态码介绍:http://www.aspstat.com/93)
Context-Type为text/xml.
Content-Length必须指定并且正确。
回送的主题一个<methodResponse>结构XML。<methodResponse>可以包含一个单一的<params>,<params>必须包含一个单一的<param>并且包含一个单一的<value>
<methodResponse>也可以包含一个<fault>,<fault>包含一个包含<struct>的<value>,<struct>有二个子元素,一个叫做<faultCode>,是<int>,一个叫做<faultString>,是<string>.
<methodResponse>不能同时包含一个<fault>和<params>
Fault示例
- HTTP/1.1 200 OK
- Connection: close
- Content-Length: 426
- Content-Type: text/xml
- Date: Fri, 17 Jul 1998 19:55:02 GMT
- Server: UserLand Frontier/5.1.2-WinNT
- <?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>
source url: http://www.xmlrpc.com/spec
- 你的姓名:
- 你的网站:
- EMAIL:
- 评论内容:
- 私人

