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"! ?
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:
- Client-Server: Separazione delle preoccupazioni tra l'interfaccia utente e lo storage dei dati.
- Statoless: Ogni richiesta dal client al server deve contenere tutte le informazioni necessarie per comprendere la richiesta.
- Cacheabile: Le risposte devono definire se sono cacheabili o meno.
- Interfaccia uniforme: Un modo standardizzato per interagire con il server.
- 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:
- Usiamo
app.get()
per gestire le richieste GET, sia per tutti i libri che per libri specifici per ID. -
app.post()
gestisce la creazione di nuovi libri. -
app.put()
ci permette di aggiornare libri esistenti. -
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