En aquest tema, aprendrem a construir APIs RESTful utilitzant Node.js. Les APIs RESTful són una manera estàndard de crear serveis web que permeten la comunicació entre diferents aplicacions. Aquest mòdul cobrirà els conceptes bàsics de REST, com configurar un servidor Express per a una API RESTful, i com implementar operacions CRUD (Crear, Llegir, Actualitzar, Eliminar).

Objectius del Tema

  • Entendre els principis bàsics de REST.
  • Configurar un servidor Express per a una API RESTful.
  • Implementar operacions CRUD.
  • Gestionar errors i respostes HTTP.

  1. Principis Bàsics de REST

Què és REST?

REST (Representational State Transfer) és un estil d'arquitectura per a dissenyar serveis web. Els serveis RESTful utilitzen els mètodes HTTP estàndard (GET, POST, PUT, DELETE) per a realitzar operacions sobre recursos.

Principis Clau de REST

  • Client-Servidor: Separació de les preocupacions entre el client i el servidor.
  • Sense Estat: Cada petició del client al servidor ha de contenir tota la informació necessària per entendre i processar la petició.
  • Caché: Les respostes han de ser marcades com a cachéables o no cachéables.
  • Interfície Uniforme: Utilització d'una interfície uniforme per a la interacció entre el client i el servidor.
  • Sistema en Capes: L'arquitectura pot estar composta per capes que poden ser gestionades de manera independent.

  1. Configurar un Servidor Express per a una API RESTful

Instal·lació d'Express

Primer, necessitem instal·lar Express. Si no ho has fet ja, pots instal·lar-lo utilitzant npm:

npm install express

Crear un Servidor Bàsic

Creem un fitxer server.js i configurem un servidor bàsic:

const express = require('express');
const app = express();
const port = 3000;

app.use(express.json());

app.get('/', (req, res) => {
  res.send('Benvingut a la nostra API RESTful!');
});

app.listen(port, () => {
  console.log(`Servidor escoltant a http://localhost:${port}`);
});

Explicació del Codi

  • express.json(): Middleware per a parsejar les peticions JSON.
  • app.get('/'): Defineix una ruta GET per a la ruta arrel.
  • app.listen(port): Inicia el servidor a l'escolta del port especificat.

  1. Implementar Operacions CRUD

Crear un Model de Dades

Per a aquest exemple, utilitzarem una llista d'usuaris emmagatzemada en memòria:

let users = [
  { id: 1, name: 'John Doe', email: '[email protected]' },
  { id: 2, name: 'Jane Doe', email: '[email protected]' }
];

Operació GET (Llegir)

Afegim una ruta per obtenir tots els usuaris:

app.get('/users', (req, res) => {
  res.json(users);
});

Operació POST (Crear)

Afegim una ruta per crear un nou usuari:

app.post('/users', (req, res) => {
  const newUser = {
    id: users.length + 1,
    name: req.body.name,
    email: req.body.email
  };
  users.push(newUser);
  res.status(201).json(newUser);
});

Operació PUT (Actualitzar)

Afegim una ruta per actualitzar un usuari existent:

app.put('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id);
  const user = users.find(u => u.id === userId);
  if (user) {
    user.name = req.body.name;
    user.email = req.body.email;
    res.json(user);
  } else {
    res.status(404).send('Usuari no trobat');
  }
});

Operació DELETE (Eliminar)

Afegim una ruta per eliminar un usuari:

app.delete('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id);
  users = users.filter(u => u.id !== userId);
  res.status(204).send();
});

  1. Gestionar Errors i Respostes HTTP

Gestionar Errors

És important gestionar errors i retornar respostes HTTP adequades. Per exemple, si un usuari no es troba, retornem un error 404:

app.put('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id);
  const user = users.find(u => u.id === userId);
  if (user) {
    user.name = req.body.name;
    user.email = req.body.email;
    res.json(user);
  } else {
    res.status(404).send('Usuari no trobat');
  }
});

Respostes HTTP

Utilitzem els codis d'estat HTTP adequats per a cada operació:

  • 200 OK: Operació exitosa.
  • 201 Created: Nou recurs creat.
  • 204 No Content: Operació exitosa, però sense contingut a retornar.
  • 404 Not Found: Recurs no trobat.

Exercici Pràctic

Objectiu

Implementar una API RESTful per a gestionar una llista de tasques.

Requisits

  • Cada tasca ha de tenir un id, title, i completed.
  • Implementar operacions CRUD per a les tasques.

Solució

const express = require('express');
const app = express();
const port = 3000;

app.use(express.json());

let tasks = [
  { id: 1, title: 'Aprendre Node.js', completed: false },
  { id: 2, title: 'Construir una API RESTful', completed: false }
];

app.get('/tasks', (req, res) => {
  res.json(tasks);
});

app.post('/tasks', (req, res) => {
  const newTask = {
    id: tasks.length + 1,
    title: req.body.title,
    completed: req.body.completed
  };
  tasks.push(newTask);
  res.status(201).json(newTask);
});

app.put('/tasks/:id', (req, res) => {
  const taskId = parseInt(req.params.id);
  const task = tasks.find(t => t.id === taskId);
  if (task) {
    task.title = req.body.title;
    task.completed = req.body.completed;
    res.json(task);
  } else {
    res.status(404).send('Tasques no trobades');
  }
});

app.delete('/tasks/:id', (req, res) => {
  const taskId = parseInt(req.params.id);
  tasks = tasks.filter(t => t.id !== taskId);
  res.status(204).send();
});

app.listen(port, () => {
  console.log(`Servidor escoltant a http://localhost:${port}`);
});

Conclusió

En aquest tema, hem après a construir una API RESTful utilitzant Node.js i Express. Hem cobert els principis bàsics de REST, com configurar un servidor Express, i com implementar operacions CRUD. També hem vist com gestionar errors i respostes HTTP adequades. Amb aquests coneixements, estàs preparat per construir APIs RESTful robustes i escalables.

Curs de Node.js

Mòdul 1: Introducció a Node.js

Mòdul 2: Conceptes Bàsics

Mòdul 3: Sistema de Fitxers i I/O

Mòdul 4: HTTP i Servidors Web

Mòdul 5: NPM i Gestió de Paquets

Mòdul 6: Framework Express.js

Mòdul 7: Bases de Dades i ORMs

Mòdul 8: Autenticació i Autorització

Mòdul 9: Proves i Depuració

Mòdul 10: Temes Avançats

Mòdul 11: Desplegament i DevOps

Mòdul 12: Projectes del Món Real

© Copyright 2024. Tots els drets reservats