利用PHP SOAP实现web service
一 什么是SOAP?可以做什么?
SOAP 指簡(jiǎn)單對(duì)象訪問協(xié)議,它是一種基于XML的消息通訊格式,用于網(wǎng)絡(luò)上,不同平臺(tái),不同語(yǔ)言的應(yīng)用程序間的通訊。可自定義,易于擴(kuò)展。一條 SOAP 消息就是一個(gè)普通的 XML 文檔,包含下列元素:
? Envelope 元素,標(biāo)識(shí)XML 文檔一條 SOAP 消息
? Header 元素,包含頭部信息的XML標(biāo)簽
? Body 元素,包含所有的調(diào)用和響應(yīng)的主體信息的標(biāo)簽
? Fault 元素,錯(cuò)誤信息標(biāo)簽。
?
二 什么是WSDL?可以做什么?
WSDL 指網(wǎng)絡(luò)服務(wù)描述語(yǔ)言。是一種基于XML編寫的文檔。為用戶提供詳細(xì)的接口說明書。
怎樣向別人介紹你的Web服務(wù)(Web Service)有哪些功能,以及每個(gè)函數(shù)調(diào)用時(shí)的參數(shù)呢?你可能會(huì)自己寫一套文檔,甚至可能會(huì)口頭告訴使用你Web服務(wù)的人。
這些非正式的的方法至少都有一個(gè)嚴(yán)重的問題:當(dāng)程序員坐到電腦前,想要使用你的Web服務(wù)的時(shí)候,他們的開放環(huán)境無(wú)法給他們提供任何幫助,因?yàn)檫@些工具根本不了解你的Web服務(wù).
解決方法是:用機(jī)器能閱讀的方式提供一個(gè)正式的描述文檔。Web服務(wù)描述語(yǔ)言(WSDL)就是這樣一個(gè)基于XML的語(yǔ)言。用于描述Web服務(wù)及其函數(shù),參數(shù),返回值。因是基于XML,所以WSDL即使機(jī)器可閱讀,又是人可閱讀的。
?
三 利用PHP SOAP實(shí)例Web Service
php有兩個(gè)擴(kuò)展可以實(shí)現(xiàn)web service,一個(gè)是NuSoap,一個(gè)是php 官方的soap擴(kuò)展,由于soap是官方的,所以我們這里以soap來(lái)實(shí)現(xiàn)web service.由于默認(rèn)是沒有打開soap擴(kuò)展的,所以自己先看一下soap擴(kuò)展有沒有打開。
在soap編寫web service的過程中主要用到了SoapClient,SoapServer,SoapFault三個(gè)類。
?
SoapClient類
這個(gè)類用來(lái)使用Web services。SoapClient類可以作為給定Web services的客戶端。
它有兩種操作形式:
* WSDL 模式
* Non-WSDL 模式
在WSDL模式中,構(gòu)造器可以使用WSDL文件名作為參數(shù),并從WSDL中提取服務(wù)所使用的信息。
non-WSDL模式中使用參數(shù)來(lái)傳遞要使用的信息。
?
SoapServer類
這個(gè)類可以用來(lái)提供Web services。與SoapClient類似,SoapServer也有兩種操作模式:WSDL模式和non-WSDL模式。這兩種模式的意義跟 SoapClient的兩種模式一樣。在WSDL模式中,服務(wù)實(shí)現(xiàn)了WSDL提供的接口;在non-WSDL模式中,參數(shù)被用來(lái)管理服務(wù)的行為。
在SoapServer類的眾多方法中,有三個(gè)方法比較重要。它們是SoapServer::setClass(),SoapServer::addFunction()和SoapServer::handle()。
?
?
四 實(shí)例
定義一個(gè)提供服務(wù)的php類,這個(gè)類所提供的函數(shù)就是web service對(duì)外提供的服務(wù)
Class PersonInfo {/*** 返回姓名* @return string **/public function getName($name){return "My Name is " . $name;} }?
?
下面給出服務(wù)器端的代碼:
//包含提供服務(wù)的類進(jìn)來(lái) include 'test.php'; /*創(chuàng)建soap服務(wù)端參數(shù)1 : wsdl的URL地址,如果不是wsdl模式,傳個(gè)NULL參數(shù)2 : 如果是wsdl模式,可以不傳.如果不是wsdl模式,傳個(gè)數(shù)組.定義個(gè)uri子單元.*/ $s = new SoapServer(null,array("uri"=>"此處隨便寫,只是命名空間"));//設(shè)置用于處理SOAP請(qǐng)求的類 $s -> setClass("PersonInfo"); //處理請(qǐng)求 $s -> handle();?
?
下面給出客戶端的代碼:
try{//創(chuàng)建soap的客戶端//參數(shù)1 wdsl地址//參數(shù)2[location] 處理soap請(qǐng)求的地址. //參數(shù)2[uri] 命名空間$soap = new SoapClient(null,array('location'=>"http://localhost/test2.php",'uri'=>'hwhwthhsdhg'));//兩種調(diào)用方式,直接調(diào)用方法,和用__soapCall調(diào)用echo $r = $soap->getName('tlijian1989'); }catch(SoapFault $e){echo $e->getMessage(); }catch(Exception $e){echo $e->getMessage(); }?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/tlijian/p/3621192.html
總結(jié)
以上是生活随笔為你收集整理的利用PHP SOAP实现web service的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cypress学习笔记4——编写第二个测
- 下一篇: Java MQTT 客户端之 Paho