Creando un API feliz con Hapi.js

Disculpas por el título, pero no pude resistirlo...
Ok... Necesito crear una aplicación demo para un curso que voy a dictar en un par de meses, luego de pensar mucho se me ocurre que sería divertido usar algo relacionado a las personas más admiradas y amadas de nuestro país:

congreso nodejs Congresista Peruano representando al país

Normalmente para este tipo de aplicaciones que serán para propósitos de demo uso apiary, pero esta vez quiero variar un poco. Cuando quiero variar un poco normalmente uso sails, pero siento que es como matar una mosca con una pistola.

Hapi.js

Ya hace un buen tiempo que me encontré con este framework y me parece una gran ocasión para probarlo, sobre todo por su sistema de plugins, es muy fácil de implementar y esto permite reutilizar cantidades obscenas de código haciendo que cada proyecto nuevo sea el doble de rápido que el anterior.

Lo primero es obviamente instalarlo como dependencia en un proyecto.

npm install hapi --save  

Primero debemos referenciar a hapi.js usando require y luego lo almacenamos en una variable que usaremos para instanciar un nuevo servidor.

var Hapi = require('hapi');  
var server = new Hapi.Server();  

Listo, ahora debemos abrir una conexión al servidor, para esto tenemos el método connection el cual recibe un object como parámetro. Este object acepta varios valores según la documentación, pero en este caso solo nos vamos a enfocar en dos, que son: host y port.

var serverOptions = {

    host: 'localhost',

    port: 1337

};

server.connection(serverOptions);  

Obviamente en un entorno real dónde tenemos distintos servidores (development, qa, production, etc) el host y port deben ser configurables usando variables de entorno, pero para este demo nos sirve bien usar localhost y el puerto 1337 (que en realidad puede ser el que a uno le de la gana siempre y cuando no entre en conflicto con alguno ya usado)

Ahora necesitamos iniciar el servidor, es muy sencillo simplemente llamamos al método start que acepta un callback que podemos usar para hacer algo cuando el servidor esté iniciado.

server.start(function () {

    console.log('Server running at ', server.info.uri);

});

Si todo sale bien y ejecutamos este archivo deberíamos ver en consola

hapijs server running

Y si lo probamos desde un browser

hapijs chrome

Obviamente no devuelve nada porque no hemos configurado ninguna ruta, pero eso lo dejo para el proximo post en dónde crearé una ruta y además cubriré integration testing.
Si quieres ver el código, puedes encontrarlo en mi cuenta de github
https://github.com/eperedo/congress-api