REST o RESTful API design (Representational State Transfer) è progettato per sfruttare i protocolli esistenti. Mentre REST può essere utilizzato su quasi tutti i protocolli, di solito sfrutta HTTP quando viene utilizzato per le API Web. Ciò significa che gli sviluppatori non hanno bisogno di installare librerie o software aggiuntivo al fine di sfruttare un design API REST. REST API Design è stato definito dal Dr. Roy Fielding nella sua tesi di dottorato 2000. È notevole per il suo incredibile livello di flessibilità., Poiché i dati non sono legati a metodi e risorse, REST ha la capacità di gestire più tipi di chiamate, restituire diversi formati di dati e persino cambiare strutturalmente con la corretta implementazione di ipermedia.
Questa libertà e flessibilità insita nella progettazione delle API REST ti consentono di creare un’API che soddisfi le tue esigenze e soddisfi anche le esigenze di clienti molto diversi. A differenza di SOAP, REST non è vincolato a XML, ma può invece restituire XML, JSON, YAML o qualsiasi altro formato a seconda di ciò che il client richiede., E a differenza di RPC, gli utenti non sono tenuti a conoscere i nomi delle procedure o parametri specifici in un ordine specifico.
Tuttavia, ci sono degli svantaggi nella progettazione delle API REST. È possibile perdere la capacità di mantenere lo stato in REST, ad esempio all’interno delle sessioni, e può essere più difficile da utilizzare per gli sviluppatori più recenti. È anche importante capire cosa rende RESTful un’API REST e perché esistono questi vincoli prima di creare la tua API. Dopotutto, se non capisci perché qualcosa è progettato nel modo in cui è, puoi ostacolare i tuoi sforzi senza nemmeno rendertene conto.,
Comprensione del design delle API REST
Mentre la maggior parte delle API afferma di essere RESTful, non soddisfano i requisiti e i vincoli asseriti dal Dr. Fielding. Ci sono sei vincoli chiave per la progettazione API REST di essere a conoscenza quando si decide se questo è il tipo di API giusto per il progetto.
Client-Server
Il vincolo client-server funziona sul concetto che il client e il server dovrebbero essere separati l’uno dall’altro e permesso di evolversi individualmente e indipendentemente., In altre parole, dovrei essere in grado di apportare modifiche alla mia applicazione mobile senza influire sulla struttura dei dati o sulla progettazione del database sul server. Allo stesso tempo, dovrei essere in grado di modificare il database o apportare modifiche alla mia applicazione server senza influire sul client mobile. Ciò crea una separazione delle preoccupazioni, consentendo a ciascuna applicazione di crescere e scalare indipendentemente dall’altra e consentendo alla tua organizzazione di crescere in modo rapido ed efficiente.,
Stateless
Le API REST sono stateless, il che significa che le chiamate possono essere effettuate indipendentemente l’una dall’altra e ogni chiamata contiene tutti i dati necessari per completarsi correttamente. Un’API REST non dovrebbe fare affidamento sui dati memorizzati sul server o sulle sessioni per determinare cosa fare con una chiamata, ma piuttosto basarsi esclusivamente sui dati forniti in quella chiamata stessa. Le informazioni di identificazione non vengono memorizzate sul server durante le chiamate. Invece, ogni chiamata ha i dati necessari in sé, come la chiave API, il token di accesso, l’ID utente, ecc., Ciò aiuta anche ad aumentare l’affidabilità dell’API avendo tutti i dati necessari per effettuare la chiamata, invece di fare affidamento su una serie di chiamate con lo stato del server per creare un oggetto, che potrebbe causare errori parziali. Invece, al fine di ridurre i requisiti di memoria e mantenere l’applicazione il più scalabile possibile, un’API RESTful richiede che qualsiasi stato sia memorizzato sul client, non sul server.
Cache
Poiché un’API stateless può aumentare il sovraccarico delle richieste gestendo grandi carichi di chiamate in entrata e in uscita, un’API REST dovrebbe essere progettata per incoraggiare l’archiviazione di dati memorizzabili nella cache., Ciò significa che quando i dati sono memorizzabili nella cache, la risposta dovrebbe indicare che i dati possono essere memorizzati fino a un certo tempo (scade-at), o nei casi in cui i dati devono essere in tempo reale, che la risposta non deve essere memorizzata nella cache dal client. Abilitando questo vincolo critico, non solo ridurrai notevolmente il numero di interazioni con la tua API, riducendo l’utilizzo del server interno, ma fornirai anche agli utenti API gli strumenti necessari per fornire le app più veloci ed efficienti possibili. Tieni presente che il caching viene eseguito sul lato client., Mentre si può essere in grado di memorizzare nella cache alcuni dati all’interno della propria architettura per eseguire le prestazioni complessive, l’intento è quello di istruire il client su come dovrebbe procedere e se il client può memorizzare temporaneamente i dati.
Uniform Interface
La chiave per disaccoppiare il client dal server è avere un’interfaccia uniforme che consente un’evoluzione indipendente dell’applicazione senza avere i servizi, i modelli o le azioni dell’applicazione strettamente accoppiati al livello API stesso., L’interfaccia uniforme consente al client di parlare con il server in un’unica lingua, indipendente dal backend architettonico di entrambi. Questa interfaccia dovrebbe fornire un mezzo standardizzato e immutabile per comunicare tra il client e il server, ad esempio utilizzando HTTP con risorse URI, CRUD (Create, Read, Update, Delete) e JSON.
Sistema a strati
Come suggerisce il nome, un sistema a strati è un sistema composto da livelli, con ogni livello che ha una funzionalità e una responsabilità specifiche., Se pensiamo a un framework Model View Controller, ogni livello ha le proprie responsabilità, con i modelli che comprendono come devono essere formati i dati, il controller che si concentra sulle azioni in entrata e la vista che si concentra sull’output. Ogni livello è separato ma interagisce anche con l’altro. In REST API design, lo stesso principio vale, con diversi livelli dell’architettura che lavorano insieme per costruire una gerarchia che aiuta a creare un’applicazione più scalabile e modulare.,
Un sistema a strati consente inoltre di incapsulare i sistemi legacy e spostare le funzionalità meno comunemente accessibili a un intermediario condiviso proteggendo anche i componenti più moderni e comunemente usati da essi. Inoltre, il sistema a strati ti dà la libertà di spostare i sistemi dentro e fuori dalla tua architettura man mano che le tecnologie e i servizi si evolvono, aumentando la flessibilità e la longevità finché mantieni i diversi moduli il più liberamente accoppiati possibile., Ci sono notevoli vantaggi di sicurezza di avere un sistema a più livelli in quanto consente di fermare gli attacchi a livello proxy, o all’interno di altri livelli, impedendo loro di arrivare alla vostra architettura server reale. Utilizzando un sistema a più livelli con un proxy o creando un singolo punto di accesso, è possibile mantenere gli aspetti critici e più vulnerabili della propria architettura dietro un firewall, impedendo l’interazione diretta con essi da parte del client., Tieni presente che la sicurezza non si basa su una singola soluzione “stop all”, ma piuttosto sull’avere più livelli con la consapevolezza che determinati controlli di sicurezza potrebbero non riuscire o essere ignorati. In quanto tale, maggiore è la sicurezza che puoi implementare nel tuo sistema, più è probabile che tu prevenga attacchi dannosi.
Code on Demand
Forse il meno noto dei sei vincoli, e l’unico vincolo opzionale, Code on Demand consente di trasmettere codice o applet tramite l’API per l’uso all’interno dell’applicazione., In sostanza, crea un’applicazione intelligente che non dipende più esclusivamente dalla propria struttura di codice. Tuttavia, forse perché è in anticipo sui tempi, Code on Demand ha lottato per l’adozione in quanto le API Web vengono utilizzate in più lingue e la trasmissione del codice solleva domande e preoccupazioni di sicurezza. (Ad esempio, la directory dovrebbe essere scrivibile e il firewall dovrebbe lasciare passare ciò che normalmente può essere contenuto limitato.)
Insieme, questi vincoli costituiscono la teoria del trasferimento di stato rappresentazionale o REST., Come si guarda indietro attraverso questi si può vedere come ogni vincolo successivo si basa sulla parte superiore del precedente, alla fine la creazione di un piuttosto complesso—ma potente e flessibile—interfaccia del programma applicativo. Ma soprattutto, questi vincoli costituiscono un design che funziona in modo simile al modo in cui accediamo alle pagine nei nostri browser sul World Wide Web. Crea un’API che non è dettata dalla sua architettura, ma dalle rappresentazioni che restituisce e un’API che, sebbene architettonicamente apolide, si basa sulla rappresentazione per dettare lo stato dell’applicazione.,
Per ulteriori informazioni sulla progettazione delle API REST, consulta l’eBook REST indisturbato: una guida per progettare l’API perfetta.
Lascia un commento