Node.js - API RESTful

Ciao, aspiranti programmatori! Oggi ci imbarcheremo in un viaggio emozionante nel mondo di Node.js e delle API RESTful. Non preoccupatevi se questi termini vi sembrano alieni in questo momento - alla fine di questo tutorial, parlerete fluentemente "REST"! ?

Node.js - RESTFul API

Cos'è l'architettura REST?

REST, o Representational State Transfer, è come un insieme di regole su come i computer dovrebbero parlare tra loro su internet. Immagina di essere in un ristorante. Tu (il client) chiedi al cameriere (l'API) il menu (i dati). Il cameriere non cucina il cibo lui stesso, ma va in cucina (il server) per prendere ciò di cui hai bisogno. Questo scambio è simile a come funziona REST!

Principi chiave di REST:

  1. Client-Server: Separazione delle preoccupazioni tra l'interfaccia utente e lo storage dei dati.
  2. Statoless: Ogni richiesta dal client al server deve contenere tutte le informazioni necessarie per comprendere la richiesta.
  3. Cacheabile: Le risposte devono definire se sono cacheabili o meno.
  4. Interfaccia uniforme: Un modo standardizzato per interagire con il server.
  5. Sistema stratificato: Il client non può distinguere se è connesso direttamente al server o a un intermediario.

Metodi HTTP

Ora, parliamo dei metodi HTTP. Questi sono come verbi che dicono al server quale azione eseguire. Ecco i principali:

Metodo Descrizione Esempio di utilizzo
GET Recuperare dati Recupera il profilo di un utente
POST Creare nuovi dati Aggiunge un nuovo post sul blog
PUT Aggiornare dati esistenti Modifica i dettagli di un utente
DELETE Rimuovere dati Elimina un tweet
PATCH Modificare parzialmente i dati Aggiorna solo l'email di un utente

Vediamo questi in azione con alcuni semplici esempi di codice Node.js!

Esempio di richiesta GET:

const http = require('http');

const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/api/users') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ users: ['Alice', 'Bob', 'Charlie'] }));
}
});

server.listen(3000, () => {
console.log('Server in esecuzione sulla porta 3000');
});

In questo esempio, stiamo creando un semplice server che risponde a una richiesta GET a '/api/users' con una lista JSON di utenti. Quando esegui questo codice e visiti 'http://localhost:3000/api/users' nel tuo browser, vedrai la lista degli utenti!

Esempio di richiesta POST:

const http = require('http');

const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/api/users') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const newUser = JSON.parse(body);
console.log('Nuovo utente aggiunto:', newUser);
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Utente creato con successo' }));
});
}
});

server.listen(3000, () => {
console.log('Server in esecuzione sulla porta 3000');
});

Questo esempio mostra come gestire una richiesta POST per aggiungere un nuovo utente. Ascolta i dati in arrivo, li elabora e invia una risposta confermando che l'utente è stato creato.

Web Services RESTful

Ora che abbiamo compreso le basi, immergiamoci nella creazione di una completa API RESTful utilizzando Express, un popolare framework Node.js che rende la costruzione di applicazioni web e API un gioco da ragazzi!

Prima, installiamo Express:

npm init -y
npm install express

Ora, creiamo una semplice API RESTful per una biblioteca di libri:

const express = require('express');
const app = express();
app.use(express.json());

let books = [
{ id: 1, title: 'Gatsby il Magnifico', author: 'F. Scott Fitzgerald' },
{ id: 2, title: 'Per uccidere un pipistrello', author: 'Harper Lee' }
];

// GET tutti i libri
app.get('/api/books', (req, res) => {
res.json(books);
});

// GET un libro specifico
app.get('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Libro non trovato');
res.json(book);
});

// POST un nuovo libro
app.post('/api/books', (req, res) => {
const book = {
id: books.length + 1,
title: req.body.title,
author: req.body.author
};
books.push(book);
res.status(201).json(book);
});

// PUT (aggiornamento) un libro
app.put('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Libro non trovato');

book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});

// DELETE un libro
app.delete('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Libro non trovato');

const index = books.indexOf(book);
books.splice(index, 1);
res.json(book);
});

app.listen(3000, () => console.log('Server in esecuzione sulla porta 3000'));

Questo esempio crea una completa API RESTful per gestire una biblioteca di libri. Ecco una panoramica:

  1. Usiamo app.get() per gestire le richieste GET, sia per tutti i libri che per libri specifici per ID.
  2. app.post() gestisce la creazione di nuovi libri.
  3. app.put() ci permette di aggiornare libri esistenti.
  4. app.delete() ci permette di rimuovere libri dalla nostra biblioteca.

Ogni rotta segue i principi RESTful, utilizzando i metodi HTTP appropriati e i codici di stato.

Testare la tua API

Per testare la tua API, puoi utilizzare strumenti come Postman o curl. Ecco un esempio utilizzando curl:

# GET tutti i libri
curl http://localhost:3000/api/books

# POST un nuovo libro
curl -X POST -H "Content-Type: application/json" -d '{"title":"1984","author":"George Orwell"}' http://localhost:3000/api/books

# PUT (aggiornamento) un libro
curl -X PUT -H "Content-Type: application/json" -d '{"title":"Titolo Aggiornato","author":"Autore Aggiornato"}' http://localhost:3000/api/books/1

# DELETE un libro
curl -X DELETE http://localhost:3000/api/books/1

Ecco fatto! Hai appena creato la tua prima API RESTful utilizzando Node.js e Express. Ricorda, la pratica fa perfezione. Prova ad aggiungere più funzionalità alla tua API della biblioteca di libri, come la ricerca di libri o l'ordinamento per diversi criteri.

Costruire API è come costruire un ponte tra diverse applicazioni software. Con ogni API che crei, stai aprendo nuove possibilità su come i programmi possono interagire e scambiare dati. Continua a esplorare, a programmare e, soprattutto, divertiti nel tuo viaggio per diventare un esperto di Node.js!

Credits: Image by storyset