Um dos desafios de escrever software usado por uma grande variedade de desenvolvedores é manter APIs estáveis e compatíveis entre si. Às vezes, essa necessidade de compatibilidade pode nos colocar em um canto que restringe nossa capacidade de implementar novos recursos interessantes. Por isso, estou muito animado em anunciar o lançamento das versões Alpha do nosso SDK Node.js 3.0. Esse grande aumento de versão permite que nos concentremos novamente na criação de APIs poderosas que aproveitam fortemente os novos recursos disponíveis no ECMAScript 6 e integram de forma mais intuitiva o amplo conjunto de recursos do Couchbase ao Node.js. Também tivemos a oportunidade de aproveitar as lições aprendidas nos últimos 4 anos do SDK 2.0 e criar APIs mais preparadas para o futuro, o que nos permitirá evoluir com a linguagem e os recursos do servidor durante toda a vida útil dessa próxima geração de SDK. Agora que você sabe quais eram nossos objetivos, vamos falar um pouco sobre as mudanças resultantes!
Introdução de promessas e Async/Await
A versão 3.0 do SDK do Node.js introduz o suporte integrado a Promessas em todas as APIs, o que se presta bem à criação de código escrito em série sem bloqueio usando os novos recursos Async/Await introduzidos no ECMAScript 6. Todos os métodos agora suportam Promessas e o padrão de retorno de chamada nativo do código Javascript mais antigo. Além disso, todos os emissores de eventos foram aprimorados com suporte a promessas. No caso das várias interfaces de consulta dentro do SDK, isso permite que você escolha, caso a caso, se deseja processar os dados em tempo real ou simplesmente aguardá-los e processar todo o conjunto de resultados de uma só vez.
Inicialização do cluster e dos buckets no SDK 3.0
Assim como no SDK 2.0, os objetos Cluster e Bucket estão de volta no SDK 3.0, cada um representando suas equivalências de servidor. A conexão a um cluster é feita de maneira semelhante à do SDK 2.0, embora os parâmetros e o padrão de autenticação tenham sido aprimorados:
|
1 2 3 4 5 6 7 8 |
const couchbase = exigir('couchbase'); var agrupamento = novo couchbase.Aglomerado('couchbase://localhost', { nome de usuário: "Administrador, senha: 'senha', }); var balde = agrupamento.balde('default'); |
Semelhante ao SDK 2.0, seus objetos de cluster são objetos de gerenciamento de recursos de longa duração, cuja vida útil geralmente vai da inicialização até o encerramento do aplicativo. A partir desta próxima geração de SDKs, o restante dos seus objetos pode ter vida curta ou ser mantido sem nenhuma penalidade de desempenho. O SDK armazenará em cache internamente os objetos bucket, objetos de coleção etc. em seu nome.
As novas APIs KV para o Couchbase Server 6.5
Todas as operações de chave/valor agora existem no nível das coleções, que sempre serão membros de exatamente um escopo. No caso de uma versão do servidor que não ofereça suporte a coleções, você terá acesso à coleção padrão, que funcionará exatamente como nossos buckets faziam no passado. Aqui está um exemplo de acesso à coleção padrão e, em seguida, de gravação e leitura de alguns dados com ela.
|
1 2 3 4 5 |
var col = balde.defaultCollection(); var res = aguardar col.upsert('teste', { x: 14 }); var res = aguardar col.obter('teste'); |
Escopo e coleções com o modo Developer Preview
Como parte da próxima versão do Server 6.5, introduzimos a capacidade de ativar um modo de visualização do desenvolvedor que expõe alguns recursos futuros que ainda estão em desenvolvimento. A ativação do recurso Coleções permite que você acesse um recurso que representa o futuro do acesso a dados com o Couchbase Server 6.5. As coleções permitem que você divida um Bucket em vários escopos e coleções lógicos. Isso substitui a exigência das primeiras versões do servidor Couchbase de adicionar um campo especial de "tipo" que designava uma espécie de agrupamento de documentos por nome, que poderia ser consultado independentemente em um Bucket. Acredito que você descobrirá que esse é um modelo de programação muito mais intuitivo e permitirá que você mantenha seus dados mais bem organizados. Aqui está um exemplo:
|
1 2 3 4 |
var escopo = balde.escopo('app1'); var col = escopo.coleção('usuários'); var res = aguardar col.upsert('teste', { x: 14 }); |
As novas APIs de consulta
O N1QL, assim como o Analytics e o FTS, é considerado de escopo "global", pois uma consulta pode fazer referência a vários Buckets. Inicialmente, no SDK 2.0, as consultas N1QL tinham escopo para o Bucket e, posteriormente, foram adicionadas ao Cluster. Atualmente, no SDK 3.0, você só pode fazer consultas a partir do objeto Cluster.
|
1 |
var res = aguardar agrupamento.consulta('SELECT * FROM default WHERE x=14'); |
De modo geral, todos os serviços (Query, FTS e Analytics) têm uma API pública muito semelhante à do SDK 2.0; no entanto, para fins de consistência, todos os campos obrigatórios foram adicionados como um parâmetro no lado esquerdo e os parâmetros opcionais agora estão consolidados em um bloco ou estrutura de "opções" no lado direito. Você perceberá que isso continua em todo o SDK e melhora muito a consistência das nossas APIs.
|
1 2 3 4 |
var res = aguardar agrupamento.consulta('SELECT * FROM default', { adhoc: falso, somente leitura: verdadeiro, }); |
Obtendo a liberação
Ao instalar a versão alfa do SDK do Node.js 3.0, você pode simplesmente usar o npm como faria normalmente, especificando a versão específica ao realizar a instalação.
|
1 |
> npm instalar couchbase@3.0.0-alfa.1 |
Obrigado, Brett, por esta postagem. Estamos procurando suporte para Promises e Async/Await no NodeJS. Há alguma previsão de quando esse recurso estará disponível para produção?