Invocar nodo NIS desde una aplicación


#1

Me gustaría compartir con vosotros una demo creada para poner un ejemplo de arquitectura sobre las llamadas a los nodos NIS http desde las aplicaciones web.

De tanto en tanto, veo algunas preguntas en los chats sobre las llamadas http / https.
Yo creo que es una mala idea hacer llamadas desde el frontend directamente a un nodo NIS,
dado que se produce un acople muy fuerte de código y cualquier cambio en las apis de NIS tendríamos que cambiar bastante parte del código.

Otro problema es que no podemos hacer llamadas http si nuestro frontend cuelga de un servidor https.
Encontraremos el típico error:

Mixed Content: The page at 'https://tutoriales.online/nagit/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://153.122.86.201:7890/node/extended-info'. This request has been blocked; the content must be served over HTTPS.

El caso de Nagit es un buen ejemplo de acople en el frontend, donde se puede provocar ese error especificando un nodo http en vez del nodo por defecto que es https.

Las soluciones son varias, invocar a un nodo NIS https desde el frontend, como se puede ver en Nagit, de este modo salvamos este error.

Otro modo para encapsular las llamadas y desacoplar el código del frontend, es hacer una capa en el backend por encima de la llamada al nodo NIS http, lo muestro a continuación:

En este repositorio https://github.com/ccastromar/niswrapper he colgado una aplicación de demostración creada con Node.js para envolver las llamadas http NIS.
Debe implementarse con un servidor https (nginx) que sirva como proxy para Node.js. La página de índice está disponible en tres idiomas (español, inglés y ruso).

Este es un diagrama de la arquitectura de aplicaciones con Nginx, Node.js, MongoDB y NIS:

Y por úlitmo también podemos usar una SDK de NEM que gestiona las llamadas a los nodos por http en el caso de que queremos hacer algo más standard y no tengamos necesidad de llamar directamente a la API REST de un nodo NIS.

Si te parece útil esta información, me invitas a un café? :wink:
XEM: NC3I3X5J6NUO6GXSHDH5B3QXS3TK5Q2XMZOO2HTU