Este tutorial o guiará na construção de uma API RESTful usando Node.js, Express.js e MongoDB. Abordaremos a configuração do seu ambiente, a definição de endpoints da API e o tratamento da persistência de dados. Ao final, você terá uma API funcional pronta para expansão.
Sumário
- Introdução às APIs REST e MongoDB
- Configurando seu Ambiente de Desenvolvimento
- Configuração do Projeto e Dependências
- Conectando ao MongoDB
- Definindo Endpoints da API (Operações CRUD)
- Testando sua API
- Implementando Tratamento Robusto de Erros
- Conclusão e Próximos Passos
Introdução às APIs REST e MongoDB
REST (Representational State Transfer) é um estilo arquitetural para construir serviços web escaláveis e sustentáveis. As APIs REST usam métodos HTTP padrão (GET, POST, PUT, DELETE) para interagir com recursos identificados por URLs. O MongoDB é um banco de dados NoSQL, orientado a documentos, que oferece flexibilidade para armazenar e recuperar dados. Essa combinação cria uma base poderosa para muitas aplicações.
Configurando seu Ambiente de Desenvolvimento
Antes de começarmos, certifique-se de ter o Node.js e o npm (Node Package Manager) instalados. Você pode baixá-los em nodejs.org. Também, certifique-se de que o MongoDB esteja instalado e em execução. Você pode baixá-lo em mongodb.com.
Configuração do Projeto e Dependências
Crie um novo diretório de projeto e navegue até ele em seu terminal. Inicialize um novo projeto Node.js:
npm init -y
Instale as dependências necessárias:
npm install express mongoose body-parser
express
: Uma estrutura de aplicação web Node.js mínima e flexível.mongoose
: Uma biblioteca de Modelagem de Dados de Objeto (ODM) para MongoDB e Node.js.body-parser
: Middleware para analisar corpos de requisições JSON.
Conectando ao MongoDB
Crie um arquivo chamado server.js
e adicione o seguinte código:
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// String de conexão MongoDB - substitua pelos seus detalhes de conexão
const mongoURI = 'mongodb://localhost:27017/mydatabase';
mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('Conectado ao MongoDB'))
.catch(err => console.error('Erro ao conectar ao MongoDB:', err));
app.use(bodyParser.json());
app.listen(port, () => console.log(`Servidor escutando na porta ${port}`));
Definindo Endpoints da API (Operações CRUD)
Vamos criar um modelo simples e endpoints para gerenciar itens. Adicione isso ao seu arquivo server.js
:
const ItemSchema = new mongoose.Schema({
name: String,
description: String
});
const Item = mongoose.model('Item', ItemSchema);
// POST /items - Criar um novo item
app.post('/items', async (req, res) => {
try {
const newItem = new Item(req.body);
const savedItem = await newItem.save();
res.status(201).json(savedItem);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /items - Obter todos os itens
app.get('/items', async (req, res) => {
try {
const items = await Item.find({});
res.json(items);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /items/:id - Obter um único item por ID
app.get('/items/:id', async (req, res) => {
try {
const item = await Item.findById(req.params.id);
if (!item) return res.status(404).json({ message: 'Item não encontrado' });
res.json(item);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// PUT /items/:id - Atualizar um item
app.put('/items/:id', async (req, res) => {
try {
const updatedItem = await Item.findByIdAndUpdate(req.params.id, req.body, { new: true });
if (!updatedItem) return res.status(404).json({ message: 'Item não encontrado' });
res.json(updatedItem);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// DELETE /items/:id - Deletar um item
app.delete('/items/:id', async (req, res) => {
try {
const deletedItem = await Item.findByIdAndDelete(req.params.id);
if (!deletedItem) return res.status(404).json({ message: 'Item não encontrado' });
res.json({ message: 'Item deletado' });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Testando sua API
Use ferramentas como Postman ou curl para testar seus endpoints da API. Envie solicitações POST para /items
para criar novos itens, solicitações GET para /items
para recuperar todos os itens e use solicitações GET, PUT e DELETE para itens individuais usando seus IDs.
Implementando Tratamento Robusto de Erros
O código de exemplo inclui tratamento básico de erros. Para produção, implemente um tratamento de erros, registro e validação de entrada mais abrangentes.
Conclusão e Próximos Passos
Você construiu com sucesso uma API REST básica com MongoDB! Expanda isso adicionando autenticação, autorização, validação de dados e tratamento de erros mais sofisticado. Considere usar uma conexão de banco de dados pronta para produção e explore recursos mais avançados do Express.js e do Mongoose.