Representational State Transfer (REST) è uno stile architetturale del software che fornisce linee guida su come dovrebbe funzionare un’API. È stato creato come linee guida per gestire la comunicazione su una rete complessa come Internet. REST è un insieme di principi e vincoli che, se seguiti, consentono la creazione di servizi web scalabili, efficienti e manutenibili.
Le API RESTful, o API REST, sono API che seguono lo stile architetturale REST per progettare e interagire con servizi web. Oltre all’uso delle API per comunicare e condividere dati tra due o più software o applicazioni, le API RESTful contribuiscono all’efficienza, scalabilità e flessibilità delle applicazioni web, svolgendo un ruolo importante nello sviluppo web. Altri vantaggi delle API RESTful nell’ambito dello sviluppo web sono la statelessness, la compatibilità e l’interoperabilità, l’integrazione semplificata, la sicurezza migliorata e la semplicità.
Due concetti fondamentali per comprendere come funzionano le API RESTful sono: Endpoint e Risorse
-
RISORSE: Le risorse sono qualsiasi informazione che può essere identificata, nominata e manipolata. Sono le principali astrazioni esposte tramite l’API.
-
ENDPOINT: Un endpoint è il punto di accesso o l’URL specifico (Uniform Resource Locator) o URI che rappresenta una risorsa o una collezione di risorse attraverso cui i client possono interagire con l’API.
Principi chiave dell’architettura RESTful
I principali principi dell’architettura RESTful, anche noti come vincoli REST, definiscono collettivamente l’architettura RESTful e guidano la progettazione dei servizi web che rispettano tali vincoli. I principi includono:
-
STATELESSNESS: Ogni richiesta da un client a un server deve contenere tutte le informazioni necessarie per comprendere e elaborare la richiesta. La statelessness migliora la scalabilità e semplifica l’implementazione del server.
-
UNIFORM INTERFACE: Sotto-vincoli come l’identificazione delle risorse tramite URL, la manipolazione delle risorse tramite rappresentazione, messaggi auto-descrittivi e l’interazione dei client con le applicazioni esclusivamente tramite ipermedia comunemente noto come HATEOAS (Hypermedia come motore dello stato dell’applicazione) consentono un’interfaccia uniforme e coerente.
-
ARCHITETTURA CLIENT-SERVER: I sistemi RESTful seguono una struttura in cui il client e il server sono entità separate che comunicano tramite una rete. Il client è responsabile dell’interfaccia utente e dell’esperienza utente, mentre il server è responsabile del processamento delle richieste, della gestione delle risorse e del mantenimento della logica di business dell’applicazione. Questa separazione delle responsabilità migliora la scalabilità e la flessibilità.
-
SISTEMA A LIVELLI: Ci sono più livelli, ognuno con la propria funzionalità specifica che consiste nell’architettura REST. Ciascun livello interagisce con il livello adiacente per promuovere la modularità e la scalabilità.
-
CODICE SU RICHIESTA: Questo principio fornisce un modo per le applicazioni client di caricare ed eseguire il codice fornito dal server, migliorando le capacità del client. Anche se il “Codice su Richiesta” può offrire flessibilità, non è sempre adatto a tutte le situazioni a causa delle considerazioni di sicurezza e del potenziale aumento del vincolo tra il client e il server. La decisione di utilizzare il “Codice su Richiesta” dipende dai requisiti specifici e dai vincoli dell’applicazione in fase di sviluppo.
-
CACHEABILITÀ: La cacheabilità migliora le prestazioni consentendo ai client di riutilizzare le rappresentazioni precedentemente recuperate, riducendo la necessità di richieste ripetute al server.
Endpoint nelle API RESTful
Endpoint definiscono la funzionalità o le azioni eseguite sulle risorse, come recuperare un elenco di elementi, creare un nuovo elemento, aggiornare un elemento esistente o eliminare un elemento. Le API RESTful spesso hanno più endpoint per eseguire operazioni diverse sulla stessa risorsa o per lavorare con risorse diverse.
Gli endpoint giocano un ruolo importante nella progettazione delle API servendo come punti di accesso attraverso i quali i client interagiscono con l’API. Alcuni degli endpoint importanti nella progettazione delle API sono:
-
Esposizione della risorsa: Gli endpoint definiscono le risorse o la collezione di risorse esposte dall’API, e ogni endpoint definisce una risorsa specifica o un insieme di risorse, rendendo chiaro con quali risorse o insiemi di risorse un client può interagire.
-
Definizione dell’operazione: Gli endpoint specificano l’azione che i client possono eseguire sulle risorse. I metodi HTTP come GET, POST, PUT e DELETE vengono utilizzati per definire l’azione.
-
Modularità e Scalabilità: Gli endpoint promuovono la modularità riassumendo funzionalità specifiche relative a una risorsa specifica o a un insieme di risorse. La modularità migliora la manutenibilità dell’API e consente uno sviluppo scalabile.
-
Design Chiaro e Intuitivo: Scegliendo convenzioni di denominazione significative e coerenti per gli endpoint, i developer possono facilmente comprendere lo scopo e la funzionalità di ciascun endpoint, contribuendo alla chiarezza e all’intuitività del design dell’API.
Esistono diversi tipi di endpoint categorizzati in base alla loro funzionalità e ai tipi di operazioni che supportano. Alcuni dei diversi tipi sono:
-
Endpoint di Lettura e Recupero: utilizzati per recuperare risorse dal server utilizzando il metodo HTTP GET.
-
Endpoint di Creazione o POST: utilizzati per creare nuove risorse sul server utilizzando il metodo HTTP POST
-
Elimina Endpoint: utilizzato per eliminare una risorsa sul server utilizzando il metodo DELETE HTTP
-
Aggiorna o Endpoint PUT: utilizzato per aggiornare risorse esistenti sul server utilizzando il metodo PUT HTTP.
-
Cerca o Endpoint Query: Consente ai client di recuperare un sottoinsieme di risorse in base a criteri specificati utilizzando il metodo GET HTTP.
-
Lista Endpoint: Recupera una collezione o elenco di risorse utilizzando il metodo GET HTTP.
Risorse nelle API RESTful
Le risorse sono astrazioni chiave che rappresentano qualsiasi informazione che può essere identificata, denominata e manipolata. Esempi di risorse includono profili utente, articoli e qualsiasi altra entità di dati con cui le applicazioni operano. Le risorse possono essere identificate da un URI (Uniform Resource Identifier) distinto. Di solito sono in formati JSON o XML, e ciascuna risorsa può essere creata, recuperata, aggiornata ed eliminata utilizzando metodi HTTP standard.
La base per la costruzione di un’architettura RESTful è l’identificazione delle sue risorse. Alcune delle linee guida principali per l’identificazione delle risorse nella progettazione delle API includono:
-
Usare Sostantivi per i Nomi delle Risorse: invece di utilizzare verbi come “ottenere” o “recuperare” nel nome della risorsa, utilizzare sostantivi come “utenti” o “prodotti”.
-
Convenzioni di Nomenclatura delle Risorse: Seguire una convenzione di denominazione coerente per le risorse. Dovrebbero essere utilizzati nomi facili da capire e ricordare.
-
Usa sostantivi al plurale per raccolte di risorse: Ad esempio, ‘/users’ è una raccolta di risorse utente e ‘/products’ è una raccolta di risorse prodotto.
-
Documentazione: Le API devono essere chiaramente documentate per consentire agli utenti di comprendere le risorse disponibili e come interagire con esse.
Relazione tra Risorse e Endpoint
La relazione tra risorse e endpoint è fondamentale per il design e la funzionalità di un’API RESTful. Alcune delle relazioni tra di loro sono:
-
Endpoint come Punti di Accesso: Un endpoint è l’URI o URL specifico che corrisponde a una risorsa o a una collezione di risorse. Fornisce un punto di accesso concreto attraverso il quale i client possono interagire con la risorsa.
-
Endpoint identifica una Risorsa: L’endpoint identifica una risorsa o un insieme di risorse. Ad esempio, se hai una risorsa che rappresenta gli utenti, l’endpoint potrebbe essere ‘/users.’
-
I Metodi HTTP definiscono le Operazioni: I punti finali sono associati a specifici metodi HTTP (GET, POST, PUT, DELETE, ecc.), che definiscono le operazioni che possono essere eseguite sulla risorsa corrispondente.
-
Rappresentazione della Risorsa: Il punto finale scambia rappresentazioni della risorsa con il server quando il client interagisce con essa. Queste rappresentazioni possono essere in diversi formati come JSON o XML e contengono lo stato o le informazioni sulla risorsa. La rappresentazione è il payload della richiesta o della risposta HTTP.
-
Interfaccia Uniforme: La relazione tra risorse e punti finali aderisce ai vincoli di interfaccia uniforme di REST. La combinazione di risorse e punti finali crea una struttura API coerente e prevedibile.
-
HATEOAS (Hypermedia come motore dello stato dell’applicazione): Coinvolge l’inclusione di collegamenti ipertestuali nelle rappresentazioni delle risorse, consentendo ai client di navigare dinamicamente nell’API.
Conclusione
L’interazione tra risorse e punti finali è fondamentale nel design di API RESTful per lo sviluppo di un’architettura unificata ed efficiente. Le risorse, che rappresentano entità concettuali, definiscono le entità essenziali del sistema, come gli utenti o i prodotti. I punti finali, rappresentati dagli URI, fungono da gateway per i client per interagire con queste risorse tramite metodi HTTP specificati. Seguendo i principi RESTful, questa relazione simbiotica garantisce un’interfaccia uniforme, una comunicazione auto-descrittiva e una navigazione dinamica tramite collegamenti ipertestuali (HATEOAS). L’allineamento attento di risorse e punti finali è più di un dettaglio tecnico; è un concetto di design che guida la chiarezza, la scalabilità e l’adattabilità dell’API, risultando in un’esperienza fluida e intuitiva sia per sviluppatori che per utenti.
Source:
https://inioluwa2003.hashnode.dev/demystifying-restful-apis-a-deep-dive-into-endpoints-and-resources