Cargando



Documentos de diseño en CouchDB

En este tutorial vamos a ahondar en los documentos de diseño de forma que podamos incluir código que les den una funcionalidad extendida a nuestras colecciones de documentos en CouchDB utilizando únicamente el lenguaje JavaScript y documentos JSON.


mar 03 2015 04:44
Profesional
mar 03 2015 10:13
Los documentos de diseño o Design Documents en CouchDB son un tipo especial de documentos en los cuales podemos incluir código de aplicación, esto es posible gracias a que la estructuración de nuestro motor de Base de Datos nos permite acceder a una API y con ella realizar todas las acciones necesarias.

El lenguaje por defecto que podemos utilizar en este tipo de documentos es el JavaScript por lo que se hace ideal para aplicaciones completas si nos apoyamos de tecnologías como Node.js y frameworks para el Front-End como AngulaJS, Backbone.js y similares.

Requisitos


1- Para poder ejecutar este tutorial necesitamos en primer lugar una instalación de CouchDB, para los primeros pasos con la misma se puede dar un vistazo al siguiente tutorial. Esta instalación debe tener permisos para poder ejecutarse en nuestra sesión de usuario, si la instalación tiene un usuario debemos conocer la contraseña para poder crear documentos.

2- También vamos a necesitar la herramienta cURL para enviar peticiones vía HTTP y así poder hacer uso de la API de CouchDB.

3- Por último necesitamos un editor de textos para poder construir los archivos JSON que utilizaremos, por supuesto con los respectivos permisos para guardar en disco.

En el caso de este tutorial estaremos utilizando Windows 7 por lo que habrá posiblemente algunos comandos que necesitarán su equivalente en otro sistema operativo.

Modelar Documentos


Al momento de trabajar con CouchDB necesitamos construir documentos que tengan un sentido para un usuario final, es decir, algo que se pueda mostrar y tenga un sentido sin necesidad de tener que hacer mucho.

Documentos virtuales
Este tipo de documentos se les conoce como documentos virtuales, y nos permiten en una sola petición o request cargar todos los datos requeridos sin problemas. Generalmente se utiliza cuando queremos mezclar diferentes tipos de registros en una sola consulta, como podría ser el caso de un artículo de un blog y sus diferentes comentarios.

Hay otro tipo de documentos llamado event log, que podemos utilizar en ocasiones en las cuales necesitemos el ingreso de datos de un usuario y por esto mismo necesitamos validaciones adicionales, aunque también se puede utilizar también cuando necesitamos detonar alguna tarea de forma asincrónica.

El servidor de consultas
El servidor de consultas de CouchDB está hecho en JavaScript por lo que el uso de este lenguaje es posible por defecto sin necesidad de alguna configuración adicional, sin embargo existen implementaciones en otros lenguajes para poder operar este servidor y construir los documentos de diseño, únicamente hay que ingresar una configuración a través de un JSON.

Nuestro primer documento de diseño


En un documento de diseño podemos definir las llamadas vistas y shows, cada una contiene una forma especial de mostrar datos, estas las explicaremos más adelante, de momento vamos a concentrarnos en construir nuestro primer documento.

Necesitamos crear una Base de Datos en nuestro servidor CouchDB y dentro de la misma debemos añadir uno o más documentos, en nuestro caso de ejemplo hemos creado uno llamado recetas y contiene un campo título y otro campo llamado ingredientes.

Esta Base de Datos luce de la siguiente forma:


Una vez que ya tenemos data cargada en nuestra Base de Datos, debemos construir el documento, para ello crearemos un archivo llamado en nuestro caso recetas-couch.js y le colocamos el siguiente código:
{ "language": "javascript", "views": { "all": { "map": "function(doc) { emit(doc.titulo, doc) }" }, "by_titulo": { "map": "function(doc) { if (doc.titulo != null) emit(doc.titulo, doc) }" }, "by_ingredientes": { "map": "function(doc) { if (doc.ingredientes != null) emit(doc.ingredientes, doc) }" } }, "shows": { "recetas": "function(doc, req) { return '<h1>' + doc.titulo + '</h1>' }" }}
Este no es más que un simple JSON donde en primer lugar definimos el lenguaje como JavaScript, luego creamos un elemento llamado views donde creamos 3 vistas, una general, una por título, y una por ingredientes. Finalmente creamos un shows, donde mostramos el título de nuestra receta.

Validar JSON
Es importante denotar que si nuestro JSON no tiene la conformación adecuada obtendremos un error por parte del servidor CouchDB, y no podremos ejecutar nuestras instrucciones, es por ello que es importante verificar si nuestro JSON es válido, para ello existen algunas herramientas en línea como jsonlint.com.

Ahora utilizando cURL debemos pasar este archivo a nuestro servidor CouchDB, como este tipo de documentos es “especial”, no podemos dejar que el servidor sea quien asigne un nombre de forma aleatoria, es por ello que en vez de utilizar el método POST debemos utilizar el método PUT, que es para crear nuevos elementos.

