首頁  >  文章  >  後端開發  >  詳解php soap實作web service介面服務

詳解php soap實作web service介面服務

藏色散人
藏色散人轉載
2020-01-16 17:52:583382瀏覽

web service是什麼,不多說,可參考百科說明web service百度百科

soap是一種協議,屬於web service實作所使用的一種技術規格。

web service的介面實作有兩種方式,一種是需要產生wsdl文件的方式,一種是不需要產生wsdl文件的方式。

在實際操作之前,先檢查一下自己的環境,是否支援soap,然後修改一下php.ini設定文件,將「soap.wsdl_cache_enabled」項目設為0。

不需要產生wsdl文件的方式

這種方式相較於需要產生wsdl文件的方式,更簡單一些,但是有一些方法並不支持,例如取得操作方法的__getFunctions(),是否合用看自己的選擇。

server端ts1.php

<?php
class testA{
        public function sayHi($str){
                return &#39;hi,&#39;.$str;
        }
        public function add($a,$b){
                return $a+$b;
        }
}
$ss = new SoapServer(null, array(&#39;uri&#39;=>&#39;sampleA&#39;));
$ss->setClass(&#39;testA&#39;);
$ss->handle();

在server端ts1.php檔案中,建立了一個類,然後建立SoapServer並做設置,uri用來確保一致性。

client端tc1.php

<?php
$client = new SoapClient(null, array(
        &#39;location&#39;=>&#39;http://10.0.0.232:1075/soap/ts1.php&#39;,
        &#39;uri&#39;=>&#39;sampleA&#39;
        ));
echo $client->sayHi(&#39;Taylor,Swift&#39;);
echo "<br/>";
echo $client->add(1,2);

在client端,使用SoapClient物件來進行請求,location指明請求的特定位址,uri的值與server端設定的一致,用來保證一致性。

在瀏覽器輸入http://10.0.0.232:1075/soap/tc1.php來進行訪問,可以看到輸出如下圖所示:

詳解php soap實作web service介面服務

這種方式無需生成wsdl文檔,實現簡便,但同樣的,因為沒有wsdl文檔,client也無法獲取到相關的操作方法,而生成wsdl文檔的方式,client端就可以單獨根據一個請求地址來取得到server端公開的所有介面。

產生wsdl文檔的方式

wsdl文檔是一個xml文檔,通常可以使用公開的類別庫SoapDiscovery來生成,我用百度網盤共享一下需要可以直接下載SoapDiscovery.class.php。

server端ts2.php

<?php
define(&#39;WSDL_FILE&#39;,&#39;ts2.wsdl&#39;);
if(!file_exists(WSDL_FILE)){
        require_once(&#39;SoapDiscovery.class.php&#39;);
        $sd = new SoapDiscovery(&#39;testD&#39;, &#39;liang&#39;);
        $str = $sd->getWSDL();
        file_put_contents(WSDL_FILE, $str);
}
$ss = new SoapServer(WSDL_FILE);
$ss->setClass(&#39;testD&#39;);
$ss->handle();
class testD{
        public function sayHello($world){
                return &#39;hello,&#39;.$world;
        }
        public function add($a, $b){
                return $a+$b;
        }
}

server端的ts2.php先偵測了一下需要的wsdl檔案是否存在,若不存在則創建,然後創建SoapServer對象並進行設置,因為使用的是wsdl文檔,所以new SoapServer時直接寫入wsdl文檔的地址即可。

client端tc2.php

<?php
$client = new SoapClient(&#39;http://10.0.0.232:1075/soap/ts2.wsdl&#39;);
print_r($client->__getFunctions());
echo "<br/>";
echo $client->sayHello(&#39;Avril Lavigne&#39;);
echo "<br/>";
echo $client->add(9,8);

在client端的tc2.php檔案中,建立SoapClient物件時,直接填入的是請求的wsdl文件的位址,這個文檔是由ts2.php產生的。

現在,server端的ts2.php與client端的tc2.php都已經寫好了,那麼現在就需要請求一下ts2.php了,為什麼要請求它?

因為我們需要先透過ts2.php來建立wsdl文件,當然,只有在第一次的時候需要這樣做,當wsdl文件創建好之後,就不需要再這樣做了。

(如果後期修改了ts2.php,那還是需要刪除掉舊的wsdl文檔,然後重新請求ts2.php用來產生新的wsdl文檔。)

1、請求ts2.php用來產生wsdl文件http://10.0.0.232:1075/soap/ts2.php。

2、請求tc2.php查看回傳結果:

詳解php soap實作web service介面服務

#3、透過瀏覽器,直接存取wsdl文件的位址,可以看到wsdl文件的具體內容:

詳解php soap實作web service介面服務

php soap也支援各種其它的操作,例如鑑權,頭設定等,這些功能如有需要,可以參閱官方文件。

以上是詳解php soap實作web service介面服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除