程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> WebService-php- 2(17),webservice-php-17

WebService-php- 2(17),webservice-php-17

編輯:關於PHP編程

WebService-php- 2(17),webservice-php-17


wsdl實例

<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions
targetNamespace='http://localhost/00/'
xmlns:tns='http://localhost/00/'
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
xmlns='http://schemas.xmlsoap.org/wsdl/'>
<!--<types> 元素定義 web service 使用的數據類型,WSDL 使用 XML Schema 語法來定義數據類型,也可以自定義Schema不包含的類型-->
<types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://localhost/00/">
</xsd:schema>
</types>
<!--
<message> 元素可定義每個消息的部件,以及相關聯的數據類型.
-->
<message name='testRequest'>
<part name="term" type="xsd:string"/>
</message>
<message name='testResponse'>
<part name="value" type="xsd:string"/>
</message>
<!--
<portType> 元素是最重要的 WSDL 元素.它可描述一個 web service、可被執行的操作,以及相關的消息.
它告訴你去哪個WebService的連接點,扮演了一個控制者.
-->
<portType name='oplist'>
<operation name='test'>
<input message='tns:testRequest'/>
<output message='tns:testResponse'/>
</operation>
</portType>
<!--<binding> 元素為每個端口定義消息格式和協議細節-->
<binding name='cartSoap' type='tns:oplist'>
<!--style:屬性可取值 "rpc" 或 "document",ransport:屬性定義了要使用的 SOAP 協議.在這個例子中我們使用 HTTP-->
<soap:binding style='rpc'
transport='http://schemas.xmlsoap.org/soap/http'/>
<!--operation 元素定義了每個端口提供的操作符,對於每個操作,相應的 SOAP 行為都需要被定義-->
<operation name='test'>
<soap:operation soapAction='http://www.cwtservice.cn/newOperation/'/>
<input>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</input>
<output>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</output>
</operation>
</binding>
<!--<service>包含一個或者多個port元素,每個port元素表示一個不同的Web服務-->
<service name='shopWS'>
<port name='cartSoap' binding='tns:cartSoap'>
<soap:address location='http://localhost/00/wss.php'/>
</port>
</service>
</definitions>

Server端示例:

function test($x) {
return $x;
}
$ss = new SoapServer('http://localhost/00/wsdl.xml');
$ss->addFunction('test');
$ss->handle();

Client調用:

$soap = new soapClient('http://localhost/00/wsdl.xml',array('trace'=>true));
var_dump($soap->test('10086'));

傳遞和返回數組參數
如果傳遞或返回的參數為數組,可以在message標簽中做說明.

<message name='testRequest'>
<part name="term" type="xsd:ArrayOfString"/>
</message>
<message name='testResponse'>
<part name="value" type="xsd:ArrayOfString"/>
</message>

XML-RPC調用

XML-RPC可以理解為簡化版的soap,對數據的包裝相對簡潔.
php.ini中,要打開extension=php_xmlrpc.dll
/*
求和函數
注意,rpc服務器在調用函數時,傳的參數是這樣的:
array(0=>'函數名' , 1=>array(實參1,實參2,...實參N) , 2=>NULL)
*/
function hello() {
return 'hello';
}
function sum($method , $args , $extra) {
return array_sum($args);
}
// 創建RPC Server
$server = xmlrpc_server_create ();
xmlrpc_server_register_method ($server , 'hello' , 'hello');
xmlrpc_server_register_method ($server , 'sum' , 'sum');
// 收取請求
$request = $HTTP_RAW_POST_DATA;
//執行調用客戶端的XML請求後獲取執行結果
$xmlrpc_response = xmlrpc_server_call_method($server, $request , null);
//把函數處理後的結果XML進行輸出
header('Content-Type: text/xml');
echo $xmlrpc_response;
//銷毀XML-RPC服務器端資源
xmlrpc_server_destroy($server);

 客戶端:

class rpcclient {
protected $url;
public function __construct($url='' ) {
$this->url = $url;
}
protected function query($request) {
$context = stream_context_create(array('http' => array(
'method' => "POST",
'header' => "Content-Type: text/xml",
'content' => $request
)));
$xml = file_get_contents($this->url, false, $context);
return xmlrpc_decode($xml);
}
public function __call($method , $args) {
$request = xmlrpc_encode_request($method , $args);
return $this->query($request);
}
}
$rpc = new rpcclient('http://localhost/00/rpcs.php');
var_dump($rpc->hello());
var_dump($rpc->sum(4,5,6));

WebService與json Api的區別

      WebService   json API
數據封裝  XML       json
復雜度   高        低
底層協議     不限        HTTP
數據類型     可嚴格定義    不可嚴格定義
自說明        性自說明    需額外API文檔

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved