← Torna agli articoli
API e integrazione

REST API: più di una parola d'ordine. È il linguaggio che parlano le tue applicazioni.

Una guida per principianti alla REST API: cos'è, perché è importante, i 6 principi fondamentali e un esempio pratico completo con richieste e risposte HTTP reali.

REST API: più di una parola d'ordine. È il linguaggio che parlano le tue applicazioni.
Articolo in evidenza ↗

REST API: più di una parola d'ordine. È il linguaggio che parlano le tue applicazioni.

Spesso senti sviluppatori o vedi negli annunci di lavoro frasi come "integrazione tramite REST API" o "scrittura di servizi RESTful". Ma cosa significa realmente questo termine? Se non sei uno specialista tecnico o stai appena iniziando il tuo percorso nell'IT, potrebbe sembrare una magia complessa.

In realtà, REST API è un concetto fondamentale che permette a programmi diversi di comunicare tra loro tramite Internet. Analizziamo cos'è, perché è necessario e su quali regole si basa.

Cos'è una REST API? Una semplice analogia

Immagina un ristorante.

  • Tu (il client) sei un'applicazione (ad esempio, il frontend del tuo sito web o un'app mobile).
  • La cucina è un'altra applicazione (il tuo server o un servizio di terze parti) dove sono archiviati dati e logica.
  • Il cameriere è la REST API.

Non entri in cucina per fare un ordine o verificare se un piatto è disponibile. Parli con il cameriere. Il cameriere prende il tuo ordine (la richiesta), lo porta in cucina e poi ti porta il piatto preparato (la risposta).

REST API (Representational State Transfer Application Programming Interface) è un insieme di regole e convenzioni che consentono a un'applicazione di richiedere dati o azioni a un'altra applicazione tramite Internet. La parola chiave qui è "State Transfer" (trasferimento di stato). In sostanza, il client richiede al server una "rappresentazione" (ad esempio, in formato JSON) di una risorsa (un utente, un prodotto, un ordine).

