Ebook 02.02
Ebook 02.02
Ebook 02.02
PROGRAMAÇÃO BACK-END
MONGODB
SUMÁRIO
MongoDB...........................................................................................................................3
Instalação e configuração do SGBD MongoDB na nuvem.........................................3
Conhecendo o MongoDB Atlas.......................................................................................4
Pacote Mongoose...........................................................................................................11
Como conectar o MongoDB ao Node.js usando o Mongoose.................................12
Criação de um esquema utilizando o Mongoose......................................................15
Estilo arquitetural REST.................................................................................................16
Fundamentos da API REST............................................................................................18
GET....................................................................................................................................19
POST.................................................................................................................................20
PUT...................................................................................................................................21
DELETE.............................................................................................................................21
Definição de URI.............................................................................................................22
Teste de API utilizando a ferramenta Postman.........................................................23
Referências.................................................................................................................25
MAS, ANTES DE COMEÇAR...
Sua equipe já criou o esquema de banco de dados, utilizando o
Mongoose, que permitirá a validação dos campos relacionados à coleção
de usuários, cujos dados serão persistidos no banco de dados MongoDB
na nuvem. Para conferir esses arquivos você deve retornar ao moodle e
baixar a pasta: api-nodejs_incompleto com os arquivos iniciais.
MONGODB
O MongoDB foi desenvolvido para unir características dos bancos de dados
relacionais e NoSQL. Como resultado dessa mistura de abordagens, o MongoDB
apresenta ganhos de agilidade com o uso de esquemas flexíveis e facilita
a escalabilidade horizontal, recursos pouco explorados por outros SGBDs
(Sistemas Gerenciadores de Banco de Dados), como MySQL e PostgreSQL. O
MongoDB Atlas, que você conhecerá neste módulo, é um serviço global de banco
de dados em nuvem criado e executado pela equipe por trás do MongoDB.
Na sequência, compartilharemos informações sobre a tecnologia REST
(Representational State Transfer), com o objetivo de fornecer uma compreensão
básica dos principais fundamentos de API (Application Programming Interface),
REST e protocolo HTTP. Por fim, você verá mais detalhes sobre a ferramenta
Postman, usada para desenvolver, testar, compartilhar e documentar APIs. Inicie
agora seus estudos! Vamos para mais uma jornada de aprendizados na área de
desenvolvimento de sistemas!
3
Como você já identificou, o Node.js é o framework JavaScript mais popular
quando se trata de desenvolvimento de aplicativos de alta velocidade. Os
profissionais do Node.js geralmente optam por um banco de dados NoSQL que
pode acompanhar a velocidade do Node.js enquanto mantém o desempenho
do aplicativo. O MongoDB é perfeito para esse tipo de requisito, pois possui um
ciclo de desenvolvimento muito rápido e um desempenho bastante eficiente.
E para facilitar nosso trabalho de instalação e configuração durante o acesso
ao banco de dados, iremos utilizar em nossos projetos a versão do MongoDB na
nuvem: o MongoDB Atlas.
4
Figura 1 - Tela de preferência do MongoDB Atlas
5
O próximo passo é criar um cluster. Na tela seguinte, certifique-se de que a
opção “Free Shared” esteja selecionada para o tipo de implantação do banco de
dados, pois isso determinará que seja gratuito e só o usaremos para um projeto
pessoal. Em seguida, você deverá definir qual provedor de nuvem será utilizado.
Você tem a opção de escolher AWS, Google Cloud ou Azure. Então, na seção
“Cloud Provider & Region”, deixaremos a opção padrão sugerida, por exemplo,
“AWS”. Usaremos a região “Sao Paulo (sa-east-1)”, pois ela possui a tag de região
recomenda, além de ser de nível gratuito. Veja as configurações selecionadas na
imagem a seguir.
6
Figura 4 - Tela de definição da camada do cluster
Fonte: do Autor (2022)
Este processo pode levar de 3 a 5 minutos para ser finalizado. Enquanto isso,
aguarde até que o cluster seja criado. Uma vez feito isso, você deve acessar
o menu “Database Access” e clicar no botão “Add New Database User” para
adicionar um novo usuário, que irá ter acesso ao banco de dados remotamente
pela aplicação Node.js.
7
Na tela a ser exibida, na seção “Password Authentication”, informe um nome
de usuário e uma senha de sua escolha. As demais configurações podem ser
mantidas conforme o padrão sugerido. Posteriormente, clique no botão “Add
User”, localizado na parte inferior da página.
8
Figura 7 - Menu de gerenciamento de rede
Fonte: do Autor (2022)
9
O último passo é obter a string de conexão do banco de dados para ser
utilizado nas aplicações Node.js. Para isso, clique no menu “Database” e, depois,
na opção “Connect”.
Este menu de acesso oferece três opções para se conectar ao cluster do banco
de dados a partir do seu aplicativo. Neste caso, devemos selecionar “Connect
your application”. Esta opção lhe dará uma string de conexão e exemplos de
como usá-la.
10
A opção de driver deve ser definida como “Node.js”, e a versão deve ser “4.1
or later”. Na sequência, você precisará copiar a string de conexão apresentada
e armazená-la em um local seguro, pois iremos utilizá-la posteriormente em
um exemplo prático. Veja um exemplo de como uma string de conexão se
parece: “mongodb+srv://edinilson:<password>@cluster0.7rvrjsn.mongodb.
net/?retryWrites=true&w=majority”, devendo a expressão “<password>” ser
substituída pela senha que você definiu para o seu usuário criado durante o
cadastro na tela “Database Access”.
Pacote Mongoose
O NoSQL trouxe flexibilidade ao mundo tabular dos bancos de dados. O
MongoDB, em particular, tornou-se uma excelente opção para armazenar
documentos JSON (JavaScript Object Notation) não estruturados. Os dados
começam como JSON na interface do usuário e passam por pouquíssimas
transformações para serem armazenados, de modo que obtemos benefícios
com o aumento do desempenho e a diminuição do tempo de processamento.
Mas, NoSQL não significa uma completa falta de estrutura. Você ainda precisa
validar e converter seus dados antes de armazená-los e ainda pode precisar
aplicar alguma lógica de negócios a eles. Recebeu dados e precisa validá-los para
garantir que o que recebeu é o que precisa? Também pode ser que você precise
processar os dados de alguma forma antes de salvá-los. É aqui que o Mongoose
entra em ação.
11
Mongoose é um pacote NPM para aplicativos Node.js. Ele permite definir
esquemas para que nossos dados se encaixem, além de abstrair o acesso ao
MongoDB. Dessa forma, é possível garantir que todos os documentos salvos
compartilhem uma estrutura e contenham as propriedades necessárias.
O pacote “mongoose” conecta seus clusters ou coleções do MongoDB com seu
aplicativo Node.js. Ele permite que você crie esquemas para seus documentos.
O Mongoose fornece muitas funcionalidades ao criar e trabalhar com esquemas
(MONGOOSEJS, 2022). Nesta seção, veremos um exemplo de como conectar uma
instância do MongoDB com um aplicativo Node.js.
12
//Validação da configuração da conexão com o MongoDB
mongoose
.connect(uri, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log("A conexão com o MongoDB foi realizada com sucesso!");
})
.catch((err) => {
console.log(err);
});
13
Para testar este exemplo, você precisará criar um projeto na plataforma
CodeSandbox e instalar as dependências: “express” e “mongoose”.
Posteriormente, cole o código-fonte apresentado anteriormente e substitua
o valor da variável “uri” pelo valor da sua string de conexão, obtida em
procedimentos anteriores, para ter acesso ao seu banco de dados no MongoDB
Atlas. Assim, ao executar sua aplicação, caso a sua configuração com o MongoDB
Atlas tenha sido realizada com sucesso, será exibida a seguinte mensagem no
“Terminal”: “A conexão com o MongoDB foi realizada com sucesso!”, conforme
mostra a imagem seguinte.
Mensagem de
inicialização do servidor
14
Caso sejam exibidos erros no “Terminal”, você deverá conferir se a sintaxe da
sua string de conexão está correta ou se deverá refazer os procedimentos de
configuração da sua conta do MongoDB Atlas.
15
A maioria desses tipos de dados será familiar para os desenvolvedores.
Se você não estiver familiarizado com os tipos de dados, basta definir
o tipo de dados que você armazenará. Por exemplo, um nome será
“String” porque é texto. Um preço ou idade será um “Number” porque
é um valor numérico. Um valor lógico é um valor verdadeiro ou falso,
podendo ser definido pelo tipo “Boolean”.
Posteriormente, você vai precisar exportar este módulo para ser utilizado em
outros projetos, por isso, deve utilizar o comando “module.exports”. O primeiro
parâmetro do comando “mongoose.model” é o nome da coleção que conterá os
documentos que, neste caso, é “Usuario”. O segundo parâmetro é o esquema
que definimos anteriormente, nomeado como “UsuarioEsquema”.
Agora, este modelo está pronto para ser importado e usado para criar
dados seguindo nosso esquema na coleção “Usuario”. Este é um padrão de
desenvolvimento comum quando se usa Node.js e MongoDB. Para importar
este esquema em algum projeto desenvolvido em Node.js, utilize a seguinte
instrução:
16
Os aplicativos móveis podem ser um
dos exemplos muito familiares de APIs.
Os aplicativos móveis geralmente contêm
todas as partes relacionadas à interface
do usuário do aplicativo.
Todos os dados em tempo real exibidos
nos aplicativos móveis são buscados por
meio das APIs, por exemplo. Todas as
informações meteorológicas, e-mails,
pontuações de jogos, transmissões ao
vivo e muitos outros dados em tempo
real são obtidos de APIs implantadas no
servidor.
Da mesma forma, muitos sites
modernos buscam os dados sob
demanda (que são buscados do servidor
exatamente quando necessário). Esse
tipo de interação acontece por meio de
uma API.
17
Fundamentos da API REST
O REST foi projetado para aproveitar os protocolos HTTP existentes quando
usados para APIs da web. É muito flexível, pois não está vinculado a recursos ou
métodos e tem a capacidade de lidar com diferentes chamadas e formatos de
dados. Como a API REST não é restrita a um formato XML como SOAP (Simple
Object Access Protocol), ela pode retornar vários outros formatos, dependendo
do que for necessário. Se um serviço aderir a esse estilo, ele será considerado
um aplicativo “RESTful”. REST permite que componentes acessem e gerenciem
funções dentro de outro aplicativo (RUBY, 2007; SAUDATE, 2014).
As diretrizes REST sugerem o uso de um método HTTP específico, em um tipo
específico de chamada feita ao servidor, em que pode retornar esses dados
em um formato XML (Extensible Markup Language) ou JSON (JavaScript Object
Notation), por exemplo. Dessa forma, é necessário encontrar um método HTTP
adequado para a ação executada pela API (RUBY, 2007; SAUDATE, 2014). Confira
na imagem a seguir os principais métodos HTTP.
GET
POST
JSON HTTP
PUT
DELETE
Cliente envia Servidor envia
uma requisição Métodos HTTP uma resposta
Assim, as APIs REST são responsáveis por permitirem que você desenvolva
todos os tipos de aplicativos da web com todas as operações possíveis de
CRUD (Create, Read, Update, Delete, isto é, Criar, Recuperar, Atualizar, Excluir). A
partir dessas informações, destacamos que iremos focar apenas nos principais
métodos HTTP: GET, POST, PUT e DELETE. Acompanhe, na sequência, suas
principais definições.
18
GET
Use solicitações GET para apenas recuperar informações de recursos. Como
as solicitações GET não alteram o estado do recurso, eles são considerados
métodos seguros.
Além disso, quando as APIs GET fazem várias solicitações idênticas, elas devem
produzir sempre o mesmo resultado até que outra API (POST ou PUT) altere o
estado do recurso no servidor, prevalecendo o conceito da idempotência. Veja os
códigos de resposta da API GET (RUBY, 2007; SAUDATE, 2014):
› Para qualquer API HTTP GET, se o recurso for encontrado no servidor, ele
deverá retornar o código de resposta HTTP 200 (OK) junto com o corpo da
resposta, que geralmente é conteúdo XML ou JSON (devido à sua natureza
independente de plataforma);
› Da mesma forma, se for determinado que a própria solicitação GET não foi
formada corretamente, o servidor retornará o código de resposta HTTP 400
(BAD REQUEST).
19
POST
Use o método POST para criar novos recursos subordinados, por exemplo,
quando um arquivo está subordinado a um diretório que o contém ou quando
um registro está subordinado a uma tabela de banco de dados.
Falando estritamente sobre REST, os métodos POST são usados para criar um
novo recurso na coleção de recursos. Observe que invocar duas solicitações
POST idênticas resultará em dois recursos diferentes contendo as mesmas
informações. Confira os códigos de resposta da API para um método POST
(RUBY, 2007; SAUDATE, 2014):
› Muitas vezes, a ação executada pelo método POST pode não resultar em
um recurso que possa ser identificado por um URI. Nesse caso, o código
de resposta HTTP 200 (OK) ou 204 (NO CONTENT) é o status de resposta
apropriado.
20
Confira alguns exemplos de URIs utilizando POST:
› HTTP POST http://www.site.com.br/api/usuarios: criar um novo usuário;
PUT
Use o método PUT principalmente para atualizar um recurso existente. A
diferença entre os métodos POST e PUT pode ser observada nos URIs de
solicitação. As solicitações POST são feitas em coleções de recursos, enquanto
as solicitações PUT são feitas em um único recurso. Veja os códigos de resposta
para o método PUT (RUBY, 2007; SAUDATE, 2014):
› Se um novo recurso foi criado pela API PUT, o servidor de origem deve
informar, por meio da resposta, o código de resposta HTTP 201 (CREATED).
DELETE
Os métodos DELETE excluem os recursos. Se você excluir um recurso, ele será
removido da coleção de recursos. Veja os códigos de resposta para um método
DELETE (RUBY, 2007; SAUDATE, 2014):
› Uma resposta bem-sucedida de solicitações DELETE deve ser uma resposta
de código HTTP 200 (OK) se a resposta incluir uma entidade descrevendo o
status;
21
› O status deve ser 202 (ACCEPTED) se a ação foi enfileirada;
› O status deve ser 204 (NO CONTENT) se a ação foi executada, mas a
resposta não incluiu uma entidade;
› DELETE http://www.site.com.br/api/postagens/{postagemId}/comentarios/
{id}: excluir comentário por identificador (“id”) se pertencer a postagem com
identificador = “postagemId”.
Definição de URI
Um URI (Uniform Resource Identifier) é uma cadeia de caracteres usada para
identificar um recurso na web. Em palavras simples, o URI em um serviço da web
é representado por um hiperlink com acesso a um recurso, sendo o único meio
de trocas de representações entre clientes e servidores.
O cliente usa um URI para localizar os recursos na web, enviar uma solicitação
ao servidor e ler a resposta. Por exemplo, no quadro a seguir, é exibido o URI de
acesso ao recurso para gerenciamento de usuários na web.
22
Método URL Descrição
GET /api/usuarios Obter todos os usuários.
GET /api/usuarios/{id} Obter um usuário pelo “id” (identificador).
POST /api/usuarios Criar um novo usuário.
PUT /api/usuarios/{id} Atualizar um usuário pelo “id” (identificador).
DELETE /api/usuarios/{id} Excluir um usuário pelo “id” (identificador).
23
› Teste de automação: os testes podem ser realizados em várias repetições
ou iterações usando o Collection Runner ou Newman, o que economiza
tempo para testes repetidos;
Dica
24
REFERÊNCIAS
MONGODB. Introduction to MongoDB. MongoDB, Inc., New York (NY, USA),
2020? Disponível em: https://www.mongodb.com/docs/manual/introduction.
Acesso em: 25 jul. 2022.
MONGODB. MongoDB Atlas Tutorial. MongoDB, Inc., New York (NY, USA),
2021? Disponível em: https://www.mongodb.com/basics/mongodb-atlas-tutorial.
Acesso em: 01 ago. 2022.
MONGOOSEJS. Getting Started. Mongoose ODM, 2022. Disponível em: https://
mongoosejs.com/docs/index.html. Acesso em: 30 jul. 2022.
POSTMAN. Introduction. Postman HQ, San Francisco (CA, USA), 5 jul. 2022.
Disponível em: https://learning.postman.com/docs/getting-started/introduction.
Acesso em: 05 ago. 2022.
RUBY, S.; RICHARDSON, L. Restful web services. Sebastopol (CA, USA): O’Reilly
Media, 2007.
SAUDATE, A. REST: construa APIs inteligentes de maneira simples. São Paulo (SP):
Casa do Código, 2014.
25