专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » php构造函数:在PHP中利用XML技术构造远程服务(上) »正文

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

来源: 发布时间:星期四, 2009年2月12日 浏览:113次 评论:0



未来Web将是以服务为中心WebXML_RPC标准使得编写和应用服务变得非常简单本文介绍XML_RPC标准及其PHP实现并通过例子示范了如何在PHP中开发XML_RPC服务和客户

、服务式Web
从内容提供商所采用简单思路方法到UDDI(Universal DescriptionDiscovery and Integration)未来构想业界已经有大量有关“服务式Web”介绍说明和评论就Web初创阶段来说它只是个文档集散地提供只是些可浏览信息随着Web发展在Web上运行服务越来越具有吸引力未来Web将成为企业为客户和其他企业提供便捷服务载体B2B和B2C模式间协同就可以看成是种服务式Web

个很重要问题是Web上究竟可以提供哪些服务?Web能够提供服务非常多其中有些服务现在已经在使用有些服务在不久将来就会出现为了介绍说明问题下面列出了小部分可以通过Web提供服务:

面向主题垂直搜索引擎供用户查找信息知识库用户可以请教问题专家系统银行服务新闻和信息出版服务数字化支付相关服务图形处理服务卫生和健康服务
那么企业和组织通过Web提供服务正确途径是什么呢?这是个很重要问题今天有些服务提供HTML界面它们通过文档形式提供服务但在服务界面背后隐藏着什么?在占领Web竞赛中Web浏览器并不孤单移动电话、手持设备以及微波炉的类设备都想要访问Web、查询数据库、转换数据、提取信息等等要实现真正服务式Web在表现层(HTML)的下应该还有另外

2、XML_RPC标准
XML或许是近10年来最为重要标准XML词汇表(Vocabulary)为企业构造服务环境提供了基石要构建服务式Web就有必要学习XML_RPC标准这不仅是XML_RPC对于把服务放到Web上很有用而且XML_RPC是种已经成形、很容易采用标准对于B2B服务来说提供服务标准是极其重要共同遵循标准公司可以利用其它公司提供服务获得快速增长无法想象在各种私有服务标准的上可以建立起真正服务式Web服务必须有种可以遵循标准

XML_RPC是种面向Internet分布式处理标准RPC即为Remote Procedure Call(远程过程)缩写它是种远程机制用于可能驻留在其他机器的上以及可能用其他语言编写过程远程过程是分布式计算重要支柱例如个分布式计算环境中我们可以寻找和利用在其他机器上运行执行加法和减法操作过程执行加法操作过程可能用APL编写、在RS6000机器上运行执行减法操作过程可能用C编写、在Unix上运行其他要使用这种分布式计算器开发者同样可以利用它们或者他也可以选用另外更好计算器

在RPC中过程(Procedure)是最主要构件服务器提供就是供客户端过程过程可以接收参数并返回结果XML_RPC以HTTP作为协议载体通过发送和接收数据XML词汇表实现RPC机制XML_RPC服务器接收XML_RPC请求并返回XML_RPC应答XML_RPC客户发送XML_RPC请求并接收XML_RPC应答服务器和客户必须按照XML_RPC标准要求处理应答和请求

3、XML_RPC协议
完整XML_RPC规范标准可以在http://www.xmlrpc.com/spec找到下面是其要点介绍说明

3.1 XML_RPC请求
XML_RPC请求应该是HTTP POST请求正文是XML格式请求XML部分格式如下:

<?xml version=\"1.0\" ?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>

指定数据发送到哪里URL并未在这里指定如果服务器专门用来进行RPC处理它可能是“/”上述XML文档中有效载荷是个“methodCall”结构methodCall必须包含个“methodName”子元素“methodName”子元素包含个描述待思路方法如何解释“methodName”内容完全由服务器决定例如它可以是个执行文件名字可以是数据库中记录名字或者任何其他东西如果过程接收参数“methodCall”可以包含个“params”元素以及若干个“param”子元素个“param”元素包含个带有类型描述符类型描述符如下表所示:

标记介绍说明<i4>或<> 4字节带符号整数如12<boolean>0(false)或1(true)<如“Hello World”<double>双精度带符号浮点数如-12.214<dateTime.iso8601>日期/时间如19980717T14:08:55<base64>base64编码 2进制数据如eW91IGbid0IHJlQgdGhpcyE
3.1.1 结构

值可以是个结构结构用<struct>元素描述每个<struct>包含多个<member>每个<member>包含个<name>和个<value>下面是个由两个元素构成结构:

<struct>
<member>
<name>name</name>
<value><>member1</></value>
</member>
<member>
<name>member2</name>
<value><i4>19</i4></value>
</member>
</struct>

<struct>可以嵌套任意<value>可以包含<struct>或者任意其它类型包括<.gif' />>

3.1.2

值可以是类型用<.gif' />>元素描述每个<.gif' />>元素包含个<data>元素<data>元素里面可以包含任意多个<value>元素下面是元素个例子:

.gif' />>
<data>
<value><boolean>0</boolean></value>
<value><i4>9</i4></value>
<value><>Hello</></value>
</data>
</.gif' />>

<.gif' />>元素没有名字如前例所示<.gif' />>元素值可以是各种类型<.gif' />>元素可以嵌套任何<value>都可以包含<.gif' />>或者其他类型如上面介绍<struct>



3.2 XML_RPC应答[/b]
XML_RPC应答是个HTTP应答内容类型是text/xml应答正文格式如下:

<?xml version=\"1.0\"?>
<methodResponse>
<params>
<param>
<value><>ABCDEFG</></value>
</param>
</params>
</methodResponse>

<methodResponse>可能包含个<params>结构或者可能包含个<fault>结构具体由过程是否成功决定<params>结构和XML请求中<fault>元素语法如下:

[TR] <fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><>4</></value>
</member>
<member>
<name>faultString</name>
<value><>Error!</></value>
</member>
</struct>
</value>
</fault>




0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: