En aquest tema, aprendrem a crear un servidor bàsic per a una API RESTful utilitzant Node.js i Express, un dels frameworks més populars per al desenvolupament d'APIs en JavaScript. Aquest servidor serà capaç de gestionar peticions HTTP bàsiques i respondre amb dades en format JSON.
Objectius
- Configurar un projecte Node.js.
- Instal·lar i configurar Express.
- Crear rutes bàsiques per a l'API.
- Gestionar peticions GET i POST.
- Configuració del projecte Node.js
Pas 1: Instal·lació de Node.js
Si encara no tens Node.js instal·lat, pots descarregar-lo i instal·lar-lo des del lloc web oficial. Assegura't de tenir també npm
(Node Package Manager), que s'instal·la automàticament amb Node.js.
Pas 2: Inicialitzar el projecte
Crea una nova carpeta per al teu projecte i inicialitza un nou projecte Node.js utilitzant npm
.
Aquestes comandes crearan una nova carpeta anomenada api-server
i inicialitzaran un nou projecte Node.js amb un fitxer package.json
per gestionar les dependències del projecte.
Pas 3: Instal·lació d'Express
Instal·la Express utilitzant npm
.
- Creació del servidor bàsic amb Express
Pas 1: Crear el fitxer principal
Crea un fitxer anomenat index.js
a la carpeta del projecte. Aquest fitxer serà el punt d'entrada del nostre servidor.
Pas 2: Configurar el servidor
Obre index.js
i afegeix el següent codi per configurar un servidor bàsic amb Express.
const express = require('express'); const app = express(); const port = 3000; // Middleware per parsejar JSON app.use(express.json()); // Ruta bàsica app.get('/', (req, res) => { res.send('Hola, món!'); }); // Iniciar el servidor app.listen(port, () => { console.log(`Servidor escoltant a http://localhost:${port}`); });
Explicació del codi
const express = require('express');
: Importa el mòdul Express.const app = express();
: Crea una instància de l'aplicació Express.const port = 3000;
: Defineix el port en el qual el servidor escoltarà les peticions.app.use(express.json());
: Afegeix un middleware per parsejar les peticions amb cos en format JSON.app.get('/', (req, res) => { res.send('Hola, món!'); });
: Defineix una ruta GET bàsica que respon amb "Hola, món!".app.listen(port, () => { console.log(
Servidor escoltant a http://localhost:${port}); });
: Inicia el servidor i fa que escolti al port 3000.
Pas 3: Executar el servidor
Executa el servidor utilitzant node
.
Si tot ha anat bé, hauràs de veure el missatge Servidor escoltant a http://localhost:3000
a la consola. Ara pots obrir el navegador i anar a http://localhost:3000
per veure la resposta "Hola, món!".
- Gestió de peticions GET i POST
Ruta GET
Afegeix una nova ruta GET que retorni una llista d'elements en format JSON.
app.get('/items', (req, res) => { const items = [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, { id: 3, name: 'Item 3' } ]; res.json(items); });
Ruta POST
Afegeix una nova ruta POST que permeti afegir un nou element a la llista.
app.post('/items', (req, res) => { const newItem = req.body; newItem.id = Date.now(); // Assignar un ID únic res.status(201).json(newItem); });
Explicació del codi
app.get('/items', (req, res) => { ... });
: Defineix una ruta GET que retorna una llista d'elements en format JSON.app.post('/items', (req, res) => { ... });
: Defineix una ruta POST que rep un nou element en el cos de la petició i el retorna amb un ID únic assignat.
Exercici Pràctic
Objectiu
Crear una API bàsica que gestioni una llista de tasques (to-do list) amb operacions CRUD (Create, Read, Update, Delete).
Instruccions
- Crea una nova ruta GET
/tasks
que retorni una llista de tasques. - Crea una nova ruta POST
/tasks
que permeti afegir una nova tasca. - Crea una nova ruta PUT
/tasks/:id
que permeti actualitzar una tasca existent. - Crea una nova ruta DELETE
/tasks/:id
que permeti eliminar una tasca existent.
Solució
const express = require('express'); const app = express(); const port = 3000; app.use(express.json()); let tasks = [ { id: 1, title: 'Tascar 1', completed: false }, { id: 2, title: 'Tascar 2', completed: true } ]; app.get('/tasks', (req, res) => { res.json(tasks); }); app.post('/tasks', (req, res) => { const newTask = req.body; newTask.id = Date.now(); tasks.push(newTask); res.status(201).json(newTask); }); app.put('/tasks/:id', (req, res) => { const taskId = parseInt(req.params.id); const updatedTask = req.body; tasks = tasks.map(task => (task.id === taskId ? { ...task, ...updatedTask } : task)); res.json(updatedTask); }); app.delete('/tasks/:id', (req, res) => { const taskId = parseInt(req.params.id); tasks = tasks.filter(task => task.id !== taskId); res.status(204).send(); }); app.listen(port, () => { console.log(`Servidor escoltant a http://localhost:${port}`); });
Explicació del codi
let tasks = [ ... ];
: Defineix una llista de tasques inicials.app.get('/tasks', (req, res) => { ... });
: Retorna la llista de tasques.app.post('/tasks', (req, res) => { ... });
: Afegeix una nova tasca a la llista.app.put('/tasks/:id', (req, res) => { ... });
: Actualitza una tasca existent.app.delete('/tasks/:id', (req, res) => { ... });
: Elimina una tasca existent.
Conclusió
En aquesta secció, hem après a configurar un projecte Node.js, instal·lar i configurar Express, i crear un servidor bàsic capaç de gestionar peticions GET i POST. També hem vist com implementar operacions CRUD bàsiques per a una llista de tasques. Aquestes habilitats són fonamentals per al desenvolupament d'APIs RESTful més complexes. En el següent tema, explorarem com gestionar peticions i respostes de manera més avançada.
Curs de REST API: Principis de Disseny i Desenvolupament d'APIs RESTful
Mòdul 1: Introducció a les APIs RESTful
Mòdul 2: Disseny d'APIs RESTful
- Principis de disseny d'APIs RESTful
- Recursos i URIs
- Mètodes HTTP
- Codis d'estat HTTP
- Versionat d'APIs
- Documentació d'APIs
Mòdul 3: Desenvolupament d'APIs RESTful
- Configuració de l'entorn de desenvolupament
- Creació d'un servidor bàsic
- Gestió de peticions i respostes
- Autenticació i autorització
- Gestió d'errors
- Proves i validació
Mòdul 4: Bones Pràctiques i Seguretat
- Bones pràctiques en el disseny d'APIs
- Seguretat en APIs RESTful
- Rate limiting i throttling
- CORS i polítiques de seguretat
Mòdul 5: Eines i Frameworks
- Postman per a proves d'APIs
- Swagger per a documentació
- Frameworks populars per a APIs RESTful
- Integració contínua i desplegament