Che cos'è un'API REST?

Un'API REST, o interfaccia di programmazione di un'applicazione di trasferimento dello stato rappresentazionale, è uno stile architettonico comunemente considerato lo standard per la progettazione e la creazione delle applicazioni in rete che alimentano il web. Fornisce un insieme di regole e vincoli che, se seguiti, portano a servizi web semplici, scalabili e facili da integrare.

Definizione dell'API REST

Un'API REST è un'API conforme ai principi di progettazione dello stile architettonico REST. Alla base, REST ruota attorno all'idea di risorse, che possono essere qualsiasi informazione come un utente, un prodotto, un documento o una raccolta di elementi. 

Un'API REST fornisce un modo per un'applicazione client di accedere a queste risorse e manipolarle utilizzando un insieme predefinito di operazioni stateless.

Come funziona un'API REST?

1. Il client invia la richiesta

Un'applicazione client (come un'app mobile, un browser web o un altro server) avvia una richiesta all'API per eseguire un'azione. Questa richiesta viene inviata a un URL specifico e include un metodo HTTP, intestazioni con metadati e, a volte, un corpo della richiesta con dati.

2. Il server elabora la richiesta

Il server riceve e convalida la richiesta, confermando che il client è autenticato e autorizzato a eseguire l'azione richiesta. Quindi elabora la richiesta, che potrebbe comportare il recupero di dati da un database, la creazione di una nuova risorsa o l'aggiornamento di una esistente.

3. Il server invia la risposta

Dopo aver elaborato la richiesta, il server invia una risposta al client. Questa risposta include un codice di stato HTTP che indica il risultato (ad esempio, 200 OK per esito positivo, 404 Not Found se la risorsa non esiste, 401 Unauthorized per problemi di sicurezza), insieme ai dati richiesti nel corpo della risposta.

4. Trasferimento di dati

I dati trasferiti tra client e server sono una "rappresentazione" dello stato della risorsa. JSON (JavaScript Object Notation) è il formato più comune per questi dati perché è leggero, leggibile e facile da analizzare per i linguaggi di programmazione.

Architettura e componenti dell'API REST

La potenza e la scalabilità di REST derivano da una serie di vincoli architetturali che ne guidano la progettazione. Un sistema che rispetta questi vincoli è considerato "RESTful".

Diagramma del modello API REST

Risorse

Una risorsa è un concetto fondamentale in REST. È un oggetto con un tipo, dati associati, relazioni con altre risorse e un insieme di metodi che operano su di esso. Ad esempio, in un'API di e-commerce, un "prodotto" o un "cliente" sarebbero una risorsa.

URI (Uniform Resource Identifier)

Ogni risorsa è identificata in modo univoco da un URI. Un'API ben progettata utilizza URI puliti, descrittivi e coerenti per identificare le proprie risorse. Ad esempio, /users potrebbe identificare una raccolta di utenti e /users/123 identificherebbe un utente specifico con l'ID 123.

Rappresentazioni

Un client non interagisce direttamente con la risorsa, ma con una rappresentazione di quella risorsa. Il formato di rappresentazione più comune è JSON, ma possono essere utilizzati anche altri formati come XML o HTML. Questo fornisce un modo flessibile per rappresentare lo stato di una risorsa.

Condizione stateless

Ogni richiesta da un client al server deve contenere tutte le informazioni necessarie al server per comprendere ed elaborare la richiesta. Il server non archivia alcun contesto client o stato della sessione tra le richieste. Questo vincolo rende le API REST altamente scalabili perché qualsiasi server può gestire qualsiasi richiesta.

Architettura client-server

Il client e il server sono separati e l'API funge da interfaccia tra loro. Questa separazione delle responsabilità consente all'applicazione lato client e all'applicazione lato server di evolversi in modo indipendente.

Interfaccia uniforme

REST richiede un'interfaccia coerente e uniforme tra client e server. Ciò si ottiene mediante l'uso di metodi HTTP standard, URI per l'identificazione delle risorse e hypermedia as the engine of application state (HATEOAS).

Memorizzabile nella cache

Le risposte del server devono essere definite come memorizzabili nella cache o non memorizzabili nella cache. Quando una risposta è memorizzabile nella cache, un client o un intermediario può riutilizzarla per richieste identiche successive, il che può migliorare significativamente le prestazioni e ridurre il carico del server.

Sistema a strati

Un client connesso a un'API REST di solito non è in grado di stabilire se è connesso direttamente al server finale o a un intermediario lungo il percorso. È possibile introdurre server intermedi, come gateway API o bilanciatori del carico, nell'architettura per migliorare la scalabilità, la sicurezza e le prestazioni.

Best practice per le API REST

Gli URI devono rappresentare le risorse, quindi devono utilizzare nomi (plurali per le raccolte, singolari o un ID per un elemento specifico), non verbi. Ad esempio, usa /users per rappresentare tutti gli utenti, non /getAllUsers.

Utilizza i verbi HTTP standard per rappresentare le azioni: GET per il recupero, POST per la creazione, PUT per gli aggiornamenti e DELETE per la rimozione. In questo modo si crea un'interfaccia prevedibile e coerente.

