XML-RPC協議

來源:互聯網
上載者:User
【http://hedong.3322.org/archives/000470.html】XML-RPC協議

  xml-rpc 是一套規範及其一系列的實現,允許運行在不同作業系統、不同環境的程式基於internet進行遠端程序呼叫。
  這種遠端程序呼叫使用http作為傳輸協議,xml作為傳送資訊的編碼格式。Xml-Rpc的定義儘可能的保持了簡單,但同時能夠傳送、處理、返回複雜的資料結構。

  Xml-rpc是工作在internet上的遠端程序呼叫協議。一個xml-rpc訊息就是一個請求體為xml的http-post請求,被調用的方法在伺服器端執行並將執行結果以xml格式編碼後返回。
  程序呼叫參數可以是標量、數值、字串、日期等,也可以是複雜的記錄或列表結構(list structures,即數群組類型).
  XML-RPC請求的例子:
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<
  要求標頭部的要求:


  • 一行中,URI的格式可以不指定。例如,如果服務只處理XML-RPC調用,
    它可以為空白,或只是一個斜線。然而,如果伺服器要處理各種HTTP請求,則我們應讓URI能協助將請求路由到處理這個XML-RPC請求的代碼上。
    (例子中,URI是/RPC2, 這告訴伺服器將這個請求路由到“RPC2”應答程式上.)
  • User-Agent和Host必須指定.
  • Content-Type須是text/xml.
  • Content-Length必須指定且必須正確.

  承載的格式:

  • 有效資訊在一個單一的XML結構<methodCall> 中.
  • <methodCall>
    須含有一個<methodName>子項,這是一個字串,含有要調用的方法(過程)的名字。該字串只能含有字母(大小寫A-Z),
    數字(0-9), 底線, 點, 冒號和斜線(/). 伺服器決定如何解釋methodName的字元.
  • 例如,methodName 可能是一個指令碼的名字(指令碼在接到某個請求時運行),可能是一個資料庫表中某個記錄的某個欄位,或可能是一個含有目錄和檔案的結構的檔案的路徑名。

  • 果程序呼叫有參數則 <methodCall> 必須包含一個<params>子項. <params>
    可以包含任意數量的 <param>子項, 每個<param>含有一個<value>子項.

  純量資料型別(scalar )
  參數值<value>可以是標量,用類型標籤將值包括起來。如果沒指定類型,則認為是string類型。類型標籤如下表:

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編碼的位元據 eW91IGNhbid0IHJlYWQgdGhpcyE=

  結構資料類型(<struct>)
  參數值也可以是<struct>類型一個<struct>可含有幾個<member>項,每
個<member>含有一個<name>項和一個<value>項。<member>
的<value>值可以為任何類型,可為標量類型、<array>甚至<struct>(即可以遞迴).例子:
<struct>
   <member>
      <name>lowerBound</name>
      <value><i4>18</i4></value>
      </member>
   <member>
      <name>upperBound</name>
      <value><i4>139</i4></value>
      </member>
</struct>
  數組資料類型(<array>)
  參數值也可以是<array>類型一個<array>含有單一的 <data>
元素,<data>元素可以含有任意數量的<value>,
這裡的<value>沒有name.每個<value>的資料類型可各不相同,如下例所示。
  <data>的<value>值可以為任何類型,可為標量類型、 <struct>甚至<array>(即可以遞迴).
<array>
   <data>
      <value><i4>12</i4></value>
      <value><string>Egypt</string></value>
      <value><boolean>0</boolean></value>
      <value><i4>-31</i4></value>
    </data>
</array>
  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>
  XML-RPC應答格式:

  • 除非有低層錯誤,總是要返回200 OK.
  • Content-Type須是 text/xml. Content-Length 必須出現且值準確.
  • 應答包體是一個單一XML結構 <methodResponse>, 它可以包含單一的<params>
    ,<params>含有單一的<param>, <param> 含有單一<value>.
  • <methodResponse> 也可以包含一個<fault>,
    它含有一個<struct>類型的<value>,這個<struct>中含有兩個元素,一個名
    為<faultCode>的<int>值,一個名為 <faultString>的<string>.
  • <methodResponse>不能同時包含 <fault> 和<params>.

  XML-RPC調用失敗時的應答的例子:
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>
  策略與目標:

  • Firewalls. 這個協議的目標,是在不同的環境之間,鋪設一個相容性的基礎,它沒有超越CGI能力的新功能。防火牆軟體可以監視Content-Type為text/xml的post類型的請求。
  • Discoverability. 我們要求它是一個簡單的、 乾淨的可擴充的的格式。它應該可能滿足: 一個HTML編碼器能夠通過讀一個含有XML-RPC的檔案, 明白它在做什麼, 且能修改它以及 在第一次或第二次請求時讓它工作起來.
  • Easy to implement. 我們還要求它是一個易於實現的協議,能很快在其它的環境或作業系統上跑起來。

參考資料:

  1. Dave Winer, XML-RPC Specification, http://www.xmlrpc.com/spec
  2. Trier, XML-RPC入門, http://www.javaresearch.org/article/showarticle.jsp?column=46&thread=4037
  3. Userland, XML-RPC Home,
    http://www.xmlrpc.com/

Posted by Hilton at February 9, 2004 09:25 PM
| TrackBack

Comments

一般用這個開源包,
http://ws.apache.org/xmlrpc/

Posted by: Hilton at February 18, 2004 05:34 PM

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.