Programación Web RESTful + Node.js

Autor: Vlad Gerasimov

Cliente - Servidor

HTTP (Hypermedia Text Transfer Protocol) es el método mas común de intercambio información en la Web.

 

Define como la información debe ser transmitida y

en que formato.

Peticiones 

Conforma el mensaje enviado por el Cliente al Servidor.

 

Son utilizados para obtener, modificar, crear o eliminar recursos.

 

Están formados por un método, una URL y en ocasiones por un cuerpo.

URL

Uniform Resource Locator

Respuesta

Conforma la respuesta del Servidor al Cliente.

 

Son utilizados indicar devolver recursos o bien indicar cambios de estado en los mismos.

 

Están formados por un estado, una descripción del estado y en ocasiones por un cuerpo.

Es una arquitectura que define la manera en la que algunos estándares web, como HTTP y las URLs, deben de ser usadas.

¿En qué se basa?

REST propone una serie de principios de diseño fundamentales que deben ser seguidos.

 

Si seguimos estos principios, explotaremos a nuestro beneficio la arquitectura web propuesta. 

Métodos HTTP explícitos!

  • se usa POST para crear un recurso en el servidor.
  • se usa GET para obtener un recurso.
  • se usa PUT para actualizar un recurso.
  • se usa DELETE para eliminar un recurso.

REST establece una asociación uno-a-uno entre las operaciones de crear, leer, actualizar y borrar y los métodos HTTP.

No mantener estados!

REST establece que la información asociada a una petición no debe trascender a la misma.

 

El contexto o datos adicionales necesarios para resolver una petición deben de viajar en la misma, no pueden ser almacenadas en el servidor.

Todo debe tener una ID!

Todos los recursos accedidos mediante peticiones REST deben de tener una ID que los represente.

 

De esta manera podemos especificar a que recurso hacemos referencia en la petición.

GET www.ejemplo.com/persona/254

Representación de Recursos

Todos los recursos tienen que poder ser representados de diferentes maneras, por ejemplo, XML, JSON o ambos!

El tipo de representación utilizada debe ser especificada en la cabecera de la petición.

{
    "id":       254
,   "nombre":   "Neri"
,   "apellido": "Guidi"
}

Es un entorno que utiliza el motor V8 creado por Google  para la ejecución de código JavaScript.

Dicho motor tiene la particularidad de que no necesita del navegador para funcionar por lo que nos permite correr JavaScript en el servidor.

Utiliza un modelo asincrónico y dirigido por eventos.

¿Para qué sirve?

Node esta diseñado para situaciones en la que se necesite una gran cantidad de trafico y donde la logica del lado del servidor y el procesamiento requerido, no sea grande.

  • API RESTful
  • Juegos
  • Chats
  • Herramientas colaborativas

Por ejemplo:

¿Cómo funciona?

Cada conexión dispara un evento dentro del motor de node.

 

Cuando se detecta el evento, el motor reserva una cantidad dada de memoria, evalúa el evento y genera una respuesta.

 

Luego el motor duerme a la espera de un nuevo evento.

 

¿Es potente?

Todas las conexiones son mantenidas en un solo hilo por lo que en teoría puede soportar hasta 65.000 conexiones simultaneas. 

Solamente genera nuevos hilos para realizar operaciones bloqueantes.

 Una aplicación normal podría mantener hasta 25.000 conexiones sin que se produzcan retardos en las respuestas.

¿Ventajas?

Utilizas JavaScript tanto en cliente y en el servidor.

 

Esta basado en eventos por lo que la filosofía asíncronica que aplicábamos en el cliente la podemos utilizar en el servidor. 

 

Tiene una comunidad enorme y en constante crecimiento documentando y compartiendo tutoriales.

 

Cuenta con el mayor ecosistema de librerias open source del mundo.

¿Es todo tan lindo?

Debido a su arquitectura de utilizar un solo hilo también solo podrá utilizar una única CPU. 

 

Esta en constante crecimiento y muchos de los cambios no pueden ser aplicados a versiones muy anteriores.

 

Existen muchas maneras de programar en node.

¿Es el único de su especie?

Hay otros proyectos muy similares: 

¿Cómo podemos usarlo?

Solo basta descargar e instalar la versión que corresponda según nuestro sistema operativo.

 

Ir a Node!

 

Existe un software llamado NVM que permite manejar diferentes versiones de node de forma simultanea.

¿Modulos?

Node incluye una serie de módulos que mejoran y facilitan su utilización.

 

Cada uno de los modulos se encuentra diseñado para una funcionalidad dada.

  • FileSystem (Manejo de archivos)
  • HTTP (Manejo del protocolo HTTP)
  • PATH (Manejo de rutas de archivos)

¿NPM?

NPM es el gestor de paquetes de node. Permite instalar de forma global o local (según el paquete) módulos creados por otras personas y hacer uso de ellos.

 

Podemos ver los paquetes disponibles en su sitio

 

Ir a npmjs

  • Express (Middleware)
  • Bower (Gestor de dependencias)
  • Gulp (Gestor de Tareas)
  • NeDB (Base de datos JavaScript)

Hola Mundo!

var http = require('http');
var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hola Mundo\n');
});
server.listen(3000);
console.log('Servidor Corriendo!');

Programación Web: RESTful + Node.js

By Neri Guidi

Programación Web: RESTful + Node.js

  • 804