Che cos'è un'API REST?

Aggiornato: ottobre 2026

Un’API REST è un tipo di API che segue lo stile architetturale REST: risorse a degli URL, richieste stateless e metodi HTTP standard. REST – Representational State Transfer, definito nella tesi di dottorato di Roy Fielding del 2000 – è uno stile, non un protocollo né uno standard: un insieme di vincoli che, rispettati insieme, producono API che tutto il web sa già consumare, mettere in cache e scalare.

Punti chiave

DomandaRisposta
Il modelloRisorse a degli URL · rappresentazioni (di solito JSON) · metodi standard
La fonteLa tesi di Fielding del 2000, capitolo 5 – uno stile architetturale, non una spec
I sei vincoliClient-server · stateless · cacheabile · interfaccia uniforme · a livelli · codice su richiesta (opzionale)
I verbiGET · POST · PUT · PATCH · DELETE – con semantica di sicurezza e idempotenza
La nota onestaGran parte delle API “REST” di produzione sono API HTTP di livello 2 – e va bene così

Un ciclo CRUD completo in HTTP grezzo

Tutto lo stile in quattro richieste – è questo che ogni framework e ogni SDK finisce per inviare:

POST /v1/posts                     →  201 Created            creare
{ "title": "Hello REST" }             Location: /v1/posts/8fk2

GET /v1/posts/8fk2                 →  200 OK                 leggere
                                      { "title": "Hello REST", … }

PUT /v1/posts/8fk2                 →  200 OK                 sostituire
{ "title": "Hello again" }            (PATCH aggiornerebbe dei campi)

DELETE /v1/posts/8fk2              →  204 No Content         eliminare
GET /v1/posts/8fk2                 →  404 Not Found          …e non c'è più

Lo stesso ciclo attraverso gli SDK che avvolgono le chiamate REST:

// JavaScript / Node.js — Back4app JS SDK
// The REST semantics, wrapped: create, read, update, delete
const post = new Parse.Object('Post');
post.set('title', 'Hello REST');
await post.save();                            // POST   /classes/Post      → 201

const fetched = await new Parse.Query('Post')
  .get(post.id);                              // GET    /classes/Post/:id  → 200

fetched.set('title', 'Hello again');
await fetched.save();                         // PUT    /classes/Post/:id  → 200

await fetched.destroy();                      // DELETE /classes/Post/:id  → 200

I sei vincoli di REST

  1. Client-server – interfaccia e implementazione evolvono in modo indipendente; la UI non sa mai come funziona l’archiviazione.
  2. Stateless – ogni richiesta è autonoma; il server non tiene sessione tra le chiamate, ed è questo che permette a qualsiasi replica di rispondere a qualsiasi richiesta.
  3. Cacheabile – le risposte dichiarano la propria cacheabilità; le GET con header di cache corretti mettono al servizio dell’API l’intera infrastruttura di caching del web (browser, CDN, proxy).
  4. Interfaccia uniforme – il vincolo che è REST, in quattro parti: risorse identificate da URI; manipolazione attraverso rappresentazioni (si rimanda il JSON che la risorsa deve diventare); messaggi autodescrittivi (metodo più header dicono tutto il necessario per elaborare la richiesta); e ipermedia come motore dello stato dell’applicazione (le risposte linkano le azioni successive).
  5. Sistema a livelli – i client non possono sapere se stanno parlando con l’origine, con una cache o con un gateway; gli intermediari si inseriscono liberamente.
  6. Codice su richiesta (opzionale) – i server possono spedire codice eseguibile ai client; è l’unico vincolo marcato come opzionale, e quello che la maggior parte delle API ignora.

Metodi HTTP: sicurezza, idempotenza, CRUD

La tabella che manca in quasi ogni pagina ben posizionata – la semantica dell’RFC 9110, condensata:

