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/users
amb 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/:id
amb 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