《PHPWeb程序设计教程与实验》第13章基于PHP的Web服务第13章基于PHP的Web服务13.1XML-RPC工作原理13.2基于PHP5和XML-RPC的Web服务13.3SOAP协议13.4基于PHP5和SOAP的Web服务13.1XML-RPC工作原理13.1.1RPC概述13.1.2XML-RPC协议的工作原理13.1.3使用XML-RPC的Web服务13.1.1RPC概述RPC(远程过程调用)是一个标准编程接口,它采用客户/服务器模式,调用程序(称为客户)通过网络,将消息传输给服务器的方法或者过程,执行过程,返回结果给调用程序,客户端调用程序接收响应信息,获得结果,然后调用程序执行继续进行。RPC体系结构如图13.1所示。图13.1RPC网络通信体系结构13.1.2XML-RPC协议的工作原理XML-RPC即XML远程过程调用,是一种规范和一组实现方案,允许运行于不同操作系统、不同平台环境下的软件通过Internet进行远程过程调用。XML-RPC使用HTTP作为传输协议,XML为传送信息的编码格式。客户端将XML-RPC请求编码为XML格式,发出HTTPPOST请求,将请求消息传输给服务器。13.1.2XML-RPC协议的工作原理XML-RPC规范包含了HTTP报头、XML-RPC请求、有效负载格式、XML-RPC响应和错误处理。HTTP报头POST/xmlrpc/xmlrpc_server.phpHTTP/1.0User-Agent:xmlrpc-epi-php/1.0(PHP)Host:localhost:80Content-Type:text/xmlContent-length:191XML-RPC请求?xmlversion='1.0'encoding=UTF-8?methodCallmethodNamegreet/methodNameparamsparamvaluestringWangHui/string/value/param/params/methodCall13.1.2XML-RPC协议的工作原理XML-RPC响应HTTP/1.1200OKConnection:closeContent-Length:191Content-Type:text/xmlDate:Sat,07May200508:12:58GMTServer:Apache/2.0.52(Win32)?xmlversion='1.0'encoding=UTF-8?methodResponseparamsparamvaluestringHello,WangHui/string/value/param/params/methodResponse13.1.3使用XML-RPC的Web服务Web服务是一个运行于Web服务器上的应用程序,Web客户也是一个运行在Web服务器的应用程序。13.2基于PHP5和XML-RPC的Web服务13.2.1支持XML-RPC的PHP5配置13.2.2编写基于PHP5和XML-RPC的Web服务程序13.2.3编写基于PHP5和XML-RPC的Web客户端程序13.2.1支持XML-RPC的PHP5配置Linux和Unix系统需要使用“--with-xmlrpc=XMLRPC目录”配置选项来编译PHP。Windows系统修改PHP配置文件php.ini的extension_dir参数值,将其值设置为扩展动态库的安装路径(比如C:/php5/ext/),并增加一行参数extension:extension_dir=C:/php5/ext/extension=php_xmlrpc.dll13.2.2编写基于PHP5和XML-RPC的Web服务程序PHP5的XML-RPC扩展提供编写Web服务的函数:handlexmlrpc_server_create()该函数创建一个XML-RPC服务器。voidxmlrpc_server_destroy(handleserver)该函数销毁服务器资源。intxmlrpc_server_register_method(handleserver,stringmethod_name,stringfunction)该函数将一个PHP自定义函数注册为Web服务的方法。arrayxmlrpc_server_call_method(handleserver,stringxml,mixeduser_data[,arrayoutput_options])该函数接收XML-RPC请求,调用由XML-RPC请求指定的web服务方法13.2.2编写基于PHP5和XML-RPC的Web服务程序【例13.1】以下PHP程序定义了两个用户自定义函数,并注册为Web服务。一个是计算两个数的和,另一个是根据客户端传递来的名字,返回字符串“XXXX,你好”。13.2.3编写基于PHP5和XML-RPC的Web客户端程序XML-RPC的Web客户端程序是向Web服务发送POST请求数据,获取响应结果的程序。相关函数:stringxmlrpc_encode_request(stringmethod,mixedparams[,arrayoutput_options])该函数生成方法调用或者应答的XML文档。arrayxmlrpc_decode_request(stringxml,string&method[,encoding])该函数将XML解码为本地的PHP数据类型,它也返回方法名。13.2.3编写基于PHP5和XML-RPC的Web客户端程序stringxmlrpc_encode(mixedvalue)该函数将PHP的值编码为XML。arrayxmlrpc_decode(stringxml[,stringencoding])该函数将XML解码为本地的PHP数据类型。13.2.3编写基于PHP5和XML-RPC的Web客户端程序PHP的Web客户端程序的编程步骤:(1)Web客户端与Web服务所在的主机建立Socket连接。(2)向该Socket写入XML编码的XML-RPC请求数据。。(3)等待Web服务返回响应结果。(4)对返回值作进一步的处理。【例13.3】在客户端输入两个数值,调用Web服务sum,计算这两个数的和,返回给客户端13.3SOAP协议13.3.1SOAP协议13.3.2WSDL协议13.3.1SOAP协议SOAP(SimpleObjectAccessProtocol,简单对象访问协议)是在分布式环境中通过XML编码进行分布式应用程序之间交换数据的网络协议,是一种轻量级的、基于XML的协议。SOAP消息由一个SOAP信封、可选的SOAP消息头和一个必需的SOAP消息体组成的XML文档。SOAP信封。其元素名为Envelope,是表示SOAP消息的XML文档的顶级元素。可选的SOAP消息头。其元素名为Header,提供向SOAP消息中添加关于这个SOAP消息的某些特性的机制。如果给出SOAP消息头,那么它必须是Envelope元素的第一个子元素。SOAP消息体。它包含了调用请求和参数信息或者应答返回的数据。13.3.2WSDL协议WSDL是一个用于描述Web服务所提供的方法、以及这些方法的访问方式的XML文档。在一个WSDL文档中,所有的参数和Web服务的方法名称都有详细的说明,同时还包括了Web服务的位置、绑定的传输协议等。13.3.2WSDL协议一个WSDL文档是由5个主要元素组成:types元素message元素portType元素binding元素service元素13.4基于PHP5和SOAP的Web服务13.4.1支持SOAP的PHP5配置13.4.2基于SOAP的Web服务的客户端程序设计13.4.3基于SOAP的Web服务程序设计13.4.4基于PHP5和GoogleWebAPI的搜索引挚程序设计13.4.1支持SOAP的PHP5配置Windows系统只需在PHP的配置文件php.ini中增加一行:extension=php_soap.dll。Unix和Linux系统必须在配置和编译PHP时,带上开关参数—enable-soap13.4.2基于SOAP的Web服务的客户端程序设计使用SOAP扩展的SoapServer类和SoapClient类所提供的方法,编写Web服务及其客户端程序SoapClient类的常用方法:objectSoapClient(mixedwsdl_uri[,arrayoptions])以WSDL模式或非WSDL模式实例化一个SoapClient类的对象。arraySoapClient-__getFunctions()返回一个由SoapClient对象调用的服务中所包含的所有方法构成的字符串数组stringSoapClient-__getLastRequest()查看SOAP请求消息。13.4.3基于SOAP的Web服务程序设计SoapServer类的方法:objectSoapServer(mixedwsdl[,arrayoptions])SoapServer()构造方法以WSDL模式或非WSDL模式来实例化SoapServer类的对象voidSoapServer-addFunction(mixedfunctions)将一个或多个PHP自定义函数设置为Web服务的方法,这些方法供Web服务客户端调用。voidSoapServer-handle([stringsoap_request])该方法接收来自Web服务客户端的SOAP请求,调用相应的方法,返回响应结果给客户端。13.4.4基于PHP5和GoogleWebAPI的搜索引挚程序设计Google搜索引挚提供了基于SOAP的Web服务。它允许开发者使用任何支持Web服务的编程语言,在不同的开发环境下编写客户端程序,调用其Web服务。GoogleWeb服务提供了以下三个API方法:doGetCachedPage(string$key,string$url)从Google缓冲页面中检索与URL相符的页面内容doSpellingSuggestion(string$key,string$phrase)对用户提交的搜索关键字进行拼写检查。doGoogleSearch(string$key,string$q,int$start,int$maxResults,boolean$filter,string$restrict,boolean$safeSearch,string$lr,string$ie,string$oe)该方法返回与用户输入的搜索关键字相符的查询结果。