+ O que é arquitetura de software? Entenda o conceito e sua importância
O que é CRUD?
CRUD representa quatro operações fundamentais para trabalhar com dados:
- Create: criar ou cadastrar um novo registro;
- Read: consultar registros existentes;
- Update: atualizar informações armazenadas;
- Delete: excluir um registro.
Essas operações aparecem em diversos tipos de sistemas. Um cadastro de alunos, por exemplo, pode permitir adicionar um estudante, consultar seus dados, alterar informações e remover o cadastro.
Por isso, entender CRUD é uma etapa importante para quem está começando a desenvolver aplicações que utilizam bancos de dados.
+ Estude com a Trilha de Tecnologia para Engenheiro de Software na Allevo Tech
Como funciona um projeto CRUD?
Em uma aplicação web, o fluxo costuma envolver três componentes principais:
- Cliente: envia uma solicitação, como cadastrar ou consultar um dado.
- API: recebe a solicitação e executa a lógica necessária.
- Banco de dados: armazena ou fornece as informações solicitadas.
Um exemplo simples seria:
Aplicação → API Node.js → Banco de dados
Quando o usuário cadastra um produto, por exemplo, a aplicação envia os dados para a API. O servidor processa a solicitação e registra as informações no banco de dados.
+ O que é API REST: como funciona e por que desenvolvedores devem aprendê-la
O que você precisa para criar um CRUD?
Para acompanhar o projeto, é interessante ter conhecimentos básicos de:
- lógica de programação;
- JavaScript;
- HTTP;
- APIs;
- bancos de dados.
Neste exemplo, serão utilizados:
- Node.js para executar JavaScript no back-end;
- Express para criar a API;
- SQLite como banco de dados;
- Insomnia ou Postman para testar as requisições.
O SQLite é uma opção prática para um primeiro projeto porque não exige a configuração de um servidor de banco de dados separado.
Passo 1: criar o projeto Node.js
Primeiro, crie uma pasta para o projeto e abra o terminal dentro dela.
Depois, execute:
mkdir projeto-crud
cd projeto-crud
npm init -y
O comando npm init -y cria o arquivo package.json, utilizado para armazenar informações e dependências do projeto.
Passo 2: instalar as dependências
Agora, instale o Express e a biblioteca utilizada para trabalhar com SQLite:
npm install express sqlite3
Para facilitar o desenvolvimento, também é possível instalar o Nodemon:
npm install --save-dev nodemon
O Nodemon reinicia automaticamente o servidor quando um arquivo do projeto é alterado.
Passo 3: criar a estrutura do projeto
Uma estrutura simples pode ser organizada desta forma:
projeto-crud/
├── node_modules/
├── database.js
├── server.js
├── package.json
└── package-lock.json
O arquivo server.js ficará responsável pela API, enquanto database.js fará a configuração do banco de dados.
Passo 4: configurar o banco de dados
No arquivo database.js, configure uma conexão com o SQLite:
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('./database.sqlite');
db.run(`
CREATE TABLE IF NOT EXISTS produtos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
preco REAL NOT NULL
)
`);
module.exports = db;
Nesse exemplo, será criada uma tabela chamada produtos.
Cada produto terá três campos:
id: identificador único;
nome: nome do produto;
preco: preço do produto.
O id será gerado automaticamente pelo banco de dados.
Agora, crie o arquivo server.js:
const express = require('express');
const db = require('./database');
const app = express();
app.use(express.json());
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});
O express.json() permite que a aplicação receba dados enviados em formato JSON.
Para iniciar o servidor, execute:
node server.js
Se tudo estiver funcionando, o terminal deverá mostrar uma mensagem indicando que o servidor está rodando na porta 3000.
Passo 6: criar a operação Create
A primeira operação do CRUD é o Create, utilizada para cadastrar novos dados.
No server.js, adicione:
app.post('/produtos', (req, res) => {
const { nome, preco } = req.body;
const sql = `
INSERT INTO produtos (nome, preco)
VALUES (?, ?)
`;
db.run(sql, [nome, preco], function (err) {
if (err) {
return res.status(500).json({
erro: 'Erro ao cadastrar produto'
});
}
res.status(201).json({
id: this.lastID,
nome,
preco
});
});
});
Agora, uma requisição POST para /produtos pode cadastrar um novo produto.
O corpo da requisição pode ser:
{
"nome": "Notebook",
"preco": 3500
}
A API receberá esses dados e os armazenará no banco.
Passo 7: criar a operação Read
A operação Read permite consultar os dados existentes.
Para buscar todos os produtos, utilize:
app.get('/produtos', (req, res) => {
const sql = 'SELECT * FROM produtos';
db.all(sql, [], (err, rows) => {
if (err) {
return res.status(500).json({
erro: 'Erro ao buscar produtos'
});
}
res.json(rows);
});
});
Agora, uma requisição:
GET /produtos
pode retornar:
[
{
"id": 1,
"nome": "Notebook",
"preco": 3500
}
]
Também é possível criar uma rota para consultar um produto específico:
app.get('/produtos/:id', (req, res) => {
const { id } = req.params;
db.get(
'SELECT * FROM produtos WHERE id = ?',
[id],
(err, row) => {
if (err) {
return res.status(500).json({
erro: 'Erro ao buscar produto'
});
}
if (!row) {
return res.status(404).json({
erro: 'Produto não encontrado'
});
}
res.json(row);
}
);
});
Nesse caso, uma requisição para:
GET /produtos/1
buscará o produto cujo id seja igual a 1.