Todo sobre JSONP: Parte I

El manejo de APIs en todo el globo con respecto al desarrollo web es cada día más amplio y el formato JSON se ha vuelto realmente popular como formato de intercambio de información. Pesa poco y es compatible con casi todos los sistemas donde se pueda llegar a consumir.

En el ámbito de la web y con relación a la programación del lado del cliente, es usual que se quiera examinar los datos que vienen de APIs REST para elaborar aplicaciones acaudaladas. Estos datos pudiesen estar alojados en vuestro servidor o en servidores remotos, sea cual sea el caso puede que hayan ciertas restricciones de seguridad. Para impedir esto, puede que hayan oído conversar en alguna ocasión de JSONP. El día de hoy y con este artículo se quiere profundizar un poco sobre el término y contar ciertas discrepancias entre JSON y JSONP, así como los motivos y modos de empleo de JSONP.

Inconvenientes de seguridad con JSON

Puede que en cierta ocasión hayan advertido que, no es viable realizar una llamada a Ajax por medio de dominios diferentes para recoger algún dato. Esto es una restricción en la programación web del lado del cliente y es gracias a una limitación de seguridad de los navegadores.

La autora de ese inconveniente es una política llamada “Same-origin policy”, que está premeditada para impedir que se carguen a través de Javascript datos realmente inseguros, por estar en otros servidores. O sea, los datos que os recogéis desde Ajax utilizando vuestro propio dominio son estimados seguros, pero esos que están en otros dominios de Internet no.

Esta limitación se puede impedir si el dominio con el que se conecta está configurado para admitir conexiones desde otros dominios. Esto se logra impulsando la configuración Cross-origin resource sharing, pero además de es, pueden remediarse, libremente de la configuración del servidor, por medio del manejo de JSONP.

Cómo es el JSONP

JSON y JSONP son esencialmente lo mismo, un formato ligero para intercambiar datos con notación de objeto Javascript. La notación no aplaza en absoluto la relación entre JSON y JSONP, pero sí la “cubierta”. En JSONP en vez de transportar el dato a secas como en JSON, lo que transporta es una función ordinariamente llamada “callback“. Esa función es como un Javascript, que abarca el dato que se ha solicitado. De allí que en ciertas ocasiones se conozca a JSONP como JSON con padding.

JSON no puedo accederlo pero sí el JSONP

Puede que se lo pregunten: Si se ha mencionado que gracias a la prohibición de los navegadores “Same-origin policy” no se logra entrar a datos que viven en servidores externos. ¿Por qué se logra entrar a los datos JSONP y no a los JSON normales?

La verdad es que son lo mismo, solo se modifica un poco de esa cubierta en cuanto a la función en JSONP. ¿Cuál es el truco entonces?

Para lograr que sea viable el JSONP en contextos cross-domain se emplea una alternativa autorizada de carga de scripts en una página. Como se conoce, el navegador sí que acepta la carga de código Javascript que se lleve encima con la etiqueta SCRIPT y el atributo src de otro dominio. Es la base de los servicios CDN.

<script src=”http://example.com/otro/dominio”></script>

Gracias  a que eso no incita a ningún inconveniente de seguridad, JSONP se beneficia de ello para entrar de esa manera al recurso solicitado, introduciendo ese script en la página y estableciendo su código para desencajar el dato.