PHP中使用XML-RPC构造WebService简单入门

Web Service就是为了异构系统的通信而产生的,它基本的思想就是使用基于XML的HTTP的远程调用提供一种标准的机制,而省去建立一种新协议的需求。目前进行Web Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。

  PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是PHP 4还是PHP 5,都已经默认集成了XML-RPC扩展,而且该扩展跟xmlrpc扩展无关,能够独立实现XML-RPC的协议交互,假如没有xmlrpc扩展,建议使用PEAR::XML-RPC扩展。

  我们这里主要是以XML-RPC来简单描述Web Service的交互过程,部分内容来自PHP手册,更具体内容,建议参考手册。

[ 安装xmlrpc扩展 ]

  假如你的系统中没有安装xmlrpc的php扩展,那么请正确安装。

  在Windows平台下,首先把PHP安装目录下的扩展php_xmlrpc.dll放到C:Windows或者C:Winnt目录下,(PHP4的扩展在C:phpextensions目录中,PHP5的扩展在C:phpext目录中),同时在C:Windowsphp.ini或者C:Winntphp.ini中把extension=php_xmlrpc.dll前面的分号";"去掉,然后重启Web服务器后查看phpinfo()有没有XML-RPC项目就能够确定是否已经正确安装xmlrpc扩展。

  在Unix/Linux平台下,假如没有安装xmlrpc扩展,请在重新编译PHP,在configure的时候请加入 --with-xmlrpc 选项,然后查看phpinfo()看是否正常安装xmlrpc。

  (注重:以下操作都是建立在xmlrpc扩张正常安装前提下,请务必正确安装。)

[ XML-RPC工作原理 ]

  XML-RPC大致就是整个过程就是使用XML来进行通信。首先构造一个RPC 服务器端用来出来从RPC客户端传递过来的使用XML封装的请求,并且把处理结果通过XML的形式返回给RPC客户端,客户端就去分析XML获取自己需要的数据。

  XML-RPC的服务器端必须有现成的函数提供给客户端调用,并且客户端提交的请求中的函数和方法必须和服务器端的一致,否则将无法获取所需要的结果。

  下面我进行简单的代码来描述整个过程。

[ XML-RPC实践 ]

  服务器端使用xmlrpc_server_create函数产生一个服务器端,然后把需要需要暴露的RPC调用接口进行注册,接受RPC客户端POST过来的XML数据,然后进行处理,处理结果通过XML的形式显示给客户端。

  代码如下: rpc_server.php

<?php
/**
* 函数:提供给RPC客户端调用的函数
* 参数:
* $method 客户端需要调用的函数
* $params 客户端需要调用的函数的参数数组
* 返回:返回指定调用结果
*/
function rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == "get")
{
$return = 'This data by get method';
}
else
{
$return = 'Not specify method or params';
}
return $return;
}

//产生一个XML-RPC的服务器端
$xmlrpc_server = xmlrpc_server_create();

//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");

//接受客户端POST过来的XML数据
$request = $HTTP_RAW_POST_DATA;

//执行调用客户端的XML请求后获取执行结果
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);

//把函数处理后的结果XML进行输出
header('Content-Type: text/xml');
echo $xmlrpc_response;

//销毁XML-RPC服务器端资源
xmlrpc_server_destroy($xmlrpc_server);
?>

  服务器端构造好了,那么再构造我们的RPC客户端。客户端大致通过Socket访问XML-RPC服务器端的80端口,然后把需要调用的RPC接口封装到XML里,通过POST请求提交给RPC服务器端,最后获取服务器端返回结果。

  代码如下:rpc_client.php