MetodoRuolo CRUDSicuro?Idempotente?Retry alla cieca?
GETLetturaSìSìSì
POSTCreazioneNoNoNo – può duplicare
PUTSostituzioneNoSìSì – stesso risultato
PATCHAggiornamento parzialeNoNon garantitaDipende dal design della patch
DELETERimozioneNoSìSì – resta eliminata

Sicuro significa che la richiesta non cambia nulla; idempotente significa che ripeterla non cambia nulla di più. Non sono curiosità: sono la politica di retry. Un timeout di rete su una PUT si può ripetere senza timore, lo stesso timeout su una POST richiede una chiave di idempotenza o un controllo sui duplicati. La mappatura CRUD completa ha una voce a sé.

Codici di stato: che cosa restituire e quando

SituazioneRestituire
Lettura riuscita200 OK
Risorsa creata201 Created + header Location
Eliminata; nulla da dire204 No Content
Richiesta malformata400 Bad Request
Credenziali assenti o non valide401 Unauthorized
Autenticato ma non autorizzato403 Forbidden
Risorsa inesistente404 Not Found
Oltre il rate limit429 Too Many Requests (dettagli)
Guasto del server500 Internal Server Error

È nelle distinzioni fra 401 e 403 e fra 200, 201 e 204 che si vede la cura artigianale di un’API: codici precisi rendono i client diagnosticabili con la sola riga di stato.

Quell’API è davvero REST? La scala di maturità

La sezione onesta che le spiegazioni commerciali omettono. Il Richardson Maturity Model assegna un voto alle API HTTP: livello 0 (un URL, un verbo, RPC travestito), livello 1 (risorse a degli URL), livello 2 (metodi e codici di stato corretti), livello 3 (ipermedia, cioè HATEOAS).

Richardson Maturity Model per le API RESTQuattro livelli, dal livello zero in cui HTTP è solo un tunnel, passando per le risorse, poi i verbi HTTP e i codici di stato, fino al livello tre con i controlli ipermediali; la maggior parte delle API di produzione si ferma al livello due.

Livello 0 – un solo endpoint, POST per tutto (RPC travestito)

Livello 1 – risorse: /posts/8fk2

Livello 2 – verbi + codici di stato ← qui vive la maggior parte delle API di produzione

Livello 3 – ipermedia: le risposte linkano le azioni successive (HATEOAS)

Quattro livelli, dal livello zero in cui HTTP è solo un tunnel, passando per le risorse, poi i verbi HTTP e i codici di stato, fino al livello tre con i controlli ipermediali; la maggior parte delle API di produzione si ferma al livello due.

Per l’insistenza dello stesso Fielding, un’API senza ipermedia non è REST – ha scritto un saggio tagliente che lo dice esattamente. In pratica quasi ogni acclamata “API REST” è un’API HTTP di livello 2: risorse, verbi, codici di stato, JSON, nessun ipermedia. La cosa conta meno come purezza e più come vocabolario: conoscere la scala dice che cosa significa il termine in un annuncio di lavoro (livello 2) rispetto alla tesi (livello 3), e risparmia sia l’HATEOAS da culto del cargo sia le correzioni pedanti.

REST vs. SOAP vs. GraphQL vs. gRPC

CriterionRESTSOAPGraphQLgRPC
NaturaStile architetturaleProtocolloLinguaggio di query + runtimeFramework RPC
Sul filoJSON su HTTPBuste XMLJSON su HTTP (un solo endpoint)Protobuf su HTTP/2
ContrattoOpenAPI (per convenzione)WSDL (obbligatorio)Schema (integrato).proto (obbligatorio)
CacheNativa in HTTP – il suo superpotereScarsaA livello applicativoA livello applicativo
Punto di forzaCRUD pubblico su risorseFormalità enterprise e legacyDati annidati modellati dal clientVelocità fra servizi interni
DebolezzaForme fisse, over/underfetchingVerbositàComplessità di cache e rate limitFrizione nel browser

