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

  1. 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.

mkdir rest-api-mongodb
cd rest-api-mongodb
npm init -y

1.2. Instal·lar les Dependències Necessàries

Instal·la Express, Mongoose (per interactuar amb MongoDB), i altres dependències necessàries.

npm install express mongoose body-parser

  1. 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}`);
});

  1. 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);

  1. 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}`);
});

  1. 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.

© Copyright 2024. Tots els drets reservats