Le Application Programming Interfaces, interfacce di programmazione delle applicazioni, dette API, sono un modo in cui i programmi o i servizi informatici comunicano tra loro. Questa comunicazione avviene solitamente tramite un endpoint API, esposto da un programma utilizzato da un client.

Questo articolo mette a confronto due approcci popolari alla creazione di API: le API REST (Representational State Transfer) e le API Web.

Cos’è un’API REST?

Contrariamente a quanto si pensa, l’API REST non è un protocollo. È un’architettura, ed è l’architettura più diffusa per lo sviluppo di API. Come spieghiamo in GraphQL vs REST: Tutto quello che c’è da sapere, REST è stateless, quindi non vengono memorizzati dati o stati tra una richiesta e l’altra.

REST definisce anche diversi vincoli architettonici per la creazione di applicazioni che comunicano tramite HTTP:

  • Architettura client-server
  • Statelessness (assenza di stato)
  • Interfaccia uniforme
  • Cacheabilità
  • Architettura di sistema a strati
  • Code on demand

REST è più facile da usare rispetto ad altri protocolli o architetture API. Inoltre, offre numerosi vantaggi che lo rendono la prima scelta per molti sviluppatori che creano API:

  • Diversi formati di messaggi: Le API REST sono utilizzate principalmente con JSON per la serializzazione dei dati, ma funzionano con diversi formati di messaggio, tra cui JSON, HTTP, testo normale e XML. Questa gamma di opzioni gli conferisce un vantaggio rispetto a protocolli come il Service Object Access Protocol (SOAP) che funzionano principalmente con XML su HTTP; opzioni come JSON sono significativamente più leggere, più flessibili grazie al supporto per gli array e più facili da analizzare rispetto a XML.
  • Metodi HTTP: REST è tipicamente utilizzato con uno dei metodi GET, POST, PATCH, DELETE o PUT per recuperare i dati e fare richieste, a seconda dell’implementazione del servizio. Questi metodi restituiscono i comuni codici HTTP di successo e fallimento. Altri metodi sono OPTIONS, HEAD e TRACE. Questi metodi sono incoerenti tra i vari servizi, in quanto alcuni fornitori potrebbero implementare un solo metodo in base alle proprie esigenze.
  • Architettura Decoupled: REST ha un’architettura client-server, quindi la sua logica è separata dalla presentazione: è possibile lavorare su più parti contemporaneamente senza interferenze.
  • Scalabilità: Le API REST sono semplici e quindi facili da usare. Tuttavia, se c’è bisogno di scalare, è possibile creare nuovi endpoint per incorporare una logica più complessa.
  • Cacheabilità: Sebbene REST sia stateless, la risposta del server sul client può essere memorizzata nella cache per evitare di ripetere richieste ridondanti. La risposta del server di solito fornisce informazioni su come deve essere eseguito il caching: il client deve mettere in cache le richieste per un determinato periodo.
  • Sicurezza: Nella maggior parte dei casi, gli endpoint REST sono esposti tramite endpoint HTTPS, il che garantisce che tutte le comunicazioni API siano protette tramite TLS/SSL. REST supporta anche altri schemi di autorizzazione e autenticazione, come OAuth2 e JSON Web Tokens (JWT).

Cos’è un’API Web?

Un’API Web è semplicemente un’interfaccia per accedere alle risorse del server tramite HTTP. Il termine si riferisce al concetto piuttosto che a una tecnologia specifica: un’API Web può essere realizzata con diversi linguaggi e framework, come Java e ASP.NET. Queste API utilizzano un’interfaccia open-source e sfruttano molte entità client come browser, smartphone, tablet e laptop.

Inoltre, le API Web implementano le specifiche dei protocolli con concetti come caching, versioning e diversi formati di contenuto. Un’API Web può essere o meno un’API REST, a seconda di come viene costruita. Le API Web sono solitamente utilizzate in un sistema distribuito per fornire servizi su diversi dispositivi, come smartphone e laptop, e sono limitate al lato client dell’applicazione web.

Ecco due esempi di API Web molto utilizzate:

  • API di Google: Queste includono le API di YouTube, che permettono agli sviluppatori di incorporare i video di YouTube in applicazioni come i siti web, e le API di Google Maps, che consentono agli sviluppatori di utilizzare o incorporare Google Maps nelle pagine web utilizzando interfacce JavaScript o Flash.
  • API di Twitter: Queste includono l’API di ricerca di Twitter, che fornisce metodi per interagire con la ricerca di Twitter, e l’API REST, che consente di accedere ai dati principali di Twitter.

Un’API Web viene eseguita come un’interazione tra sistemi. Ecco come potrebbero fluire i dati all’interno di un’API:

  1. Il dispositivo client invia richieste al server web.
  2. Il server web riceve la richiesta, la elabora e la rimanda al dispositivo client per l’esecuzione.
  3. L’output viene visualizzato dall’utente.

Le caratteristiche più vantaggiose delle API web includono:

  • Architettura leggera: Le API Web eccellono nei dispositivi con larghezza di banda limitata, come gli smartphone.
  • Header dei messaggi descrittivi: Le API Web hanno degli header dei messaggi descrittivi, che possono contenere informazioni sul tipo di contenuto, sullo schema di sicurezza o sulla gestione della cache.
  • Supportano tutti i tipi di dati: Il corpo di un’API Web può essere utilizzato per qualsiasi cosa, compresi i file binari (video, immagini, documenti), XML, JSON e HTML.
  • Servizio orientato alle risorse: Un’API Web può esporre risorse in modo conforme all’architettura REST.
  • Facilità di configurazione e installazione: Le API Web sono facili da configurare ed eseguire.

