本章将介绍什么是WDDX,如何使用它,如何使用PHP的WDDX扩展。尽管WDDX本身不是web服务(web service),但可以利用它来创建web服务。
WDDX介绍
WDDX 是一项允许在保持数据完整性的前提下在系统格式中立的系统间交换数据和数据结构的XML技术。它定义了用来传送数据的XML结构,但它没有定义数据传输的机制;因此,WDDX本身不能被认为是一种web服务但却可以用来建立web服务,确切地说,你可以使用包括(并不限制于)HTTP,FTP,SMTP和 POP的任何一种传输类型。一般来说,你可以使用任何一种支持传输文本数据的协议。
背景
在1998 年,为了支持ColdFusion平台的分布式计算,Allaire创建了WDDX。利用WDDX,可以使变量(包括名称,数据类型和值)序列化成一个应用程序的XML文档,并且传送到另一个应用程序。作为接受方的应用程序可以反序列化XML文档并以变量原来的数据类型和值来重新建立这些变量。数据类型并不限于简单的数字和字符串类型,也可以包括一些复杂的数据结构,如数组(array),结构(structures)和记录集(recordsets)。
WDDX是一种与平台和语言无关的技术。这使得各种平台上的其它语言可以充分发挥它们的优点,因此,可以用一个平台上的某一种语言写的一个程序向另一个平台上的不同语言写的另一个程序发送数据。而接受数据的那个程序可以反序列化数据成具有其特性的变量类型。
WDDX并不是一个正式的标准,但它是建立在开放标准XML1.0之上的,可以自由使用和再发布。WDDX的发展和未来的进展已经被移至开放项目OpenWDDX(http://www.openwddx.org)上。尽管你可以在这个站点上找到一些信息和SDK,但你可能找不到过去几年有关于它的一些活动。这并不表明WDDX技术已经消亡。它在一些平台和语言上仍然很活跃,特别是PHP。
WDDX数据类型(WDDX Data Types)
想象一下PHP中的变量形式和数据类型,有个问题是,你如何利用XML将这些数据发送给另一个系统处理?例如,你可能有下面这个变量,需要将它的值发送到另一个系统:
$myinteger = 1;
使用XML,你可以将值序列号,也就是意味着将它们转换成文本:
- <data>1</data>
这个数据对你来说可能已经足够了。它的缺点是你失去了原生的数据类型。当然,系统可能会有一些预定的结构可以相应地映射,或者可以在XML文档中作一些类型提示,如:
- <data type='integer'>1</data>
这样就更加灵活了,但是交换数据的任一个系统都必须理解这种结构和知道如何去处理它。另一种解决方法是使用XML Schemas来提示数据类型,但是,系统同样需要知道如何处理这个文档。
WDDX提供了一种方法来解决这个问题。通过它的通用格式,该值可以序列化成如下格式:
- <wddxPacket version="1.0">
- <header/>
- <data>
- <number>1</number>
- </data>
- </wddxPacket>
在处理单一值时,这种格式可以接受,而XML是一种描述性的语言。从这个文档你可以知道,它包含有1。你可能从未使用这种格式来传送多个值,因为没有任何描述性的东西将它们区分开。大多数情况下,需要序列化的是包含描述性信息的变量而不单单是值。比如,要序列化下面的变量:
$mystring = ‘Text Data’;
$myinteger = 1;
- <wddxPacket version="1.0">
- <header/>
- <data>
- <struct>
- <var