En aquest tema, aprendrem a construir una API REST utilitzant MongoDB com a base de dades. Aquest procés inclou la configuració del servidor, la creació de rutes per a les operacions CRUD, i la integració amb MongoDB per gestionar les dades.
Objectius
- Configurar un servidor Node.js amb Express.
- Crear rutes per a les operacions CRUD.
- Integrar MongoDB amb l'API REST.
- Provar l'API amb eines com Postman.
Requisits Prèvis
- Coneixements bàsics de JavaScript i Node.js.
- Familiaritat amb MongoDB i les operacions CRUD.
- Instal·lació de Node.js i MongoDB.
Passos per Construir l'API REST
- Configuració del Projecte
1.1. Crear un Nou Projecte Node.js
Obre el terminal i crea una nova carpeta per al projecte. Després, inicialitza un nou projecte Node.js.
1.2. Instal·lar les Dependències Necessàries
Instal·la Express, Mongoose (per interactuar amb MongoDB), i altres dependències necessàries.
- Configuració del Servidor
2.1. Crear el Fitxer server.js
Crea un fitxer anomenat server.js a la carpeta del projecte i afegeix el següent codi per configurar el servidor.
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// Middleware
app.use(bodyParser.json());
// Connexió a MongoDB
mongoose.connect('mongodb://localhost:27017/restapi', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
console.log('Connexió a MongoDB establerta');
}).catch(err => {
console.error('Error connectant a MongoDB', err);
});
// Ruta de prova
app.get('/', (req, res) => {
res.send('API REST amb MongoDB');
});
app.listen(port, () => {
console.log(`Servidor escoltant a http://localhost:${port}`);
});
- Creació del Model de Dades
3.1. Definir un Model de Mongoose
Crea una carpeta anomenada models i dins d'ella, crea un fitxer user.js per definir el model de dades.
// models/user.js
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true,
unique: true
},
age: {
type: Number,
required: true
}
});
module.exports = mongoose.model('User', userSchema);
- Creació de les Rutes CRUD
4.1. Crear el Fitxer de Rutes
Crea una carpeta anomenada routes i dins d'ella, crea un fitxer userRoutes.js per definir les rutes CRUD.
// routes/userRoutes.js
const express = require('express');
const router = express.Router();
const User = require('../models/user');
// Crear un nou usuari
router.post('/users', async (req, res) => {
try {
const user = new User(req.body);
await user.save();
res.status(201).send(user);
} catch (error) {
res.status(400).send(error);
}
});
// Llegir tots els usuaris
router.get('/users', async (req, res) => {
try {
const users = await User.find();
res.status(200).send(users);
} catch (error) {
res.status(500).send(error);
}
});
// Llegir un usuari per ID
router.get('/users/:id', async (req, res) => {
try {
const user = await User.findById(req.params.id);
if (!user) {
return res.status(404).send();
}
res.status(200).send(user);
} catch (error) {
res.status(500).send(error);
}
});
// Actualitzar un usuari per ID
router.patch('/users/:id', async (req, res) => {
try {
const user = await User.findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true });
if (!user) {
return res.status(404).send();
}
res.status(200).send(user);
} catch (error) {
res.status(400).send(error);
}
});
// Eliminar un usuari per ID
router.delete('/users/:id', async (req, res) => {
try {
const user = await User.findByIdAndDelete(req.params.id);
if (!user) {
return res.status(404).send();
}
res.status(200).send(user);
} catch (error) {
res.status(500).send(error);
}
});
module.exports = router;4.2. Integrar les Rutes al Servidor
Modifica el fitxer server.js per utilitzar les rutes que acabem de crear.
// server.js
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const userRoutes = require('./routes/userRoutes');
const app = express();
const port = 3000;
// Middleware
app.use(bodyParser.json());
// Connexió a MongoDB
mongoose.connect('mongodb://localhost:27017/restapi', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
console.log('Connexió a MongoDB establerta');
}).catch(err => {
console.error('Error connectant a MongoDB', err);
});
// Utilitzar les rutes
app.use('/api', userRoutes);
app.listen(port, () => {
console.log(`Servidor escoltant a http://localhost:${port}`);
});
- Provar l'API
5.1. Utilitzar Postman per Provar les Rutes
- Crear un nou usuari: Envia una petició POST a
http://localhost:3000/api/usersamb el cos de la petició en format JSON. - Llegir tots els usuaris: Envia una petició GET a
http://localhost:3000/api/users. - Llegir un usuari per ID: Envia una petició GET a
http://localhost:3000/api/users/:id. - Actualitzar un usuari per ID: Envia una petició PATCH a
http://localhost:3000/api/users/:idamb el cos de la petició en format JSON. - Eliminar un usuari per ID: Envia una petició DELETE a
http://localhost:3000/api/users/:id.
Resum
En aquest tema, hem après a construir una API REST utilitzant Node.js, Express i MongoDB. Hem configurat el servidor, creat un model de dades, definit rutes per a les operacions CRUD, i provat l'API amb Postman. Aquest coneixement és fonamental per desenvolupar aplicacions web modernes que necessiten gestionar dades de manera eficient.
Curs de MongoDB
Mòdul 1: Introducció a MongoDB
Mòdul 2: Operacions CRUD a MongoDB
Mòdul 3: Modelatge de Dades a MongoDB
Mòdul 4: Indexació i Agregació
Mòdul 5: Funcions Avançades de MongoDB
Mòdul 6: Rendiment i Seguretat
- Optimització del Rendiment
- Còpia de Seguretat i Restauració
- Millors Pràctiques de Seguretat
- Monitorització i Alertes
