·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> WebService-php- 2(17)

WebService-php- 2(17)

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
WebService-php- 2(17)

wsdl实例

<?xml version ='1.0' encoding ='UTF-8' ?><definitionstargetNamespace='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文档