Uno de los retos a la hora de escribir software utilizado por un gran número de desarrolladores es mantener API estables y compatibles entre sí. A veces, esta necesidad de compatibilidad puede arrinconarnos y limitar nuestra capacidad de implementar nuevas funciones interesantes. En vista de ello, me complace anunciar el lanzamiento de las versiones Alpha de nuestro SDK Node.js 3.0. Este importante salto de versión nos permite centrarnos de nuevo en la construcción de potentes APIs que aprovechen al máximo las nuevas características disponibles en ECMAScript 6 e integren de forma más intuitiva el amplio conjunto de características de Couchbase en Node.js. También tuvimos la oportunidad de aprovechar las lecciones aprendidas durante los últimos 4 años del SDK 2.0 y construir APIs más preparadas para el futuro que nos permitirán evolucionar con el lenguaje y las características del servidor a lo largo de la vida de esta nueva generación de SDK. Ahora que ya sabes cuáles eran nuestros objetivos, hablemos un poco de los cambios resultantes.
Introducción de Promesas y Async/Await
La versión 3.0 del SDK de Node.js introduce soporte integrado para Promises a través de las APIs, esto se presta bien para escribir código no-bloqueante escrito en serie usando las nuevas características Async/Await introducidas en ECMAScript 6. Todos los métodos soportan ahora tanto Promises como el patrón callback nativo del código Javascript más antiguo. Además, todos los emisores de eventos han sido mejorados con soporte para promesas. En el caso de las diversas interfaces de consulta dentro del SDK, esto le permite elegir en cada caso si desea procesar los datos sobre la marcha, o simplemente esperar y procesar todo el conjunto de resultados a la vez.
Inicialización del clúster y los cubos en SDK 3.0
Al igual que en SDK 2.0, los objetos Cluster y Bucket están de vuelta en SDK 3.0, cada uno representando sus equivalencias de servidor. La conexión a un clúster se realiza de forma similar a SDK 2.0, aunque los parámetros y el patrón de autenticación se han mejorado:
1 2 3 4 5 6 7 8 |
const couchbase = requiere(couchbase); var grupo = nuevo couchbase.Grupo(couchbase://localhost, { nombre de usuario: Administrador, contraseña: contraseña, }); var cubo = grupo.cubo(por defecto); |
Al igual que en SDK 2.0, los objetos Cluster son objetos de gestión de recursos de larga duración, cuya vida se extiende generalmente desde el inicio hasta el cierre de la aplicación. A partir de esta nueva generación de SDKs, el resto de tus objetos pueden ser de vida corta, o mantenerse sin tener ninguna penalización de rendimiento. El SDK almacenará internamente en caché objetos bucket, objetos collection, etc. en tu nombre.
Las nuevas API de KV para Couchbase Server 6.5
Todas las operaciones clave/valor existen ahora en el nivel de las colecciones, que siempre serán miembros de exactamente un ámbito. En el caso de una versión del Servidor que no soporte colecciones, tendrá acceso a la colección por defecto que funcionará exactamente como lo hacían nuestros buckets en el pasado. He aquí un ejemplo de acceso a la Colección por defecto y luego escribir y leer algunos datos con ella.
1 2 3 4 5 |
var coll = cubo.defaultCollection(); var res = await coll.upsert(prueba, { x: 14 }); var res = await coll.consiga('prueba'); |
Ámbito y colecciones con el modo Vista previa para desarrolladores
Como parte de la próxima versión de Server 6.5, hemos introducido la posibilidad de activar un modo de vista previa para desarrolladores que expone algunas de las próximas características que aún están en desarrollo. Activar la característica de Colecciones te permite acceder a una característica que representa el futuro del acceso a datos con Couchbase Server 6.5. Collections te permite dividir un Bucket en múltiples Scopes y Collections lógicos. Esto sustituye al requisito de las primeras versiones de Couchbase Server de añadir un campo especial "type" que designaba una especie de agrupación de documentos por nombre que podían ser consultados independientemente dentro de un Bucket. Creo que encontrarás que es un modelo de programación mucho más intuitivo y te permitirá mantener tus datos mejor organizados. Aquí tienes un ejemplo:
1 2 3 4 |
var alcance = cubo.alcance(aplicación1); var coll = alcance.colección(usuarios); var res = await coll.upsert(prueba, { x: 14 }); |
Las nuevas API de consulta
N1QL, al igual que Analytics y FTS, se consideran de ámbito "global" en el sentido de que una consulta puede hacer referencia a varios Buckets. Inicialmente en el SDK 2.0, las consultas N1QL tenían como ámbito el Bucket y más tarde se añadieron al Cluster. En SDK 3.0 actualmente sólo se puede consultar desde el objeto Cluster.
1 |
var res = await grupo.consulta('SELECT * FROM default WHERE x=14'); |
En general, todos los servicios (Query, FTS y Analytics) tienen una API pública muy similar a la del SDK 2.0. Sin embargo, por motivos de coherencia, todos los campos obligatorios se han añadido como parámetros en el lado izquierdo y los parámetros opcionales se han consolidado en un bloque o estructura de "opciones" en el lado derecho. Observará que esto continúa en todo el SDK y mejora enormemente la coherencia de nuestras API.
1 2 3 4 |
var res = await grupo.consulta(SELECT * FROM default, { adhoc: falso, sólo lectura: verdadero, }); |
Conseguir la liberación
Para instalar la versión alfa del SDK de Node.js 3.0, basta con utilizar npm como se haría normalmente, especificando la versión concreta al realizar la instalación.
1 |
> npm instale couchbase@3.0.0-alfa.1 |
Gracias Nice Brett para este post. Estamos buscando Promesas y Async / espera de apoyo en NodeJS. ¿Hay algún plan cuando esta característica disponible para la producción?