Perché è necessario? 3 ragioni chiave

  1. Separazione delle responsabilità. Il frontend (ciò che l'utente vede) e il backend (logica e database) possono essere sviluppati e scalati in modo indipendente. Puoi creare un'app per iOS, Android e un sito web, e tutti comunicheranno con lo stesso backend tramite la stessa API.
  2. Integrazione con servizi esterni. Vuoi aggiungere pagamenti tramite Stripe, inviare notifiche tramite Telegram o ottenere dati meteo? Non costruisci il tuo sistema di pagamento o la tua stazione meteorologica; usi un'API pronta all'uso di un servizio di terze parti.
  3. Universalità. REST si basa sugli standard HTTP, compresi da tutti i dispositivi e linguaggi di programmazione. Questo lo rende la "lingua franca" ideale per il web.

6 principi di una RESTful API (Le regole per il nostro "cameriere")

Perché un'API sia considerata RESTful, deve seguire diversi principi chiave:

  1. Interfaccia uniforme. Questo è il principio più importante. Tutte le richieste API devono essere standardizzate.
  2. Assenza di stato. Ogni richiesta dal client al server deve contenere tutte le informazioni necessarie per comprendere ed elaborare la richiesta. Il server non deve ricordare nulla delle richieste precedenti dello stesso client. Le sessioni e l'autorizzazione sono spesso implementate utilizzando token (ad esempio, JWT) che vengono inviati con ogni richiesta.
  3. Cacheabilità. Le risposte del server devono indicare esplicitamente se possono essere memorizzate nella cache e per quanto tempo. Ciò migliora drasticamente le prestazioni riducendo il carico sul server.
  4. Architettura client-server. Una chiara separazione delle responsabilità: il client è responsabile dell'interfaccia utente, il server è responsabile dell'archiviazione dei dati e della logica di business. Ciò consente loro di evolversi in modo indipendente.
  5. Sistema a livelli. Possono esserci più livelli tra il client e il server (bilanciatori di carico, proxy, gateway). Il client normalmente non può dire se è connesso direttamente al server finale o a un intermediario.
  6. Code on Demand (Opzionale). Il server può estendere o personalizzare temporaneamente la funzionalità di un client trasferendo codice eseguibile (ad esempio, JavaScript). Questo principio è usato meno frequentemente.

Un esempio concreto: gestire una lista di libri

Supponiamo di avere un'API per una biblioteca. La nostra risorsa è Book.

  • Ottenere la lista di tutti i libri:
  • Ottenere il libro con ID=1:
  • Creare un nuovo libro:
  • Aggiornare il libro con ID=2:
  • Eliminare il libro con ID=1:

Nota come il metodo HTTP e l'URL insieme definiscono cosa vogliamo fare, mentre il corpo della richiesta (per POST/PUT) contiene i dettagli.

Esempio:

1. GET /articles — Ottenere la collezione di articoli

Utilizzato per recuperare un elenco di tutti gli articoli con supporto alla paginazione.

Richiesta:

GET /v1/articles?page=1&limit=10 Host: api.myblog.com Accept: application/json

Risposta:

  • Codice di stato: 200 OK
  • Corpo: Restituisce un array di articoli e metadati di paginazione. Questo segue il principio HATEOAS.
{ "data": [ { "id": "a1b2c3", "title": "What is RESTful API", "summary": "Simple explanation for everyone", "author": "John Doe", "createdAt": "2023-10-25T10:30:00Z", "_links": { "self": { "href": "/v1/articles/a1b2c3" }, "author": { "href": "/v1/users/john-doe" } } }, { "id": "d4e5f6", "title": "Introduction to Docker", "summary": "Containerization for beginners", "author": "Jane Smith", "createdAt": "2023-10-24T15:45:00Z", "_links": { "self": { "href": "/v1/articles/d4e5f6" }, "author": { "href": "/v1/users/jane-smith" } } } ], "_meta": { "page": 1, "limit": 10, "totalPages": 5, "totalCount": 48 }, "_links": { "self": { "href": "/v1/articles?page=1&limit=10" }, "next": { "href": "/v1/articles?page=2&limit=10" }, "last": { "href": "/v1/articles?page=5&limit=10" } } }

2. GET /articles/{id} — Ottenere un singolo articolo

Utilizzato per recuperare informazioni complete su un articolo specifico.

Richiesta:

GET /v1/articles/a1b2c3 Host: api.myblog.com Accept: application/json

Risposta:

  • Codice di stato: 200 OK
  • Corpo: Restituisce la rappresentazione completa della risorsa.
{ "data": { "id": "a1b2c3", "title": "What is RESTful API", "content": "Full article text... REST API is not just a buzzword...", "summary": "Simple explanation for everyone", "author": "John Doe", "status": "published", "tags": ["api", "rest", "programming"], "createdAt": "2023-10-25T10:30:00Z", "updatedAt": "2023-10-26T09:15:00Z", "_links": { "self": { "href": "/v1/articles/a1b2c3" }, "author": { "href": "/v1/users/john-doe" }, "comments": { "href": "/v1/articles/a1b2c3/comments" } } } }

3. POST /articles — Creare un nuovo articolo

Utilizzato per creare una nuova risorsa. Il server genera un nuovo ID.

Richiesta:

  • Importante: Il client non invia id, createdAt, ecc. Il server gestisce questi campi.
POST /v1/articles Host: api.myblog.com Content-Type: application/json X-API-Key: your-secret-api-key-12345 { "title": "New Article About Microservices", "content": "Text of the new article...", "summary": "Brief description of microservice architecture", "tags": ["microservices", "architecture"], "status": "draft" }

Risposta:

  • Codice di stato: 201 Created
  • Header Location: Punta all'URL della risorsa creata.
  • Corpo: Restituisce la risorsa creata.
HTTP/1.1 201 Created Location: /v1/articles/g7h8i9 Content-Type: application/json { "data": { "id": "g7h8i9", "title": "New Article About Microservices", "content": "Text of the new article...", "summary": "Brief description of microservice architecture", "author": "CurrentAuthenticatedUser", "status": "draft", "tags": ["microservices", "architecture"], "createdAt": "2023-10-27T14:20:00Z", "updatedAt": "2023-10-27T14:20:00Z", "_links": { "self": { "href": "/v1/articles/g7h8i9" }, "author": { "href": "/v1/users/currentauthenticateduser" } } } }

4. PUT /articles/{id} — Aggiornamento completo dell'articolo

Utilizzato per la sostituzione completa della risorsa. Il client deve inviare tutti i campi.

Richiesta:

PUT /v1/articles/g7h8i9 Host: api.myblog.com Content-Type: application/json X-API-Key: your-secret-api-key-12345 { "title": "Updated Title About Microservices", "content": "Completely updated article text...", "summary": "New brief description", "tags": ["microservices", "cloud", "docker"], "status": "published" }

Risposta:

  • Codice di stato: 200 OK
  • Corpo: Restituisce la rappresentazione completa della risorsa aggiornata.
{ "data": { "id": "g7h8i9", "title": "Updated Title About Microservices", "content": "Completely updated article text...", "summary": "New brief description", "author": "CurrentAuthenticatedUser", "status": "published", "tags": ["microservices", "cloud", "docker"], "createdAt": "2023-10-27T14:20:00Z", "updatedAt": "2023-10-27T16:45:00Z", "_links": { "self": { "href": "/v1/articles/g7h8i9" }, "author": { "href": "/v1/users/currentauthenticateduser" } } } }

5. PATCH /articles/{id} — Aggiornamento parziale dell'articolo

Utilizzato per aggiornare solo campi specifici. Più efficiente di PUT.

Richiesta:

PATCH /v1/articles/g7h8i9 Host: api.myblog.com Content-Type: application/json X-API-Key: your-secret-api-key-12345 { "status": "published", "tags": ["microservices", "cloud-native", "kubernetes"] }

Risposta:

  • Codice di stato: 200 OK
  • Corpo: Restituisce la rappresentazione aggiornata della risorsa.
{ "data": { "id": "g7h8i9", "title": "Updated Title About Microservices", "content": "Completely updated article text...", "summary": "New brief description", "author": "CurrentAuthenticatedUser", "status": "published", "tags": ["microservices", "cloud-native", "kubernetes"], "createdAt": "2023-10-27T14:20:00Z", "updatedAt": "2023-10-27T17:50:00Z", "_links": { "self": { "href": "/v1/articles/g7h8i9" }, "author": { "href": "/v1/users/currentauthenticateduser" } } } }

6. DELETE /articles/{id} — Eliminare un articolo

Utilizzato per eliminare una risorsa.

Richiesta:

DELETE /v1/articles/g7h8i9 Host: api.myblog.com X-API-Key: your-secret-api-key-12345

Risposta:

  • Codice di stato: 204 No Content
  • Corpo: Nessuno.
HTTP/1.1 204 No Content

Gestione degli errori (secondo i principi REST)

Una RESTful API dovrebbe sempre restituire codici di stato HTTP e messaggi di errore significativi.

Esempio: GET /articles/invalid-id-999

Risposta:

  • Codice di stato: 404 Not Found
  • Corpo:
{ "error": { "code": "RESOURCE_NOT_FOUND", "message": "Article with identifier 'invalid-id-999' was not found.", "details": "Please check the identifier and try again." } }

Esempio: POST /articles con dati non validi

Richiesta:

{ "title": "" }

Risposta:

  • Codice di stato: 422 Unprocessable Entity (o 400 Bad Request)
  • Corpo:
{ "error": { "code": "VALIDATION_ERROR", "message": "Request data failed validation.", "details": [ { "field": "title", "error": "Field 'title' cannot be empty." } ] } }

Riepilogo della conformità ai principi REST:

  1. Interfaccia uniforme: Tutti gli endpoint lavorano con la risorsa articles tramite metodi HTTP standard. Le risposte hanno un formato coerente (data, _meta, _links).
  2. Senza stato: Ogni richiesta contiene tutto il contesto necessario (ad esempio, API Key).
  3. Cacheabilità: Le richieste GET possono essere memorizzate nella cache (implicito dallo stato 200), in un'API reale potresti aggiungere header Cache-Control.
  4. Architettura client-server: Chiara separazione: il client invia richieste, il server gestisce i dati degli articoli.
  5. Sistema a livelli: Il client non sa se dietro api.myblog.com c'è un singolo server o un intero cluster.
  6. Code on Demand (opzionale): Non utilizzato in questo esempio.
  7. HATEOAS: La presenza di _links nelle risposte consente al client di scoprire dinamicamente le azioni disponibili, che è una caratteristica chiave di una REST API matura.

Conclusione

REST API non è solo una tecnologia; è uno stile architetturale diventato lo standard de facto per la costruzione di servizi web. La sua forza risiede nella semplicità, prevedibilità e affidabilità, costruite sul protocollo HTTP perfezionato nel corso dei decenni.

Comprendere questi principi è utile non solo per gli sviluppatori, ma anche per project manager, product manager e imprenditori per comunicare efficacemente con i team tecnici e capire come vengono costruiti i moderni prodotti digitali.

Quanto attivamente usi le REST API nei tuoi progetti? Hai incontrato casi d'integrazione interessanti? Condividili nei commenti!

Tecnologie e argomenti

Tag dell'articolo

Nessun articolo corrisponde a questi filtri.

Hai un progetto o un'idea da discutere?

Parliamone ↗