featured image

En los tiempos que vivimos de Internet, la programación de elementos aislados comienza a ser cada vez menos frecuente. Mientras que el desarrollo para Internet de aplicaciones tienden a ser más escalables, redundantes y tolerantes a fallos.

En ese aspecto, los programas deben de sincronizar sus datos con otros elementos de un mismo sistema o copias redundates en la red.

El envío de datos estructurados en forma de vector, matriz, estructuras heterogéneas o incluso objetos a través de la red se complica. Los envíos se deben realizar a través de un sistema que permita su perfecto encapsulado. Al realizar la acción contraria (desencapsular la información) los datos deben mantener su forma íntegra.

Esta vertiente se ve cada vez más patente en el diseño web con usos de elementos como AJAX o websockets, que solicitan el paso de información entre servidor y cliente y lo procesan en la parte cliente.

En el envío de datos de forma plana se usa la serialización.

La serialización es un sistema que permite convertir a un formato específico toda la información manteniendo sus tipos de modo que pueda ser transmitido de forma fácil a través de la red y para cualquier lenguaje de programación. Hay muchos tipos se serialización:

XML

Consiste en convertir a una estructura XML toda la información estructurada que se encuentre en el sistema y se quiera transmitir. Para esto existen varios estándares de serialización.

En PHP podemos emplear la clase de PEAR llamada XML_Serializer para realizar esta tarea:

<?php

$serializer = &new XML_Serializer();
$data = array(1, array( 'hi' => 'hello' ), 2);
print $serializer->serialize($data);

JSON

Es un formato derivado de JavaScript, de ahí su nombre JavaScript Object Notation. Es menos costoso para JavaScript por tanto, más rápido de procesar por los navegadores.

En PHP se incluyeron las funciones de serialización para JSON y se pueden emplear así:

<?php

$data = array(1, array( 'hi' => 'hello' ), 2);
print json_encode($data);

YAML

Como su nombre indica es Yet-Another Meta Language (otro meta-lenguaje). Está pensado para ser de fácil comprensión para personas que para máquinas. Se puede encontrar más como archivos de configuración que como sistema de serialización.

En PHP existe la función yaml_emit que permite serializar la información:

<?php

$data = array(1, array( 'hi' => 'hello' ), 2);
print yaml_emit($data);

Otros más

Realmente existen cientos de sistemas de serialización. Los mostrados son en modo texto y los más empleados en entornos como PHP y el desarrollo web. Existen otros en modo texto y binarios cada uno con sus características específicas.

Por ejemplo, en PHP podemos emplear las funciones de serialización que provee PHP mejor adaptadas a los tipos de datos de PHP y más rápidas de emplear que el resto:

<?php

$data = array(1, array( 'hi' => 'hello' ), 2);
print serialize($data);

Usos

Este tipo de serialización es muy empleado cuando necesitamos almacenar en tablas relacionales un conjunto de datos de forma heterogénea y cambiante entre filas, de un registro a otro. También se emplean para ficheros de configuración.

En caso de PHP, estos sistemas se emplean muy frecuentemente para el almacenaje de datos en sesiones o en sistemas de caché, como puede ser memcached.

Actualizado 2014-06-18: este artículo ha sido actualizado cambiando su forma y ampliando con código de ejemplo.