- 相關(guān)推薦
在PHP中利用XML技術(shù)構造遠程服務(wù)
未來(lái)的Web將是以服務(wù)為中心的Web,XML_RPC標準使得編寫(xiě)和應用服務(wù)變得非常簡(jiǎn)單。本文介紹XML_RPC標準及其PHP實(shí)現,并通過(guò)實(shí)例示范了如何在PHP中開(kāi)發(fā)XML_RPC服務(wù)和客戶(hù)程序。
一、服務(wù)式Web
從內容提供商所采用的簡(jiǎn)單方法到UDDI(Universal Description,Discovery and Integration)的未來(lái)構想,業(yè)界已經(jīng)有大量關(guān)于“服務(wù)式Web”的說(shuō)明和評論。就Web的初創(chuàng )階段來(lái)說(shuō),它只是一個(gè)文檔的集散地,提供的只是一些可瀏覽的信息。隨著(zhù)Web的發(fā)展,在Web上運行服務(wù)越來(lái)越具有吸引力。未來(lái),Web將成為企業(yè)為客戶(hù)和其他企業(yè)提供便捷服務(wù)的載體。B2B和B2C模式間的協(xié)同就可以看成是一種服務(wù)式Web。
一個(gè)很重要的問(wèn)題是,Web上究竟可以提供哪些服務(wù)?Web能夠提供的服務(wù)非常多,其中有些服務(wù)現在已經(jīng)在使用,有些服務(wù)在不久的將來(lái)就會(huì )出現。為了說(shuō)明問(wèn)題,下面列出了一小部分可以通過(guò)Web提供的服務(wù):
面向主題的垂直搜索引擎。
供用戶(hù)查找信息的知識庫。
用戶(hù)可以請教問(wèn)題的專(zhuān)家系統。
銀行服務(wù)。
新聞和信息出版服務(wù)。
數字化支付相關(guān)的服務(wù)。
圖形處理服務(wù)。
衛生和健康服務(wù)。
那么,企業(yè)和組織通過(guò)Web提供服務(wù)的正確途徑是什么呢?這是一個(gè)很重要的問(wèn)題。今天,有些服務(wù)提供HTML界面,它們通過(guò)文檔的形式提供服務(wù),但在服務(wù)界面的背后隱藏著(zhù)什么?在占領(lǐng)Web的競賽中,Web瀏覽器并不孤單,移動(dòng)電話(huà)、手持設備以及微波爐之類(lèi)的設備都想要訪(fǎng)問(wèn)Web、查詢(xún)數據庫、轉換數據、提取信息,等等。要實(shí)現真正的服務(wù)式Web,在表現層(HTML)之下應該還有另外一層。
二、XML_RPC標準
XML或許是近10年來(lái)最為重要的標準,XML詞匯表(Vocabulary)為企業(yè)構造服務(wù)環(huán)境提供了基石。要構建服務(wù)式Web就有必要學(xué)XML_RPC標準,這不僅是因為XML_RPC對于把服務(wù)放到Web上很有用,而且因為XML_RPC是一種已經(jīng)成形的、很容易采用的標準。對于B2B服務(wù)來(lái)說(shuō),提供服務(wù)的標準是極其重要的,共同遵循標準的公司可以利用其它公司提供的服務(wù)獲得快速的增長(cháng)。無(wú)法想象在各種私有的服務(wù)標準之上可以建立起真正的服務(wù)式Web,服務(wù)必須有一種可以遵循的標準。
XML_RPC是一種面向Internet分布式處理的標準。RPC即為Remote Procedure Call(遠程過(guò)程調用)的縮寫(xiě),它是一種遠程調用機制,用于調用可能駐留在其他機器之上以及可能用其他語(yǔ)言編寫(xiě)的過(guò)程。遠程過(guò)程調用是分布式計算的重要支柱。例如,在一個(gè)分布式計算環(huán)境中,我們可以尋找和利用在其他機器上運行的執行加法和減法操作的過(guò)程,執行加法操作的過(guò)程可能用APL編寫(xiě)、在RS6000機器上運行,執行減法操作的過(guò)程可能用C編寫(xiě)、在Unix上運行。其他要使用這種分布式計算器的開(kāi)發(fā)者同樣可以利用它們,或者他也可以選用另外更好的計算器。
在RPC中,過(guò)程(Procedure)是最主要的構件,服務(wù)器提供的就是供客戶(hù)端調用的過(guò)程。過(guò)程可以接收參數并返回結果。XML_RPC以HTTP作為協(xié)議載體,通過(guò)發(fā)送和接收數據的XML詞匯表實(shí)現RPC機制。XML_RPC服務(wù)器接收XML_RPC請求并返回XML_RPC應答,XML_RPC客戶(hù)程序發(fā)送XML_RPC請求并接收XML_RPC應答。服務(wù)器和客戶(hù)必須按照XML_RPC標準的要求處理應答和請求。
三、XML_RPC協(xié)議
完整的XML_RPC規范可以在http://www.xmlrpc.com/spec找到。下面是其要點(diǎn)說(shuō)明。
3.1 XML_RPC請求
XML_RPC請求應該是HTTP POST請求,它的正文是XML格式。請求的XML部分格式如下:
。?xml version="1.0" ?>
。糾ethodCall>
。糾ethodName>examples.getStateName</methodName>
。紁arams>
。紁aram>
。紇alue><i4>41</i4></value>
。/param>
。/params>
。/methodCall>
指定數據發(fā)送到哪里的URL并未在這里指定。如果服務(wù)器專(zhuān)門(mén)用來(lái)進(jìn)行RPC處理,它可能是“/”。上述XML文檔中的有效載荷是一個(gè)“methodCall”結構。methodCall必須包含一個(gè)“methodName”子元素,“methodName”子元素包含一個(gè)描述待調用方法的字符串。如何解釋“methodName”的內容完全由服務(wù)器決定,例如它可以是一個(gè)執行文件的名字,可以是數據庫中記錄的名字,或者任何其他東西。如果過(guò)程接收參數,“methodCall”可以包含一個(gè)“params”元素以及若干個(gè)“param”子元素。每一個(gè)“param”元素包含一個(gè)帶有類(lèi)型描述符的值,類(lèi)型描述符如下表所示:
標記 說(shuō)明
。糹4>或<int> 四字節的帶符號整數,如12
。糱oolean> 0(false),或1(true)
。約tring> 字符串,如“Hello World”
。糳ouble> 雙精度帶符號浮點(diǎn)數,如-12.214
。糳ateTime.iso8601> 日期/時(shí)間,如19980717T14:08:55
。糱ase64> base64編碼的二進(jìn)制數據,如eW91IGbid0IHJlQgdGhpcyE
3.1.1 結構
值可以是一個(gè)結構,結構用元素描述。每個(gè)包含多個(gè),每個(gè)包含一個(gè)和一個(gè)。下面是一個(gè)由兩個(gè)元素構成的結構:
。約truct>
。糾ember>
。糿ame>name</name>
。紇alue><string>member1</string></value>
。/member>
。糾ember>
。糿ame>member2</name>
。紇alue><i4>19</i4></value>
。/member>
。/struct>
可以嵌套,任意可以包含或者任意其它類(lèi)型,包括。
3.1.2 數組
值可以是數組類(lèi)型,數組用元素描述。每個(gè)元素包含一個(gè)元素,元素里面可以包含任意多個(gè)元素。下面是數組元素的一個(gè)例子:
。糰rray>
。糳ata>
。紇alue><boolean>0</boolean></value>
。紇alue><i4>9</i4></value>
。紇alue><string>Hello</string></value>
。/data>
。/array>
元素沒(méi)有名字。如前例所示,元素的值可以是各種類(lèi)型。元素可以嵌套,任何都可以包含或者其他類(lèi)型,如上面介紹的。
3.2 XML_RPC應答
XML_RPC應答是一個(gè)HTTP應答,內容類(lèi)型是text/xml。應答正文的格式如下:
。?xml version="1.0"?>
。糾ethodResponse>
。紁arams>
。紁aram>
。紇alue><string>ABCDEFG</string></value>
。/param>
。/params>
。/methodResponse>
可能包含一個(gè)結構,或者可能包含一個(gè)結構,具體由過(guò)程調用是否成功決定。結構與XML請求中的一樣,元素的語(yǔ)法如下:
。糵ault>
。紇alue>
。約truct>
。糾ember>
。糿ame>faultCode</name>
。紇alue><int>4</int></value>
。/member>
。糾ember>
。糿ame>faultString</name>
。紇alue><string>Error!</string></value>
。/member>
。/struct>
。/value>
。/fault>
【在PHP中利用XML技術(shù)構造遠程服務(wù)】相關(guān)文章:
關(guān)于XML技術(shù)在數據交換中的應用09-28
簡(jiǎn)單介紹php構造函數用法08-31
PHP中curl的使用實(shí)例07-31
PHP中函數的使用說(shuō)明09-01
PHP中的排序函數區別分析08-23
php中dirname()和--FILE--常量的用法09-26