# Introducción

# ¿Qué es Node.js?

Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con E/S de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web. Fue creado por Ryan Dahl en 2009 y su evolución está apadrinada por la empresa Joyent, que además tiene contratado a Dahl en plantilla.

# Event Loop - Node.js

El Event Loop es lo que permite a Node.js realizar operaciones de E / S sin bloqueo, a pesar del hecho de que JavaScript es de un solo subproceso, descargando operaciones al núcleo del sistema siempre que sea posible.

Dado que la mayoría de los núcleos modernos son multiproceso, pueden manejar múltiples operaciones que se ejecutan en segundo plano. Cuando se completa una de estas operaciones, el núcleo le dice a Node.js que se puede agregar la devolución de llamada apropiada a la cola de sondeo para que finalmente se ejecute.

                       ┌───────────────────────────┐
                    ┌─>│           timers          │
                    │  └─────────────┬─────────────┘
                    │  ┌─────────────┴─────────────┐
                    │  │     pending callbacks     │
                    │  └─────────────┬─────────────┘
                    │  ┌─────────────┴─────────────┐
                    │  │       idle, prepare       │
                    │  └─────────────┬─────────────┘      ┌───────────────┐
                    │  ┌─────────────┴─────────────┐      │   incoming:   │
                    │  │           poll            │<─────┤  connections, │
                    │  └─────────────┬─────────────┘      │   data, etc.  │
                    │  ┌─────────────┴─────────────┐      └───────────────┘
                    │  │           check           │
                    │  └─────────────┬─────────────┘
                    │  ┌─────────────┴─────────────┐
                    └──┤      close callbacks      │
                       └───────────────────────────┘
Ver más ...
  • Timers: esta fase ejecuta devoluciones de llamada programadas por setTimeout() y setInterval() .
  • Pending callbacks: ejecuta devoluciones de llamada de E / S diferidas a la siguiente iteración de bucle.
  • Idle, prepare: solo se usa internamente.
  • Poll: recuperar nuevos eventos de E / S; ejecutar devoluciones de llamada relacionadas con E / S (casi todas con la excepción de devoluciones de llamada cercanas, las programadas por temporizadores y setImmediate() ); El nodo se bloqueará aquí cuando sea apropiado.
  • Check: aquí se invocan las devoluciones de llamada setImmediate() . devoluciones de llamada cercanas : algunas devoluciones de llamada cercanas, por ejemplo, socket.on('close', ...).

Entre cada ejecución del bucle de eventos, Node.js comprueba si está esperando alguna E / S asíncrona o temporizadores y se apaga limpiamente si no hay ninguno.

# Un poco de historia

Hapi.js fue creado dentro de Walmart Labs por Eran Hammer, quien también creó la especificación OAuth, Hammer siendo líder del equipo de Mobile en Walmart se topó con un problema, el alto tráfico del sitio web los días cercanos al Black Friday.

Es por eso que junto a su equipo deciden crear Hapi, como middleware de express, ya que este no les ofrecía una solución a los problemas que se estaban enfrentando. Luego de ir probando diferentes combinaciones de soluciones deciden crear todo el framework desde cero sobre la base de “Mejor configuración que código”.

Las versiones originales de hapi usaban el framework Express. Walmart descubrió que había limitaciones con Express que hacían que el marco no fuera adecuado para sus requisitos particulares. A Express le faltaban algunas características clave, por lo que Walmart finalmente evolucionó a su propio marco independiente.

# ¿Qué es Hapi.js?

Hapi.js (también conocido como hapi) es un marco de código abierto para aplicaciones web.

Hapi está diseñado pensando en aplicativos modularizados de grandes dimensiones. Contempla la separación de la configuración de la lógica del negocio y utiliza su propia forma de realizar las cosas. Este framework es utilizado para crear, Aplicativos Web, APIs REST, APIs en GRaphQL, Proxies HTTP, e integrador de múltiples Backends, entre otras cosas más.

Hapi proporciona un sistema de complementos robusto que le permite agregar nuevas funciones y corregir errores a un ritmo rápido. hapi le permite construir API escalables. Es una excelente opción para crear API de transferencia de estado representacional (REST) ​​porque le proporciona enrutamiento, entrada, validación de salida y almacenamiento en caché. Puede crear una API que sirva a todo tipo de clientes que necesitan aplicaciones móviles y de una sola página.

# Características de Hapi.js

EL potencial de hapi se visualiza gracias a los diferentes aspectos que lo compone:

# Seguridad

  • Higiene de código de extremo a extremo: hapi requiere la configuración más segura para administrar, controlar y distribuir código, incluido 2FA para todos los contribuyentes.
  • Valores predeterminados seguros, actualizados regularmente: cada componente hapi viene con los valores predeterminados más seguros listos para usar. Junto con la protección de la carga del servidor con límites de carga útil y tiempos de espera de solicitud, hapi bloquea los mensajes de error que podrían filtrar información o hacer eco de exploits.
  • Arquitectura integrada de autorización y autenticación: la API de autorización y autenticación más completa disponible en un marco Node.
  • Funciones avanzadas: con cookies cifradas y firmadas, rotación secreta o de claves y encabezados de seguridad HTTP, no hay excusas para crear aplicaciones inseguras.
  • Propiedad confiable y predecible: cuando algo sale mal, usted sabe a quién contactar. Las actualizaciones de seguridad se manejan bajo un protocolo estricto y bien definido.
  • Ecosistema rico: el extenso conjunto de complementos oficiales de hapi significa que ya no confiarás ciegamente en un middleware que encontraste para la funcionalidad crítica solo porque tiene un alto conteo en npm.
  • Experiencia en seguridad interna: creada por Eran Hammer, autor de las especificaciones OAuth y otros protocolos de identidad.

# Calidad

  • Legibilidad de código: si no puede abrir el código fuente de su marco y entender cómo funciona, tarde o temprano tendrá problemas.
  • Cobertura y estilo: 100% de cobertura de código utilizando reglas de cobertura estrictas y un estilo de codificación optimizado para reducir errores y aumentar la comprensión, siempre de principio a fin.
  • Problemas abiertos: hapi y sus complementos oficiales se mantienen activamente con solo un puñado de problemas abiertos o solicitudes de extracción. Pocos otros ecosistemas pueden reclamar este bajo nivel de problemas pendientes de extremo a extremo en cada dependencia.

Además de estos puntos, otro aspecto que hace diferente a Hapi es que se centra en que el desarrollador se sienta cómodo usando el framework.

Cada característica de hapi está diseñada para hacer que la plataforma sea ​​más fácil y más intuitiva de usar. No hay "magia" : el código hace lo que espera con una lógica interna fácil de seguir. La interfaz de hapi, limpia y fácil de aprender , no ocupa demasiado espacio. Está diseñado para un área de superficie pequeña, lo que le permite crear sus aplicaciones como mejor le parezca, utilizando su estilo y las tecnologías que elija.

# Ciclo de Vida - Hapi.js

Cada solicitud entrante a hapi sigue una ruta predefinida, el ciclo de vida de la solicitud. Y los puntos de extensión individuales dentro del ciclo de vida le permiten interceptar el flujo de solicitudes en varios puntos con su funcionalidad personalizada.

Explicación del Ciclo de Vida