Pplware

Tutorial: Webservices em nodejs com Strongloop (2)

Os Web Services são muito úteis quando pretendemos desenvolver serviços e aplicações de grande escala/distribuídas… mas também para a interoperabilidade de sistemas.

Depois da instalação do nodejs e do Strongloop hoje vamos mostrar como pode criar um modelo de dados.

Com o nosso webservice criado vamos agora criar um modelo para que os utilizadores do webservice possam registar-se e fazer o login. Para isso vamos ao terminal e dentro da pasta do projeto escrevemos:

sudo slc loopback:model

Ao executarmos este comando será apresentada um novo formulário:

Depois de esta fase vamos definir as propriedades do nosso modelo, neste caso vamos definir para o modelo utilizadores um username, email e uma password todos do tipo string e obrigatórios.

Neste momento com o comando seguinte já podemos ver no browser o nosso webservice a funcionar, mas apenas com o modelo utilizadores:

sudo node .

Depois de executar este comando é mostrado algo como o que se pode ver na figura anterior e que nos indica que temos o webservice a funcionar no porto lógico 3000.

O explorer é uma ferramenta semelhante ao postman e que podemos usar para testar o webservice.

Para complementar o tutorial em seguida serão implementados mais dois modelos do tipo (PersistedModel), o modelo Marca e o modelo Telefone.

O modelo telefone não será exposto no webservice, em vez disso o modelo Marca terá uma propriedade que será um array com objectos do tipo Telefone, por outras palavras uma Marca pode ter vários telefones.

Corremos novamente o comando sudo node . e vamos usar o explorer para inserir alguns dados.

sudo node .

No explorer vamos até ao POST/ Marcas e clicámos para abrir uma janela como a que vemos na figura seguinte:

No canto inferior direito podemos ver o nosso esquema do modelo, se der-mos um click em cima esse esquema será passado automaticamente para a caixa de parâmetros, onde poderá ser preenchido para poder ser executado, exemplo na figura seguinte.

Agora fazemos,”Try it Out”, click no botão no canto inferior esquerdo para executar-mos o POST.

Pronto os dados foram enviados com sucesso. Vamos agora executar um GET para vermos esses dados. Para isso vamos até ao GET/ Marcas e fazemos um “Try it Out”.

Podemos verificar que esta a tudo a funcionar bem, no entanto ainda existem problemas, um deles é o facto de que os dados estão a ser guardados em memória, o que significa que se pararmos a API perdemos todos os dados, para isto não acontecer vamos instalar o mongodb para guardarmos os dados. O segundo problema centra-se na questão de que qualquer pessoa pode aceder á API e fazer um GET ou um POST por exemplo, para isso não acontecer temos de controlar os acessos, iremos dar permissões para que apenas utilizadores que estão registados e que fizeram o login possam executar essas operações.

Vamos então fazer a instalação do mongodb:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt update
sudo apt install –y mongodb-org

Para iniciar o serviço basta usar o seguinte comando:

sudo service mongod start

Quisermos verificar se tudo correu bem e o mongodb está a correr:

sudo systemctl status mongodb.service

Agora e com o mongodb instalado vamos criar um datasource no nosso webservice para associarmos os nossos modelos.

sudo slc loopback:datasource

Depois de executarmos o comando anterior temos de preencher mais algumas questões, na primeira e como podemos ver na figura anterior da-mos um nome ao datasource, neste caso é MongoDB, depois temos de escolher o tipo de datasource que é o mongodb, em seguida temos de preencher as opções de host, no nosso caso como a base de dados foi instalada na mesma máquina dizemos que é o localhost, para a porta o mongodb por defeito corre na porta 27017, username e password foi deixado em branco mas não é aconselhável fazer isto, de seguida é perguntado se queremos instalar o ‘connector’ do mongodb dizemos que sim se não temos de o fazer a seguir manualmente.

Se tudo correu bem vemos algo parecido com o que se pode ver na figura seguinte

Agora temos de fazer algumas alterações no ficheiro de configuração dos modelos para isso executamos o seguinte comando:

sudo nano server/model-config.json

Podemos ver que as propriedades datasource são db, temos de as alterar para o novo datasource que acabamos de criar, MongoDB, como podemos ver na figura seguinte.

Depois de iniciarmos novamente a API com o comando sudo node . se tentarmos fazer um GET ás Marcas verificamos que não existem dados, vamos então fazer novamente um POST para depois voltarmos a parar e ligar novamente a API e verificar se já conseguimos guardar os dados enviados para a API.

Agora que temos a nossa base de dados ligada á API vamos implementar os acessos de controlo, para isso executamos o comando:

sudo slc loopback:acl

Nas perguntas que são feitas escolhemos todos os valores por defeito menos o ultimo que devemos escolher o que nega o acesso ‘Explicitly deny access’, neste momento se corrermos a API já não temos acesso a nada pois negamos o acesso a todos os modelos, todos métodos e propriedades, todos os tipos (CRUD) leitura, escrita, apagar e editar e a todos os utilizadores.

Mas não é exatamente isto que se pretende, o que se pretende é que os utlizadores registados e que tenham feito o log in possam aceder á API, para isso executamos novamente o comando:

sudo slc loopback:acl

E damos permissões para que um utilizador que tenha feito o log in possa executar operações de leitura ás Marcas.

Agora com a API a correr vamos ao explorer e registamos um utilizador, para isso vamos fazer um POST no modelo utilizadores.

Pronto agora fazemos o “Try it Out” e temos um novo utilizador registado.

Recebemos a reposta a confirmar que o utilizador foi registado com sucesso.

E em seguida vamos fazer o login com as credenciais deste novo utilizador, para isso temos de fazer um POST em utilizadores/login, como mostra na figura seguinte.

Fazemos o “Try it Out” para obtermos uma resposta que contem o token que podemos usar para nos identificar na API.

Na figura pode ver-se na resposta que foi enviada existe uma propriedade “id” no objecto json, este é o token que pode ser usado para a API identificar o utilizador, para podermos usar e testar a API temos de o copiar e colar na caixa de texto do explorer no canto superior direito e fazer o set access token.

Pronto agora se fizermos novamente um GET às Marcas já conseguimos uma resposta com sucesso, mas se tentarmos o POST ou outra operação sem ser de leitura obteremos um erro de acesso pois não demos permissões para que isso seja feito.

Exit mobile version