<?php
/**

时间: 2024-07-29 00:22:24

PHP中使用XML-RPC构造WebService简单入门的相关文章

在PHP中利用XML技术构造远程服务(转)

xml|远程服务 在PHP中利用XML技术构造远程服务 未来的Web将是以服务为中心的Web,XML_RPC标准使得编写和应用服务变得非常简单.本文介绍XML_RPC标准及其PHP实现,并通过实例示范了如何在PHP中开发XML_RPC服务和客户程序. 一.服务式Web 从内容提供商所采用的简单方法到UDDI(Universal Description,Discovery and Integration)的未来构想,业界已经有大量关于"服务式Web"的说明和评论.就Web的初创阶段来说,

在PHP中利用XML技术构造远程服务(2)

xml|远程服务 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  四.基于XML_RPC的Web服务 利用XML_RPC构造和使用服务是很方便的.企业为自己提供的各种服务部署XML_RPC服务器,用户.客户软件和客户企业就可以使用这种服务构造出高端服务或者面向最终用户的应用.这种提供更有效.廉价和优质服务的竞争将极大地提高应用服务的质量. 但这里还存在一些问题有待解决

在PHP中利用XML技术构造远程服务(1)

xml|远程服务 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  未来的Web将是以服务为中心的Web,XML_RPC标准使得编写和应用服务变得非常简单.本文介绍XML_RPC标准及其PHP实现,并通过实例示范了如何在PHP中开发XML_RPC服务和客户程序. 一.服务式Web 从内容提供商所采用的简单方法到UDDI(Universal Description,Dis

在PHP中利用XML技术构造远程服务(上)

xml|远程服务 未来的Web将是以服务为中心的Web,XML_RPC标准使得编写和应用服务变得非常简单.本文介绍XML_RPC标准及其PHP实现,并通过实例示范了如何在PHP中开发XML_RPC服务和客户程序. 一.服务式Web 从内容提供商所采用的简单方法到UDDI(Universal Description,Discovery and Integration)的未来构想,业界已经有大量关于"服务式Web"的说明和评论.就Web的初创阶段来说,它只是一个文档的集散地,提供的只是一些

在PHP中利用XML技术构造远程服务(下)

xml|远程服务 四.基于XML_RPC的Web服务 利用XML_RPC构造和使用服务是很方便的.企业为自己提供的各种服务部署XML_RPC服务器,用户.客户软件和客户企业就可以使用这种服务构造出高端服务或者面向最终用户的应用.这种提供更有效.廉价和优质服务的竞争将极大地提高应用服务的质量. 但这里还存在一些问题有待解决,例如怎样编目.索引.搜索Web上的服务?UDDI试图解决这个问题,不过这个标准并不简单,而且业界对它的反应也尚未明了.然而,在企业内部应用XML_RPC不仅能够改善代码的可重用

在PHP中利用XML技术构造远程服务(下)_php基础

四.基于XML_RPC的Web服务 利用XML_RPC构造和使用服务是很方便的.企业为自己提供的各种服务部署XML_RPC服务器,用户.客户软件和客户企业就可以使用这种服务构造出高端服务或者面向最终用户的应用.这种提供更有效.廉价和优质服务的竞争将极大地提高应用服务的质量. 但这里还存在一些问题有待解决,例如怎样编目.索引.搜索Web上的服务?UDDI试图解决这个问题,不过这个标准并不简单,而且业界对它的反应也尚未明了.然而,在企业内部应用XML_RPC不仅能够改善代码的可重用性,而且还会带来一

在Ruby中处理XML和XSLT以及XPath的简单教程_ruby专题

什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据. XML解析器结构和API XML的解析器主要有DOM和SAX两种.     SAX解析器是基于事件处理的,需要从头到尾把XML文档扫描一遍

SQL Server中读取XML文件的简单做法

SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦. 如果你参考Books Online(BOL),你会发现有相关的条目,包括OPENXML以及 OPENROWSET.所有的这些例子都支持将XML文本作为已经声明的变量,这对于经常处理文本的用户来说非常方便,但对于希望在开发中读取XML文件并进行相应处理的开发人员来说就不是这样了.处理这样的问题,或许最好从内到外来对其进行分析. OPENXML是一个rowse

SQL Server中读取XML文件的简单方法

SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦. 如果你参考Books Online(BOL),你会发现有相关的条目,包括OPENXML以及 OPENROWSET.所有的这些例子都支持将XML文本作为已经声明的变量,这对于经常处理文本的用户来说非常方便,但对于希望在开发中读取XML文件并进行相应处理的开发人员来说就不是这样了.处理这样的问题,或许最好从内到外来对其进行分析. OPENXML是一个rowse