Un principio fondamentale di REST è che una risposta deve includere link ad altre azioni o risorse correlate. Ciò consente al client di navigare nell'API in modo dinamico senza dover codificare in modo rigido i pattern URI.

Quando devi apportare modifiche che provocano errori a un'API, introduci una nuova versione. La pratica più comune è quella di includere il numero di versione nell'URI, ad esempio /api/v2/users. Ciò consente ai clienti esistenti di continuare a utilizzare la vecchia versione, mentre i nuovi clienti possono adottare quella nuova.

Quando una richiesta non riesce, fornisci un messaggio di errore chiaro e utile nel corpo della risposta insieme al codice di stato HTTP appropriato (ad esempio, 400 Bad Request, 500 Internal Server Error). Questo aiuta lo sviluppatore lato client a capire cosa è andato storto.

Proteggi la tua API implementando un'autenticazione solida (ad esempio, OAuth 2.0, chiavi API) per verificare l'identità e l'autorizzazione del client e assicurarti che il client abbia accesso solo alle risorse che è autorizzato a vedere. Utilizza sempre TLS/SSL per crittografare il traffico.

Per gli endpoint che possono restituire un numero elevato di elementi, implementa la paginazione per restituire i dati in blocchi gestibili. Inoltre, fornisci parametri di query per consentire ai client di filtrare e ordinare i risultati, riducendo la quantità di dati trasferiti.

Vantaggi dell'utilizzo delle API REST

Semplicità e leggibilità

Le API REST utilizzano metodi HTTP standard e URI leggibili, il che le rende relativamente facili da apprendere, utilizzare ed eseguire il debug per gli sviluppatori. La natura autodescrittiva dell'interfaccia semplifica gli sforzi di integrazione.

Scalabilità

La natura stateless di REST è un fattore chiave per la scalabilità. Poiché il server non deve mantenere le sessioni client, è facile distribuire le richieste su più server e nuovi server possono essere aggiunti per gestire un carico maggiore senza complessità.

Flessibilità

REST supporta una varietà di formati di dati, tra cui JSON è il più popolare grazie alla sua natura leggera e all'ampio supporto. Questa flessibilità consente alle API REST di essere utilizzate da un'ampia gamma di applicazioni client, dai browser web ai dispositivi mobili e ai sensori IoT.

Disaccoppiamento di client e server

L'architettura client-server imposta da REST crea una chiara separazione delle responsabilità. Ciò consente agli sviluppatori di lavorare in modo indipendente sul frontend lato client e sul backend lato server, il che può accelerare i cicli di sviluppo.

Indipendente dal linguaggio

Poiché REST è uno stile architetturale basato su HTTP standard, può essere implementato in qualsiasi linguaggio di programmazione e utilizzato da qualsiasi client in grado di effettuare richieste HTTP. Ciò garantisce la massima interoperabilità tra diversi stack tecnologici.

Esempi di API REST

Esempio di API pubblica

Un caso d'uso comune è un'app meteo mobile che recupera le condizioni meteorologiche attuali per una posizione specifica da un'API meteo pubblica.

L'applicazione client effettua una richiesta HTTP GET all'endpoint API, includendo la località e una chiave API per l'autenticazione.

curl

"https://api.weather-service.com/v1/current?location=94043&key=YOUR_API_KEY"

curl

"https://api.weather-service.com/v1/current?location=94043&key=YOUR_API_KEY"

Il server elabora la richiesta, recupera i dati meteorologici per la località specificata e restituisce una risposta JSON.

{

 "temperature": 20,

 "unit": "celsius",

 "condition": "Clear",

 "humidity": 55

}

{

 "temperature": 20,

 "unit": "celsius",

 "condition": "Clear",

 "humidity": 55

}

Esempio di API interna

In un'architettura di microservizi, un servizio "prodotto" potrebbe dover ottenere un prezzo aggiornato da un servizio "inventario" prima di visualizzarlo su un sito di e-commerce. 

Il servizio prodotto effettua una richiesta HTTP GET interna all'endpoint API del servizio inventario per un ID prodotto specifico.

curl

"http://inventory-service.internal/api/products/PN-5821/price"

curl

"http://inventory-service.internal/api/products/PN-5821/price"

Il servizio di inventario cerca il prezzo corrente e restituisce una semplice risposta JSON.

{

"productId": "PN-5821",

"price": 1299.99,

"currency": "USD"

}

```

{

"productId": "PN-5821",

"price": 1299.99,

"currency": "USD"

}

```

Risolvi le tue sfide aziendali con Google Cloud

I nuovi clienti ricevono 300 $ di crediti gratuiti da spendere su Google Cloud.

Risorse aggiuntive

  • Explorer API di Google è uno strumento interattivo che ti consente di esplorare e testare varie API REST Google direttamente dal tuo browser
  • Questo post del blog fornisce una guida completa alle best practice per la progettazione e lo sviluppo di API web RESTful
  • Il percorso di apprendimento Cloud Hero su Google Cloud Skills Boost offre lab pratici per acquisire esperienza pratica con la gestione delle API

Fai il prossimo passo

Inizia a creare su Google Cloud con 300 $ di crediti gratuiti e oltre 20 prodotti Always Free.

Google Cloud