XML-RPC协议规范

香水坏坏 发表于 2007-9-21 [specification]

Overview

XML-RPC是运行在internet之上的远程过程(函数)调用协议。

一个XML-RPC消息就是一个HTTP-POST请求。请求发送的数据主体是XML形式。
在服务端过程被执行并且也已XML的形式返回值。

过程的参数可以是数字,字符串,日期等等还可以是复合数据和列表结构。

Request样例

XML/HTML代码
  1. POST /RPC2 HTTP/1.0   
  2. User-Agent: Frontier/5.1.2 (WinNT)   
  3. Host: betty.userland.com   
  4. Content-Type: text/xml   
  5. Content-length: 181   
  6.   
  7. <?xml version="1.0"?>  
  8. <methodCall>  
  9.    <methodName>examples.getStateName</methodName>  
  10.    <params>  
  11.       <param>  
  12.          <value><i4>41</i4></value>  
  13.       </param>  
  14.    </params>  
  15. </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>

如:

XML/HTML代码
  1. <struct>  
  2.    <member>  
  3.       <name>lowerBound</name>  
  4.       <value><i4>18</i4></value>  
  5.    </member>  
  6.    <member>  
  7.       <name>upperBound</name>  
  8.       <value><i4>139</i4></value>  
  9.    </member>  
  10. </struct>  

 

<struct>s可以递归,任何<value>可能包含一个<struct>或者其他类型,包括<array>,下面将说明。

<array>s

一个值也可以是<array>类型


一个<array>包含唯一的一个<data>元素,它能够包含任何数量的<value>s

例如:

XML/HTML代码
  1. <array>  
  2.    <data>  
  3.       <value><i4>12</i4></value>  
  4.       <value><string>Egypt</string></value>  
  5.       <value><boolean>0</boolean></value>  
  6.       <value><i4>-31</i4></value>  
  7.    </data>  
  8. </array>  

 

<array>元素没有names

<array>s可以递归,任何值可能包含一个<array>或任何其他类型,包括上面介绍的<struct>

Response example


下面是一个 XML-RPC请求回送例子:

XML/HTML代码
  1. HTTP/1.1 200 OK   
  2. Connection: close   
  3. Content-Length: 158   
  4. Content-Type: text/xml   
  5. Date: Fri, 17 Jul 1998 19:55:08 GMT   
  6. Server: UserLand Frontier/5.1.2-WinNT   
  7.   
  8. <?xml version="1.0"?>  
  9. <methodResponse>  
  10.    <params>  
  11.       <param>  
  12.          <value><string>South Dakota</string></value>  
  13.      </param>  
  14.    </params>  
  15. </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示例

 

XML/HTML代码
  1. HTTP/1.1 200 OK   
  2. Connection: close   
  3. Content-Length: 426   
  4. Content-Type: text/xml   
  5. Date: Fri, 17 Jul 1998 19:55:02 GMT   
  6. Server: UserLand Frontier/5.1.2-WinNT   
  7.   
  8. <?xml version="1.0"?>  
  9. <methodResponse>  
  10.    <fault>  
  11.       <value>  
  12.          <struct>  
  13.             <member>  
  14.                <name>faultCode</name>  
  15.                <value><int>4</int></value>  
  16.             </member>  
  17.             <member>  
  18.                <name>faultString</name>  
  19.                <value><string>Too many parameters.</string></value>  
  20.             </member>  
  21.         </struct>  
  22.      </value>  
  23.   </fault>  
  24. </methodResponse>  

 

source url: http://www.xmlrpc.com/spec

1132 0 标签:HTTP protocol XML XML-RPC 协议 
访客评论
    发表评论
    • 你的姓名:
    • 你的网站:
    •   EMAIL:   
    • 评论内容:
    • 私人