Home/ Wiki/ Siti Web/ API e Web Services

API e Web Services

REST, SOAP e GraphQL a confronto: come funzionano le API, quali metodi HTTP utilizzano, come autenticarsi e come testarle con Postman.

Indice dei contenuti
Aggiornato: Aprile 2026 9 min di lettura

Cos'è un'API

Un'API (Application Programming Interface) è un insieme di regole e protocolli che permette a due applicazioni software di comunicare tra loro. Nel contesto web, le API consentono al frontend di richiedere dati al backend, a servizi di terze parti di integrarsi con il tuo sito e a sistemi diversi di scambiarsi informazioni in modo strutturato.

Quando usi un'app meteo sul telefono, quando effettui un pagamento online o quando un sito mostra una mappa Google incorporata, stai interagendo con delle API. Sono il tessuto connettivo del web moderno.

"Le API sono i contratti digitali tra sistemi software: definiscono cosa puoi chiedere, come chiederlo e cosa aspettarti in risposta."

API REST

REST (Representational State Transfer) è lo stile architetturale più diffuso per le API web. Si basa su sei principi fondamentali:

  • Client-Server: separazione netta tra chi consuma e chi fornisce i dati.
  • Stateless: ogni richiesta contiene tutte le informazioni necessarie; il server non mantiene stato tra le richieste.
  • Cacheable: le risposte possono essere messe in cache per migliorare le prestazioni.
  • Uniform Interface: le risorse sono identificate da URL e manipolate con metodi HTTP standard.
  • Layered System: l'architettura può includere livelli intermedi (proxy, load balancer) trasparenti al client.
  • Code on Demand (opzionale): il server può inviare codice eseguibile al client.
# Endpoint REST tipici per una risorsa "prodotti"
GET    /api/prodotti          # Lista tutti i prodotti
GET    /api/prodotti/42       # Dettaglio prodotto con ID 42
POST   /api/prodotti          # Crea un nuovo prodotto
PUT    /api/prodotti/42       # Aggiorna il prodotto 42
DELETE /api/prodotti/42       # Elimina il prodotto 42

SOAP

SOAP (Simple Object Access Protocol) è un protocollo più rigido e strutturato, basato su XML. È ancora usato in ambiti enterprise, bancari e governativi dove servono garanzie formali su sicurezza e transazioni.

CaratteristicaRESTSOAP
Formato datiJSON, XML, altriSolo XML
ProtocolloHTTPHTTP, SMTP, TCP
ComplessitàLeggeroPesante
Standard sicurezzaHTTPS, OAuthWS-Security (built-in)
ContrattoDocumentazione / OpenAPIWSDL (formale)
Uso tipicoWeb, mobile, microserviziEnterprise, banking, PA

GraphQL

GraphQL, sviluppato da Facebook nel 2012 e reso open-source nel 2015, è un linguaggio di query per API che permette al client di richiedere esattamente i dati di cui ha bisogno.

# Query GraphQL: richiedi solo nome e prezzo dei prodotti
{
  prodotti {
    nome
    prezzo
    categoria {
      nome
    }
  }
}
Quando scegliere GraphQL: è ideale quando il frontend ha bisogno di dati provenienti da più risorse in una singola richiesta (evitando l'over-fetching e l'under-fetching tipici di REST). È particolarmente potente per app mobile dove la banda è limitata.

Metodi HTTP

I metodi HTTP (detti anche verbi) definiscono l'azione da eseguire sulla risorsa. Ogni metodo ha una semantica precisa:

  • GET: recupera una risorsa. Non deve modificare i dati (idempotente e sicuro).
  • POST: crea una nuova risorsa. Non idempotente: chiamate ripetute creano risorse duplicate.
  • PUT: sostituisce interamente una risorsa esistente. Idempotente.
  • PATCH: modifica parzialmente una risorsa. Utile per aggiornare solo alcuni campi.
  • DELETE: elimina una risorsa. Idempotente.
  • HEAD: come GET, ma restituisce solo gli header (utile per verificare se una risorsa esiste).
  • OPTIONS: restituisce i metodi supportati per una risorsa (usato nel CORS preflight).

Comprendere i metodi HTTP è essenziale anche per interpretare gli status code restituiti dal server.

Il formato JSON

JSON (JavaScript Object Notation) è il formato di scambio dati più diffuso nelle API moderne. Leggibile sia dalle macchine che dagli esseri umani, è supportato nativamente da JavaScript e da praticamente tutti i linguaggi di programmazione.

{
  "id": 42,
  "nome": "Laptop Pro",
  "prezzo": 1299.99,
  "disponibile": true,
  "tag": ["elettronica", "computer", "portatile"],
  "specifiche": {
    "ram": "16GB",
    "storage": "512GB SSD"
  }
}

In JavaScript, JSON.parse() converte una stringa JSON in un oggetto e JSON.stringify() fa l'operazione inversa. La Fetch API gestisce la conversione automaticamente con response.json().

Autenticazione

La maggior parte delle API richiede autenticazione per identificare il client e proteggere i dati. I metodi più comuni sono:

  • API Key: una chiave univoca inviata nell'header o come parametro URL. Semplice ma poco sicura se esposta.
  • OAuth 2.0: standard per l'autorizzazione delegata. L'utente autorizza l'app senza condividere la password. Usato da Google, Facebook, GitHub.
  • JWT (JSON Web Token): token firmato che contiene informazioni sull'utente. Stateless e ideale per architetture a microservizi.
  • Basic Auth: username e password codificati in Base64 nell'header. Da usare solo su HTTPS.
Sicurezza: non inserire mai API key nel codice frontend o in repository pubblici. Usa variabili d'ambiente lato server e file .env (esclusi da Git con .gitignore).

Rate Limiting

Il rate limiting limita il numero di richieste che un client può effettuare in un determinato intervallo di tempo. Serve a proteggere il server da abusi e a garantire un servizio equo a tutti gli utenti.

Gli header di risposta tipici sono:

  • X-RateLimit-Limit: numero massimo di richieste consentite.
  • X-RateLimit-Remaining: richieste rimanenti nella finestra attuale.
  • X-RateLimit-Reset: timestamp di reset del contatore.

Se si supera il limite, il server risponde con un 429 Too Many Requests. Per gestire il rate limiting lato client, implementa retry con backoff esponenziale e rispetta l'header Retry-After.

Testare con Postman

Postman è lo strumento più diffuso per testare e documentare API. Permette di inviare richieste HTTP, ispezionare le risposte, salvare collezioni di endpoint e automatizzare i test.

  • Request builder: componi richieste con metodo, URL, header, body e parametri.
  • Collezioni: organizza gli endpoint in gruppi logici, condivisibili con il team.
  • Variabili d'ambiente: gestisci URL base, token e API key per ambienti diversi (dev, staging, production).
  • Test automatici: scrivi asserzioni in JavaScript per verificare status code, tempi di risposta e struttura dei dati.
  • Documentazione: genera automaticamente documentazione interattiva dall'API.

Alternative valide a Postman includono Insomnia, Thunder Client (estensione VS Code) e curl da riga di comando per test rapidi.

Per approfondire come i dati vengono archiviati lato server, consulta le guide sui database SQL e NoSQL.