Luego, todos nuestros documentos de diseño deben ir dentro de la ruta _design de nuestra Base de Datos, y luego de esta colocar el nombre correspondiente. Veamos cómo podemos hacer que el documento que hemos guardado pase a nuestro servidor.

En primer lugar vamos a ejecutar lo siguiente en consola:
curl.exe -X PUT -d @nombreArchivo 'http://127.0.0.1:5894/basedatos/_design/nombre
Esta es la forma base de como incorporar el documento en nuestra Base de Datos, por supuesto la ejecución de cURL cambiará dependiendo de nuestro sistema operativo, y la conexión con el servidor dependerá de si tenemos habilitado la autenticación de usuarios.

Aquí es importante resaltar que el nombre de nuestro archivo debe ir precedido por un símbolo @ ya que si no lo hacemos cURL estará esperando el contenido del archivo directamente, y por razones obvias de usabilidad no resulta adecuado escribir directamente el JSON en la consola.

En el caso de nuestro entorno de pruebas lo anterior quedaría como lo siguiente:
curl.exe -X PUT -d recetas-couch.js http://root:123456@127.0.0.1:5984/recetas/_design/recetas
Donde al ejecutarlo obtendríamos lo siguiente en nuestra consola:


design-documemtos-couchdb-2.jpg


Cómo vemos ya hemos creado nuestro primero documento diseño en CouchDB. Si ingresamos a Futon podremos ver como nuestro documento de diseño ya existe y hasta nos da los detalles de las diferentes vistas y shows que tenemos:


Ahora si queremos ver de alguna forma la utilidad para todo esto que estamos construyendo, solo tenemos que ingresar desde el navegador y con la siguiente estructura podemos hacer la consulta a nuestro show que nos arrojará un resultado:
http://localhost:5984/NombreBaseDatos/_design/NombreDocumentoDiseño/_show/NombreShow/idDocumento
Veamos que resulta de la consulta a la que hemos insertado en nuestro entorno de pruebas:


Como vemos es algo bastante sencillo, si nos fijamos en la definición del shows en nuestro archivo JSON notaremos que lo que hemos hecho es imprimir el titulo tras unas etiquetas <h1> por lo que la respuesta es interpretada en nuestro navegador como un documento HTML.

Lo mismo podemos hacer con las views o vistas, solo que esta vez en lugar de definir el ID del documento en específico vamos a utilizar los nombres de las vistas, veamos:


Notamos que en este caso simplemente hemos indicado el nombre de nuestra vista by_ingredientes, con ello obtenemos un resultante en JSON, pero esto también tiene otra función y es que podemos hacer búsquedas, ya que hemos construidos los índices dando así un poco más de rendimiento a nuestro motor de Base de Datos. Ya que CouchDB únicamente va a recorrer todos los documentos la primera vez, ya las llamadas o consultas posteriores no van a requerir este procesamiento.

La forma en la que podemos hacer consultas es a través de las llamadas llaves o keys, y esto podemos hacerlo directamente dentro de la consulta por URL a nuestra vista, así podemos establecer rangos, palabras exactas, valores únicos, etc.

Algunos operadores que podemos utilizar son:

startkey
Representa al valor de inicio para la búsqueda dentro de la vista.

endkey
Representa el valor final para detener la búsqueda dentro de la vista.

key
Representa un valor exacto de búsqueda dentro de la vista.


Veamos a continuación como podemos hacer un pequeño ejemplo con esto, vamos a ubicar la receta que contenga Ajo como ingrediente, en nuestro caso deberíamos obtener la receta “Salsa Pesto”.


Hemos filtrado a un solo documento, de los dos que teníamos inicialmente cargados en nuestra Base de Datos, esto nos da solo una pequeña aproximación de lo poderosa que es esta herramienta.

Si añadimos una endkey, podemos hacer un filtrado más amplio al añadir un rango, esto se los dejamos de tarea de forma que puedan investigar y cometer errores, fomentando así la perdurabilidad en la memoria de todo lo aprendido.

Con esto hemos finalizado este tutorial, como vemos la herramienta de documentos de diseño es muy poderosa, porque no solo nos permite crear vistas y shows, es que estos pueden tener un procesamiento JavaScript mucho más avanzado del que cubrimos acá incorporando operaciones con valores, condicionales, operaciones en el DOM, etc., todo lo que podamos lograr con el lenguaje podemos incorporarlo efectivamente dentro de CouchDB, con ello la construcción de aplicaciones utilizando únicamente JavaScript es muy posible.

¿Te ayudó este Tutorial?


1 Comentarios


Ivan Dario Sanchez Moreno
sep 23 2015 23:44

Tengo un inconveniente con su tutorial... me podrian ayudar

 

Una vez que ya tenemos data cargada en nuestra Base de Datos, debemos construir el documento, para ello crearemos un archivo llamado en nuestro caso recetas-couch.js y le colocamos el siguiente código:

 

de que manera puedo crear ese archivo y cargarlo en la base se datos

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X