1. Introdução ao Backend com NodeJS
2. Laboratório de Backend com NodeJS
3. Introdução ao Banco de Dados com MongoDB
4. Integralizando o Backend na Nuvem
- Certifique-se de que possui instalado os seguintes programas:
- NoSQLBooster: https://nosqlbooster.com/downloads
- NodeJS: https://nodejs.org/en/download/
- Criar conta no GitHub e fazer login;
- Acessar o link do repositório (no caso, https://github.com/paulosalvatore/Ocean_Backend_Cloud_29_10_2020) e clicar na opção
Fork
; - Criar conta no Heroku e fazer login;
- Criar conta no MongoDB Atlas e fazer login;
- Pode colocar a linguagem
Node
ouJavaScript
no Heroku/Atlas, só serve para pesquisa deles; - O heroku é a plataforma em nuvem que vamos utilizar para hospedar nosso projeto backend em NodeJS;
- O MongoDB Atlas é a plataforma de banco de dados em nuvem para hospedar um banco MongoDB;
- No Heroku, clica na opção
New
e depois emCreate new app
; - Coloque o nome do app, mantém
United States
e clica em criar; - Na aba de
Deploy
, procura pela parte deDeployment method
e clica na opçãoGitHub
; - Faça a conexão com o GitHub;
- Precisa aparecer a opção
Search for a repository to connect to
; - Digite o nome do projeto, clique em
Search
, buque-o na lista e clique emConnect
; - Selecione a branch principal, no meu caso chama
main
e clique emEnable Automatic Deploys
;
SQL vs NoSQL
NoSQL: Not-only SQL
SQL: trabalha principalmente com relacionamento entre as informações, então fica mais fácil pra gente "amarrar" o dado (conectá-lo de alguma forma).
SQL -> Relacionamento entre as informações, utilização de Foreign Key, Inner Join e outros conceitos para buscar informações relacionadas.
NoSQL -> Armazenamento de informações mais soltas, e que possuem uma certa independência maior.
SQL: MySQL, MariaDB, PostgreSQL, OracleDB, SQL Server, entre outros, entre outros
NoSQL: MongoDB, DynamoDB, Cassandra, Redis, HBase, Neo4j, Firebase Realtime Database, entre outros
Consigo armazenar documentos completamente diferentes em uma mesma "tabela" (que aqui no mongo, chamamos de collection
)
Linguagem de consulta (Query Language) para buscar nos documentos, utilizando JavaScript para isso.
Banco de dados para aplicação de envio de mensagens
Tabela mensagens
:
id (int 11)
texto (varchar 255)
usuario (varchar 255)
criado (datetime)
modificado (datetime)
Exemplo de query para criação de registro:
INSERT INTO `mensagens` (`id`, `texto`, `usuario`, `criado`, `modificado`) VALUES (NULL, 'Essa é uma mensagem', 'Paulo Salvatore', '2020-10-27 18:29:38', '2020-10-27 18:29:38');
Exemplo de query para visualização de registros:
SELECT * FROM `mensagens`;
Exemplo de query para visualizar apenas um registro:
SELECT * FROM `mensagens` WHERE `mensagens`.`id` = 1;
Exemplo de query para atualização de registros:
UPDATE `mensagens` SET `texto` = 'Essa é uma mensagem com o texto editado' WHERE `mensagens`.`id` = 1;
Exemplo de query para remoção de registros:
DELETE FROM `mensagens` WHERE `mensagens`.`id` = 1;
As collections
podem ter QUALQUER estrutura, desde que os registros dela estejam no formato JSON
.
Então na prática, o que o MongoDB armazena são documentos em JSON
.
No projeto de NodeJS, precisamos de uma biblioteca que consegue falar com o MongoDB.
É muito comum ver tutoriais na internet que utilizam o Mongoose.
Porém, o Mongoose não é a implementação oficial do MongoDB, e sim o próprio driver chamado MongoDB.
Mongoose tem algumas validações de schema
e um certo padrão para construir as collections
.
Exemplo de query para criação de registro:
await mensagens.insertOne(mensagem);
Exemplo de query para visualização de registros:
await collection.find().toArray()
Exemplo de query para visualizar apenas um registro:
await mensagens.findOne({ _id: ObjectId(id) });
Exemplo de query para atualização de registros:
await mensagens.updateOne(
{ _id: ObjectId(id) },
{ $set: mensagem }
);
Exemplo de query para remoção de registros:
await mensagens.deleteOne({ _id: ObjectId(id) });
- Baixar o repositório em https://github.com/paulosalvatore/Ocean_Backend_22_10_2020 (clicando em
Code -> Download ZIP
) - Extrai o arquivo em um pasta, se possível em
C:/GitHub
- Abre essa pasta
- A partir daqui depende do Node instalado, então garante que a instalação terminou. https://nodejs.org/en/. Também é importante ter o Visual Studio Code instalado. (https://code.visualstudio.com/download)
- No VS Code, clique em
File -> Open Folder
- Procure pela pasta do projeto, abra ela e depois clique em
Selecionar pasta
- Vá em
Terminal -> New Terminal
para abrir uma janela do terminal no VS Code - No terminal, digite o comando
npm install
ou simplesmentenpm i
e faça a instalação do projeto. Note que isso criará a pastanode_modules
- Para rodar, digite no terminal o comando
node index
. Isso iniciará o servidor na rotahttp://localhost:3000
Servidor
Comunicação é sempre via texto
O que é importante é a estrutura desse texto
Um possível estrutura é o HTML
Servidor de 1 camada
Central de processamento que faz tudo -> Terminal
Servidor de 2 camadas -> Frontend e Backend
Separação entre 2 conceitos importantes:
Frontend: Exibição dos conteúdos (Isso é chamado de Lógica de Apresentação)
Backend: Lógica de negócio (tudo o que é vital para funcionamento da minha aplicação) -> é ele quem acessa o banco de dados
Servidores multicamadas
Frontend e Backend
Backend foi quebrado em diversos SERVIÇOS, ou seja, diversos sisteminhas
Microserviços -> serviços de backend pequenos, cada um com sua responsabilidade
Quais tecnologias envolvidas nesse processo?
Frontend: HTML e CSS para estruturação/visualização. JavaScript para lógica de apresentação Backend: PHP, C#, Java, JavaScript, Python, C++, Kotlin (apenas 1 delas por serviço) Banco de Dados: SQL ou MySQL
Como a gente troca ideia com esses 2 caras?
Frontend -> Backend Visualização -> Processar informação (dados) -> Criar, alterar, remover, editar
Frontend -> Requisição HTTP -> Backend recebe a requisição -> Processa a informação -> Envia uma resposta (texto)
Esse texto precisar estar estruturado de uma maneira que o frontend entenda
Paulo;Salvatore;Professor
XML, JSON
Postman
URL -> http://localhost:3000 Endpoint ou Rota -> [GET] /mensagem Endpoint ou Rota -> [POST] /mensagem
Endpoint: [GET] /mensagem Descrição: Ler todas as mensagens
Endpoint: [POST] /mensagem Descrição: Criar uma mensagem
Endpoint: [GET] /mensagem/{id} Descrição: Ler mensagem específica pelo ID Exemplo: [GET] /mensagem/1
REST: GET, POST, PUT, DELETE, entre outros RESTful: aplicação segue as boas práticas de REST (Get para leitura, Post para criação, e nomenclaturas dos endpoints)