Il confronto con GraphQL ha una voce intera a sé.

Convenzioni che rendono piacevole un’API REST

Oltre ai vincoli, le convenzioni su cui i consumatori danno un voto in silenzio: risorse al plurale (/posts, non /getPost); annidamento di un livello al massimo (/posts/8fk2/comments, e poi stop); paginazione su ogni collezione, basata su cursori per profondità e stabilità, con limiti applicati; filtri e ordinamenti come parametri di query, non come varianti di endpoint; versionamento con una politica esplicita (percorso /v1/ oppure header – va scelto uno dei due e vanno pubblicate le finestre di deprecazione); negoziazione del contenuto rispettata (Accept, Content-Type); ed errori come JSON strutturato con un codice leggibile dalle macchine, non solo prosa. Niente di tutto questo sta nella tesi; tutto questo sta nella differenza fra un’API che gli sviluppatori consigliano e una che sopportano.

Casi d’uso tipici

  • API pubbliche e per partner – l’ubiquità di REST è la feature: ogni linguaggio, strumento e sviluppatore la parla.
  • Backend di app mobile e web – il CRUD su risorse via HTTP corrisponde al modo in cui la maggior parte delle schermate consuma davvero i dati.
  • Cuciture fra microservizi – contratti interni dove gli strumenti di HTTP (gateway, tracing, caching) si guadagnano il posto.
  • Integrazioni in stile webhook – sistemi che notificano altri sistemi con semplici chiamate HTTP che entrambe le parti già capiscono.
  • API di dati generate automaticamente – piattaforme che espongono un database come risorse REST, la via più rapida dallo schema a un’API funzionante.

Conviene usare REST? Matrice decisionale

REST è il default giusto quando…Conviene altro quando…
API pubblica, consumatori ignotiMaglia interna a throughput elevato → gRPC
Dominio CRUD a forma di risorseI client devono modellare risposte annidate → GraphQL
La cache HTTP può reggere il carico di letturaServe push bidirezionale in tempo reale → WebSocket / live query
Contano semplicità e ampiezza degli strumentiSono richiesti contratti enterprise formali → SOAP
Le schermate si mappano in modo pulito sulle risorseUna schermata aggrega cinque servizi → endpoint composito / BFF

Limiti e trade-off

  • Le rappresentazioni fisse non calzano a client diversi. La coppia over/underfetching è la debolezza strutturale di REST; set di campi sparsi e parametri di espansione la mitigano, GraphQL la riprogetta.
  • Nessun contratto obbligatorio. Nulla impone una spec OpenAPI, quindi molte API REST sono documentate per tradizione orale; la disciplina è facoltativa dove gRPC e GraphQL la rendono strutturale.
  • L’assenza di stato ripete il contesto. Autenticazione e contesto del tenant viaggiano su ogni richiesta – pochi byte, ma la semantica di sessione si sposta sui token e alcuni flussi (le transazioni a più passaggi) diventano scomodi.
  • La tentazione dell’N+1 per costruzione. Il ragionamento una-risorsa-per-URL invita a client che fanno una chiamata per elemento; le buone API offrono espansione e operazioni in blocco prima che i consumatori improvvisino cicli.
  • La parola “REST” è ambigua. API HTTP di livello 2 in bocca a quasi tutti, architettura ipermediale nella tesi: prima di discutere conviene capire quale dei due intende una spec, un annuncio di lavoro o chi fa la revisione.

Le API REST su Back4app

