Mockear la capa back con Dyson
0. Índice de
contenidos.
1. Entorno
Este tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil Mac Book Pro 15″ (2,3 Ghz Intel Core i7, 16 GB DDR3)
- Sistema Operativo: Mac OS X Mavericks
- Node v0.10.31
2. Introducción
Dyson ha llegado para apaciguar la eterna lucha entre el Front y el Back. No es raro en los proyectos actuales tener una o varias capas Front y un Back que accede a la información
en el servidor y que se comuniquen a través de mensajes JSON.
Cuando estamos desarrollando un proyecto de estas características es fácil encontranos con que el Front tiene que esperar a que Back genere el JSON para poder probar esta parte
de su funcionlidad. Llegados a este punto los de Front se plantean crear objetos Dummy que simulen está comunicación y que luego tienen que deshechar cuando la comunicación real
finalmente se produce.
Con Dyson podemos minimizar está integración dado que crea un servidor que responde JSON en base a una URL que le pasemos. De esta forma el código del Front llamará al servidor
creado con Dyson con la URL real y éste le devolverá el JSON que espera en base a los parámetros de la URL y la plantilla de respuesta que tenga asociada ese petición.
Además Dyson nos proporciona la posibilidad de rellenar con datos aleatorios los valores de los campos que queramos devolver en el JSON.
Fácil, sencillo y transparente.
3. Veamos como funciona
Lo primero que tenemos que tener instalado en nuestra máquina es una instancia de node, en el ámbito de este tutorial node lo utilizaremos como una caja negra que nos proporciona
funcionalidad de forma transparente y que es imprescindible para que Dyson funcione.
Lo siguiente es instalar Dyson a través de línea de comandos:
sudo npm -g install dyson
Esperamos a que el terminal termine de realizar las operaciones y ya tendremos Dyson instalado en la máquina.
Ahora vamos a crear nuestro proyecto Dyson. Para ello desde el terminal, dentro de la carpeta que se quiera, ejecutamos el comando:
dyson init TutorialDyson
Esto hace que se cree la carpeta TutorialDyson con 4 subcarpetas con las posibles operaciones REST (delete, get, post y put) y dentro de ellas unos «templates» de ejemplo; los
cuales podemos probar ejecutando directamente el comando:
dyson TutorialDyson
Veremos por pantalla como se registran las URLs de cada uno de los endpoints y como se levanta el servidor en la URL: http://localhost:3000
Registering GET service at /dummy/:id? Registering GET service at /requireparams Registering POST service at /dummy Registering PUT service at /dummy Registering DELETE service at /dummy Dyson listening at port 3000
De esta forma si por ejemplo ejecutamos en un navegador http://localhost:3000/dummy/1 veremos como nos devuelve el JSON que se corresponde con el template definido en el
fichero get/dummy.js cuyo contenido es el siguiente:
module.exports = { path: '/dummy/:id?', template: { id: function(params) { return params.id || 1; }, name: 'Lars', status: 'OK' } };
Esto hace que el servidor registre el Endpoint /dummy/ con el parámetro id y lo asocie con la salida JSON definida en el parámetro template, que en este caso pinta el parámetro de
entrada id seguido del nombre ‘Lars’ y el status ‘OK’.
De esta forma podemos ir modelando todas las respuestas JSON que esperemos de Back y nos independizamos del desarrollo real del servicio.
Podemos cambiar el puerto de escucha del servidor simplemente arrancando dyson con un segundo parámetro con el número de puerto deseado.
dyson TutorialDyson 8080
4. Conclusiones
Como véis los de Front ya han pérdido el argumento que Back va muy lento en sus desarrollos y eso les obliga a tener que implementar más código para completar su parte. 😉
Para más detalles podéis consultar la web del proyecto y sobre todo cacharrear con los templates de ejemplo.
Cualquier duda o sugerencia en la zona de comentarios.
Saludos.
$ dyson init
/usr/bin/env: node: No existe el archivo o el directorio
A qué se debe este error? Creo tenerlo todo instalado correctamente.
Un saludo.
Hola Jordi,
Ese error hace pensar que no tienes correctamente configurado el path de node en tus variables del sistema.
Si pruebas a ejecutar «node –version» en un terminal seguramente te encuentres con el mismo error.
Para resolverlo, ve a tu fichero o donde gestiones las variables del sistema (depende del sistema operativo que estés utilizando) y añade la ruta donde tengas instalado node a la variable PATH del sistema.
Espero que esto te ayude.
Saludos
Buenas Rubén,
Al realizar el comando init:
$dyson init [dir]
Sale el error de Directory does not exist. Tengo node instalado y me funciona el comando «node -v»
¿Qué puede fallar?
Gracias y un saludo