> Faqs > ¿Por qué se recomienda recibir los datos de una llamada Ajax con JSON en lugar de devolver HTML?

¿Por qué se recomienda recibir los datos de una llamada Ajax con JSON en lugar de devolver HTML?

He leído que es una buena práctica que, cuando recibimos una respuesta del servidor mediante ajax, que los datos devueltos tengan formato JSON en lugar de devolver un HTML.

En realidad, si la página web recibe un HTML, mostrarlo en la página es inmediato, simplemente hay que volcar ese HTML como contenido en algún elemento de la página. Me lleva una única línea de código procesar esa salida.

Sin embargo, si recibo un JSON ahí me obliga a realizar todo un procesamiento del JSON, para conseguir conseguir el HTML resultante, a base de crear un Javascript más complejo. Además, si lo quieres hacer bien en el código del cliente, te ves obligado a usar un sistema de templates, porque crear HTML al vuelo solamente con Javascript crea un código muy complicado de mantener.

Ante estas situaciones, resulta como más sencillo recibir un HTML en vez de un JSON, para que el código de tus llamadas Ajax no se complique en el lado del cliente (Javascript). Entones ¿Por qué se toma como una buena práctica recibir los datos como JSON?

Respuestas

A ver, recibir el HTML directamente no tendría por qué estar mal, si solamente quisieras tener una página que recibe info por ajax y la muestra en la web. Pero lo cierto es que tu sistema será muy rígido.

Recibir JSON te permite separar las responsabilidades de tu código mucho mejor, de modo que, cuando haya cambios, tengan que repercutirse en el código por menos lugares.

Si tienes HTML como respuesta de un ajax tienes quizás menos complejidad del lado del cliente, pero realmente la complejidad de producir el HTML la vas a tener que colocar en algún sitio.

Las principales desventajas a mi modo de ver son:

Acoplando la tecnología de visualización a la web

Tu código estará vinculado única y exclusivamente a una página web. Si más adelante tienes una app para móvil, toda la programación del servidor no la podrás reutilizar. En cambio, si usas JSON, los datos que te devuelve el servidor los podrás usar desde cualquier sistema donde los necesites, porque todos podrán procesar ese JSON y producir la salida que la aplicación necesite, web o app, por ejemplo.

Dicho de otra manera, el código del servidor lo estás acoplando a una tecnología de visualización concreta. Estás provocando que la separación entre backend y fronten se diluya. Esto posiblemente no sea un problema como digo en un código de una aplicación que aspira simplemente a funcionar como un sitio web, pero te corta las alas para hacer cosas más complejas.

Ocupando más procesamiento en el backend y desaprovechando la potencia de los clientes

Luego, tienes otra desventaja y es que en tu backend estás ocupando tiempo de procesamiento para construir un HTML, cuando ese esfuerzo lo puedes derivar a tus clientes, es decir, los navegadores que consultan la página, por lo que el servidor se tiene que preocupar de cosas menos complejas. Podrás luego usar los sistemas de componentes de interfaz gráfica del lado del cliente para producir la vista que sea necesaria con los datos que se han recibido.

Definiendo el diseño en un lugar innecesario

Si el backend te devuelve el HTML es muy probable que estés colocando decisiones de diseño en el lado del servidor. Si mañana quieres cambiar el diseño de tu web de manera muy radical, posiblemente tengas que cambiar tu código tanto en el backend como en el servidor, lo que te va a dar bastante más travajo a la larga. Es verdad que el aspecto lo vamos a poder definir con CSS, pero muchas veces el HTML también lo tienes cambiar cuando quieras cambiar el diseño.

Sin embargo, si mandas un JSON estarás pudienod decidir el aspecto que tendrá tu salida únicamente en el lado del cliente.

Adaptarse al framework de moda

Si tienes un JSON puedes apdaptarte al framework que necesites en cada momneto. Si mañana te piden que en lugar de React uses Web Components, te servirá el mismo código del backend que habías escrito.

Alba
207 4 14 6