Observação importante: esta postagem do blog contém informações sobre uma função CURL de visualização do desenvolvedor no Eventing. A função CURL será alterada no Couchbase Server 6.5, consulte Usando cURL com o Eventing Service: Atualização para obter mais detalhes.
O serviço Couchbase Eventing é novo a partir de Couchbase 5.5 e eu já havia escrito um tutorial sobre Detecção de informações confidenciais e envio de notificações. Em meu tutorial anterior, demonstrei como fazer solicitações a um serviço remoto usando o operador cURL no N1QL. No entanto, e se você não quiser usar o N1QL para fazer o trabalho?
Veremos como usar a função cURL para fazer solicitações em vez de N1QL ao usar o Serviço de eventos.
No momento, o Eventing está em Developer Preview, portanto, a funcionalidade pode estar sujeita a alterações. No entanto, isso deve lhe dar uma ideia do que você pode fazer.
Observe que a construção curl ainda está em desenvolvimento. Esse recurso destina-se apenas a fins de desenvolvimento e não deve ser usado em ambientes de produção.
Em vez de tentar encontrar uma API para usar, vamos criar a nossa própria com o Node.js, semelhante ao que fizemos no exemplo anterior. Assim que tivermos a API implementada, criaremos uma função no Couchbase que será acionada quando novos documentos forem criados ou alterados.
Criação de uma API do Node.js para receber solicitações
Nossa API será incrivelmente simples porque o Node.js não é o foco deste tutorial. Receberemos dados e retornaremos esses mesmos dados à nossa função.
Crie um novo diretório em seu computador e execute os seguintes comandos da CLI dentro desse diretório:
|
1 2 |
npm init -y npm install express body-parser --save |
Os comandos acima criarão um novo package.json e instale o Express Framework e um módulo para aceitar corpos de solicitação. Com as dependências disponíveis, execute o seguinte:
|
1 |
touch app.js |
Se você estiver no Windows, vá em frente e crie o arquivo app.js como você quiser.
Abra o recém-criado app.js e inclua o seguinte código JavaScript:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
const Express = require("express"); const BodyParser = require("body-parser"); var app = Express(); app.use(BodyParser.json()); app.use(BodyParser.urlencoded({ extended: true })); app.post("/notify", (request, response) => { console.log("POST /notify"); response.send(request.body); }); var server = app.listen(3000, () => { console.log("Listening..."); }); |
Temos um único endpoint que faz exatamente o que mencionei anteriormente. Quando executamos esse aplicativo, ele está servindo na porta 3000. No nosso exemplo, tanto o banco de dados quanto o aplicativo Node.js serão executados localmente. Se as coisas forem diferentes, verifique se o aplicativo Node.js pode ser acessado de um host remoto.
Desenvolvimento de uma função simples do Couchbase com suporte a cURL
Nossa função será muito simples para este exemplo. Não verificaremos determinados dados, apenas verificaremos se algo foi criado ou alterado. Se a função for acionada, publicaremos os dados em nosso aplicativo Node.js.
No Eventos do painel administrativo do Couchbase, crie uma nova função, mapeando o Bucket e o Bucket de metainformações corretos. O código que queremos adicionar é parecido com o seguinte:
|
1 2 3 4 5 6 7 |
function OnUpdate(doc, meta) { log('document', doc); var response = curl("https://localhost:3000/notify", { method: "POST", data: doc }); log('curl', response); } function OnDelete(meta) { } |
Observe que estamos usando o enrolar e especificando algumas opções, como o corpo da solicitação e o método. Se quiséssemos, poderíamos adicionar outras propriedades, como cabeçalhos ou autorização.
Tente adicionar um novo documento ou alterar um. O documento deve ser enviado.
Conclusão
Você acabou de ver como enviar dados para um serviço remoto a partir de uma função do Couchbase com a função cURL e o serviço Couchbase Eventing. Isso é um pouco diferente do meu exemplo anterior porque ele não usa o N1QL para tornar isso possível.
Para saber mais sobre o serviço Eventing do Couchbase, consulte o Portal do desenvolvedor do Couchbase.