Back4app è una piattaforma open-source di Backend as a Service (BaaS) che combina database gestito, API REST e GraphQL generate automaticamente, autenticazione, archiviazione di file e funzioni serverless con Cloud Code. Qui l’API REST è generata, non costruita: ogni classe del modello di dati è immediatamente una risorsa – POST /classes/Post crea, GET /classes/Post/:id legge, con i metodi, i codici di stato e la semantica di Location visti nella panoramica qui sopra – dietro chiavi, token utente e permessi a livello di classe che fanno rispettare il confine. Le schede di codice mostrano lo stesso ciclo attraverso gli SDK, che sono sottili involucri idiomatici esattamente su questo HTTP; quando un’operazione esce dal CRUD, una funzione Cloud Code aggiunge un endpoint su misura in un solo file. REST di livello 2, corretto per impostazione predefinita, dallo schema all’URL nel tempo che serve a definire la classe.

Domande frequenti

Che cos'è un'API REST in parole semplici?

Un modo per far parlare due applicazioni su HTTP con convenzioni che tutti già conoscono: ogni cosa (un utente, un ordine) vive a un URL, ci si agisce con un verbo standard – GET per leggere, POST per creare, PUT o PATCH per aggiornare, DELETE per rimuovere – e ogni richiesta sta in piedi da sola, portando tutto ciò che serve al server per risponderle.

Che cosa significa REST?

Representational State Transfer, dalla tesi di dottorato di Roy Fielding del 2000. Il nome descrive il meccanismo: il server trasferisce al client una rappresentazione dello stato di una risorsa (di solito JSON), e il client porta l'applicazione da uno stato all'altro attraverso quelle rappresentazioni.

Qual è la differenza tra REST e RESTful?

Nell'uso quotidiano nessuna: i termini sono interscambiabili. Per essere pedanti, REST nomina lo stile architetturale e RESTful è l'aggettivo per un'API che lo implementa. L'affermazione che circola secondo cui "RESTful segue tutte le regole e REST solo alcune" non ha fondamento nel lavoro di Fielding.

Quali sono i sei vincoli di REST?

Separazione client-server, assenza di stato, cacheabilità, interfaccia uniforme, sistema a livelli e – opzionalmente – codice su richiesta. L'interfaccia uniforme si scompone a sua volta in quattro regole: risorse identificate da URI, manipolazione attraverso rappresentazioni, messaggi autodescrittivi e ipermedia come motore dello stato dell'applicazione.

Qual è la differenza tra PUT e POST?

Idempotenza e indirizzamento. POST crea sotto una collezione – l'URL lo assegna il server, e ripetere la richiesta crea duplicati. PUT scrive una rappresentazione completa a un URL noto – ripeterlo produce lo stesso stato, ed è questo che rende sicuri i retry. È quella differenza di sicurezza, non lo stile, a rendere importante la distinzione.

Un'API REST deve usare JSON?

No. REST è agnostico rispetto al formato: una risorsa può essere rappresentata come JSON, XML, HTML o immagine, negoziata attraverso gli header Accept e Content-Type. JSON è semplicemente la scelta predefinita moderna, perché ogni client lo analizza a basso costo. Il vincolo riguarda le rappresentazioni, non una in particolare.

Che cosa significa stateless in un'API REST?

Il server non conserva memoria del client tra una richiesta e l'altra: ogni richiesta porta tutto il necessario per essere elaborata, credenziali come un bearer token comprese. Il guadagno è la scalabilità orizzontale – qualsiasi server può rispondere a qualsiasi richiesta – e il costo sono pochi byte di contesto ripetuti a ogni chiamata.

Che cos'è HATEOAS?

Hypermedia As The Engine Of Application State: le risposte includono i link alle azioni disponibili dopo, così i client navigano l'API come le persone navigano il web, seguendo link invece di inserire URL nel codice. È il vincolo meno implementato; la maggior parte delle API "REST" di produzione lo salta e vive serenamente al livello 2 del modello di maturità.

Termini correlati

Confronta con

Fonti di approfondimento

Pronto a costruire il tuo backend?

Avvia il tuo progetto su Back4app in pochi minuti: database, autenticazione, API e Cloud Code inclusi. Nessuna carta di credito richiesta.

Scritto e revisionato da Back4app Engineering, Back4app Engineering · Pubblicato il 2026-10-02