API Web vs API REST

Confrontiamo queste due API in modo più dettagliato.

Similitudini nell’architettura

Le API Web e REST presentano alcune somiglianze architettoniche: vediamole.

  • Statelessness (assenza di stato): Le richieste HTTP avvengono in modo isolato e sono fondamentalmente stateless, in quanto ogni richiesta contiene informazioni sufficienti per essere completata. Le richieste multiple sono associate tra loro solo attraverso informazioni condivise, come i cookie o un ID di sessione. L’assenza di sincronizzazione dello stato riduce la complessità e aumenta le prestazioni perché il server non deve tenere traccia delle richieste dei clienti. Inoltre, le richieste concorrenti possono essere scalate su più server.
  • Architettura a strati: Entrambe supportano un’architettura a strati in cui la distribuzione delle API, l’autenticazione delle richieste e l’archiviazione possono avvenire su più server.
  • Servizio orientato alle risorse: Nelle architetture orientate alle risorse, le risorse sono mappate su URI (Uniform Resource Identifier). Sia le API Web che quelle REST sono orientate alle risorse in quanto le espongono tramite URI.
  • Cacheability: Nelle API REST e Web, le query che restituiscono le stesse informazioni ogni volta che vengono chiamate vengono memorizzate nella cache. Ad esempio, una chiamata OPTION su un endpoint viene memorizzata nella cache perché l’output è lo stesso indipendentemente dal numero di volte in cui viene chiamata. Questa proprietà, nota come idempotenza, è una buona base per determinare quando i dati possono essere messi in cache. L’idempotenza è sempre considerata in REST, anche se non altrettanto nelle API Web. Una chiamata API idempotente è una chiamata i cui risultati non cambieranno mai, indipendentemente dal numero di volte in cui viene chiamata, anche se è possibile che qualcosa cambi sul server. Esempi di metodi idempotenti sono GET, HEAD e OPTIONS.

Differenze di architettura

Sebbene le API Web e le API REST abbiano modelli architettonici simili, presentano anche alcune differenze fondamentali.

  • Coordinamento tra client e server: Le API REST hanno un’architettura non vincolata, che consente lo sviluppo indipendente sul lato client e server. Con le API Web, le modifiche tra client e server sono coordinate in modo più preciso.
  • Interfaccia: A seconda dei dettagli dell’implementazione, le API REST tendono a utilizzare interfacce standard del settore. Le API web utilizzano interfacce personalizzate, a seconda del fornitore dell’API.

Comunicazione

Le API Web sono abbastanza flessibili da poter sfruttare qualsiasi stile di comunicazione, mentre le API REST sono utilizzate principalmente con JSON, XML e testo semplice. Ciò significa che le API REST funzionano bene per la trasmissione di dati testuali, come le operazioni di creazione, lettura, aggiornamento e cancellazione (CRUD) di un database, ma sono più restrittive quando si tratta di dati binari.

Le API Web offrono un’esperienza migliore per i servizi che richiedono dati binari, come i servizi di streaming video o musicale, poiché supportano un maggior numero di formati di messaggi.

Casi d’uso

Sebbene questi formati API siano intercambiabili in molti casi, ci sono alcuni scenari in cui uno è migliore dell’altro:

  • Servizi e applicazioni cloud: Grazie alla loro natura stateless, le API REST sono utilizzate nei servizi cloud, in quanto i componenti stateless possono essere scalati e riallocati per adattarsi ai cambiamenti. I servizi e le metriche del cloud sono di solito esposti al meglio come API REST perché non c’è bisogno di codice personalizzato.
  • Servizi di streaming: Le API Web hanno un supporto migliore e un basso overhead per i dati binari delle applicazioni su dispositivi con memoria o larghezza di banda limitate, quindi sono le migliori per i servizi che richiedono lo streaming.
  • Manipolazione del database (CRUD): È più semplice e facile esporre le funzionalità CRUD su un’API REST che su un’API Web.

Le API REST sono difficili da gestire per le richieste complesse che devono accedere a risorse non organizzate in una semplice gerarchia. La gestione di questo tipo di situazioni implica la manipolazione dei percorsi URI, dei parametri di query e del corpo della richiesta, il che vanifica lo scopo di REST. In questo caso, è preferibile l’uso di un’API Web perché consente la personalizzazione e ha un ampio supporto per le intestazioni delle risposte e delle richieste URI.

Grazie al supporto di tecniche come le chiamate asincrone, che non sono facilmente implementabili con l’architettura REST, le API Web sono la soluzione migliore per le esigenze API complesse.

Riepilogo

Le API Web e REST sono utilizzate per creare applicazioni che forniscono risorse e comunicano tramite HTTP. Mentre REST descrive vincoli architettonici in un’interfaccia uniforme, le API Web sono generalmente un concetto che può essere RESTful, a seconda dell’implementazione.

Sia le API Web che quelle REST sono formati leggeri e intercambiabili in molte situazioni. Tuttavia, rispetto alle API REST, le API Web offrono un’esperienza più personalizzata e il supporto di un maggior numero di tipi di messaggi, oltre a supportare interazioni complesse tra server e client con dati binari.

Inoltre, grazie ai servizi di Hosting di Applicazioni di Kinsta, è possibile costruire, testare e inviare i propri progetti API nel cloud in modo più rapido ed efficiente.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.