php soap 詳解 附簡單案例

2021-06-16 13:42:55 字數 2920 閱讀 4064

soap在php中開發有三種,php5 soap,pear soap,nusoap,第一中用c寫的,速度較快。後兩種用php寫的。

安裝

在window下開發要開啟c:/windows/php.ini修改下。

extension=php_openssl.dll

extension=php_soap.dll

重啟apache,看下是否soap支援。

linux下安裝,在編譯php時候帶上enable-soap。

使用

php的soap擴充套件可以用來提供和使用web services。換句話說,php開發者可以利用這個php擴充套件來寫他們自己的web services,也可以寫一些客戶端來使用給定的web services。

soap擴充套件支援以下規範。

* soap 1.1

* soap 1.2

* wsdl 1.1

soap擴充套件主要用來處理rpc形式的web services。不過,你也可以使用文字形式的wsdl檔案配合wsdl模式的服務端和客戶端。

這個擴充套件使用 gnome xml庫來處理xml。

擴充套件中的類

soapclient類

這個類用來使用web services。soapclient類可以作為給定web services的客戶端。

它有兩種操作形式:

* wsdl 模式

* non-wsdl 模式

在wsdl模式中,構造器可以使用wsdl檔名作為引數,並從wsdl中提取服務所使用的資訊。

non-wsdl模式中使用引數來傳遞要使用的資訊。這個類有許多可以用來使用服務的有用的方法。其中soapclient::__soapcall()是最重要的。這個方法可以用來呼叫服務中的某個操作。

soapserver類

這個類可以用來提供web services。與soapclient類似,soapserver也有兩種操作模式:wsdl模式和non-wsdl模式。這兩種模式的意義跟 soapclient的兩種模式一樣。在wsdl模式中,服務實現了wsdl提供的介面;在non-wsdl模式中,引數被用來管理服務的行為。

在soapserver類的眾多方法中,有三個方法比較重要。它們是

soapserver::setclass(),

soapserver::addfunction(),

soapserver::handle()。

soapserver::setclass()方法設定用來實現web service的類。soapserver::setclass所設定的類中的所有公共方法將成為web services的操作(operation)。

soapserver::addfunction()方法用來新增乙個或多個作為web services操作(operation)的函式。

soapserver:: handle()方法指示web service指令碼開始處理進入的請求。web service指令碼是用php指令碼寫的乙個或多個soapserver物件的例項。儘管你可以有不止乙個的soapserver物件,但通常的習慣是乙個指令碼只擁有乙個soapserver例項。在呼叫soapserver::handle()方法之前,web service指令碼會使用設定在soapserver物件例項上的任何資訊來處理進入的請求和輸出的相應。

soapfault類

這個類從exception類繼承而來,可以用來處理錯誤。soapfault例項可以丟擲或獲取soap錯誤的相關資訊並按程式設計師的請求處理。

soapheader類

這個類可以用來描述soap headers。它只是乙個只包含構造器方法的資料容器。

soapvar類

wsdl vs. non-wsdl模式

web services有兩種實現模式:契約先行(contract first)模式和**先行(code first)模式。

契約先行模式使用了乙個用xml定義的服務介面的wsdl檔案。wsdl檔案定義了服務必須實現或客戶端必須使用的介面。soapserver和soapclient的wsdl模式就基於這個概念。

在**先行模式中,首先要先寫出實現服務的**。然後在大多數情況下,**會產生乙個契約,換種說法,乙個wsdl。接著客戶端在使用服務的時候就可以使用那個wsdl來獲得服務的介面。儘管如此,php5的擴充套件並沒有從**輸出乙個wsdl的規定,考慮到這種情況,可以在non-wsdl模式下使用 soapserver和soapclient。

soap擴充套件與hello world

這一節介紹如何使用wsdl模式和non-wsdl模式來實現服務和客戶端。相對而言,使用wsdl模式來實現服務和客戶端會比較容易,假定已經有乙個定義了介面的wsdl檔案。因此這一節會先介紹如何使用wsdl模式實現乙個web service。

在這個hello world例子的服務中有乙個被命名為greet的操作。這個操作有乙個字串形式的名字並返回乙個字串形式的greeting。

wsdl模式服務

下面是wsdl模式的服務所使用的soap擴充套件api**:

plain textphp:

function greet($param) catch (exception $e) catch (exception $e) {

printf(」message = %s/n」,$e->__tostring());

結論這篇文章介紹了soap擴充套件,可以在php中通過它來提供和使用web services。php擴充套件的強項是它的簡單和快速。使用c寫的soap擴充套件來執行服務端和客戶端是非常簡單的。雖然soap擴充套件在處理一些簡單的 web services時很有用,但是當用它來處理所有的web services時就表現出它的侷限性。 wso wsf/php就是為了彌補php擴充套件的缺陷而開發的,它是開源的,可以實現soap類似的功能並且支援mtom,ws-addressing,ws- security和ws-relaiablemessaging。wso2 wsf/php 支援與soap擴充套件類似的api。

python pexpect模組詳解附常用指令碼

wgettar zxvf pexpect 2.4.tar.gz cd pexpect 2.4 python setup.py install spawn是pexpect模組主要的類,用以實現啟動子程式,它有豐富的方法與子程式互動從而實現使用者對子程式的控制。示例 child pexpect.spaw...

CAS詳解附原始碼

cas 也就是compareandswap 比較並交換,主要為了解決多執行緒下的原子性,大體思想就是在更新前,進行比較,舉個例子atomicinteger 下的compareandset expect,update expect 為期望值也就是未更新的值,update是如果期望值相同則更新的值。首先...

C namespace案例詳解

在c 語言編寫的程式中,變數和函式等的作用範圍是有一定限制的。比如,在函式體中定義的乙個臨時變數就不可以在函式體外使用。為了解決變數和函式等的作用範圍,在c 語言中引入了名空間的概念,並增加了關鍵字namespace和using 在乙個名空間中可以定義一組變數和函式,這些變數和函式的作用範圍一致,可...