API e Web Services: il cuore dell'interoperabilità - Da SOAP a REST
Da semplici documenti HTML a piattaforma applicativa distribuita: come le applicazioni imparano a parlarsi tra loro grazie a API, WSDL, SOAP e REST.
1. Introduzione
Il Web nasce come una grande piattaforma per la condivisione di documenti ipertestuali, collegati tra loro tramite parole chiave e link. Fin dalle origini, uno dei suoi punti di forza è stato l’essere indipendente dalla piattaforma hardware e software utilizzata, consentendo l’accesso alle informazioni da sistemi differenti.
Questa universalità è stata resa possibile dalla standardizzazione di alcuni concetti fondamentali. L’identificazione delle risorse avviene tramite URI (Uniform Resource Identifier), la comunicazione tra client e server è regolata dal protocollo HTTP, mentre i contenuti vengono descritti attraverso il linguaggio HTML. L’adozione di questi standard ha permesso al Web di crescere rapidamente e in modo coerente.
Nel 1994, proprio per garantire uno sviluppo ordinato e interoperabile, è nato il World Wide Web Consortium (W3C). Questo organismo internazionale definisce e promuove le cosiddette W3C Recommendations, ovvero standard condivisi che tengono conto delle esigenze di aziende, sviluppatori e istituzioni.
Senza il W3C oggi avremmo 10 Web diversi: quello Microsoft che funziona solo con Explorer, quello Apple solo con Safari... un disastro. Il W3C ha detto: "HTML si scrive così, HTTP funziona così, tutti rispettano le stesse regole". È come il codice della strada: senza semafori e precedenze sarebbe il caos. Quando all'esame vi chiedono cos'è il W3C, non dite solo "consorzio", dite "garante dell'interoperabilità".
2. Il Web come piattaforma applicativa distribuita
Con il passare del tempo, il Web ha superato il ruolo di semplice contenitore di documenti statici. Accanto ai testi sono comparsi contenuti multimediali e, soprattutto, è cresciuta la necessità di interazione tra componenti software. Questo passaggio ha trasformato il Web in una vera piattaforma applicativa distribuita.
L’introduzione di tecnologie lato server come CGI, JSP, PHP e ASP ha segnato una svolta importante. Le pagine Web hanno iniziato a generarsi dinamicamente, adattandosi alle richieste degli utenti e dialogando con database e altri servizi. Da quel momento, il Web non è stato più solo consultazione, ma anche elaborazione e scambio di dati.
1995: apri www.azienda.it e vedi la stessa pagina per tutti, scritta a mano in HTML. 2005: apri Amazon e vedi "Ciao Marco, ti consigliamo questi libri". Quella pagina non esisteva prima che tu la chiedessi, è stata generata al momento da PHP che ha interrogato il database. Siamo passati da volantino a commesso personale. Questo è il salto da documento a applicazione.
3. Le sfide dell’integrazione
La crescita esponenziale del Web ha però portato con sé nuove difficoltà. Le applicazioni, spesso sviluppate in contesti e momenti diversi, non erano progettate per comunicare tra loro. Questo ha creato problemi sia nell’integrazione tra sistemi di aziende differenti, sia all’interno della stessa organizzazione, dove tecnologie eterogenee dovevano convivere.
In questo scenario è emersa la necessità di definire meccanismi standard che permettessero alle applicazioni di dialogare in modo affidabile, indipendentemente dal linguaggio di programmazione, dal sistema operativo o dall’hardware utilizzato.
Avete presente quando l'app della scuola deve parlare con il registro elettronico di Argo e con PagoPA? Sono 3 aziende diverse, con linguaggi diversi, server diversi. Senza Web Service standard, dovrebbero riscrivere tutto da zero. Con le API, Argo espone un endpoint e la scuola lo chiama. È per questo che oggi si parla di "ecosistema" e non più di "programma isolato".
4. Architetture distribuite e l’avvento dei Web Services
Negli anni ’90, con la diffusione delle architetture distribuite, si sono affermate diverse soluzioni per la comunicazione tra sistemi remoti. Tecnologie come CORBA, Java RMI e DCOM hanno rappresentato tentativi importanti, ma presentavano limiti legati alla dipendenza dalla piattaforma o alla complessità dei protocolli utilizzati.
Per superare questi vincoli si è iniziato a guardare al Web stesso come infrastruttura di comunicazione. L’idea è stata quella di sfruttare protocolli già ampiamente diffusi, come HTTP, e formati standard come XML, dando origine ai Web Services, sistemi software progettati per supportare l’interazione tra applicazioni, sfruttando le tecnologie e gli standard del Web.
| Tecnologia anni '90 | Problema | Soluzione Web Service |
|---|---|---|
| CORBA | Complesso, solo OO | HTTP + XML semplici |
| Java RMI | Solo Java | Indipendente dal linguaggio |
| DCOM | Solo Windows | Multipiattaforma |
| Web Service | Usa standard Web esistenti | Funziona ovunque |
5. Le API – Il Cuore dell’Interoperabilità
Cosa sono le API?
Le API, acronimo di Application Programming Interface, rappresentano un insieme di regole che consentono a software differenti di comunicare tra loro. Non si tratta di programmi completi, ma di interfacce che espongono funzionalità e dati, rendendoli accessibili in modo controllato.
Grazie alle API, uno sviluppatore può utilizzare servizi già esistenti senza conoscere i dettagli interni della loro implementazione. Questo approccio favorisce la modularità, riduce i tempi di sviluppo e migliora la manutenibilità delle applicazioni.
Dal punto di vista strutturale, un’API espone uno o più endpoint, ovvero punti di accesso attraverso cui il client invia richieste al server. Ogni richiesta specifica un’azione, generalmente associata a un metodo HTTP come GET, POST, PUT o DELETE, e utilizza formati standard per lo scambio dei dati, come JSON o XML.
API è come il menu del ristorante. Tu non entri in cucina a cucinare, guardi il menu (documentazione API), ordini "Spaghetti n.12" (endpoint), il cuoco cucina e ti porta il piatto (risposta JSON). Non ti interessa come li ha cucinati, ti interessa che siano buoni. Se domani il cuoco cambia ricetta ma il piatto si chiama sempre Spaghetti n.12, a te non cambia nulla. Questa è l'interfaccia.
6. Tipologie di API
Nel Web moderno esistono diverse tipologie di API. Alcune sono pubbliche e accessibili a chiunque, altre sono private e riservate all’uso interno di un’azienda. Vi sono poi API pensate per partner commerciali, API composite che combinano più servizi e API di sistema o di libreria, utilizzate direttamente dagli sviluppatori per interagire con il sistema operativo o con framework software.
Il funzionamento segue sempre il modello client-server: il client invia una richiesta all’API e riceve una risposta strutturata. Un esempio concreto è rappresentato dalle API di Google Maps, che permettono di integrare mappe e funzionalità di navigazione senza dover sviluppare un sistema cartografico da zero.
- API Pubbliche (Open API): accessibili a chiunque, es. Google Maps, OpenWeather, YouTube
- API Private: solo interne all'azienda, es. API tra magazzino e fatturazione
- API Partner: riservate a partner commerciali con chiave API
- API Composite: combinano più servizi in un'unica chiamata
- API di Sistema/Libreria: es. API del filesystem, API di React
Quando aprite un sito che ha la mappa di Google incorporata, quel sito NON ha sviluppato le mappe. Ha chiamato api.maps.google.com con una chiave e ha detto "dammi la mappa di Rozzano". Google risponde con JSON e il sito la disegna. Se quel sito dovesse rifare le mappe da zero ci metterebbe 10 anni e miliardi di euro. Con le API ci mette 5 minuti.
7. I Web Service – Fondamenti e Implicazioni
Un Web Service è un sistema software progettato per consentire l’interazione tra applicazioni attraverso la rete, utilizzando tecnologie e standard del Web. Il suo obiettivo principale è garantire l’interoperabilità tra sistemi eterogenei.
I Web Services non sono pensati per l’interazione diretta con l’utente finale, ma per la comunicazione machine-to-machine. In questo senso, rappresentano un elemento chiave nelle architetture distribuite moderne, dalle applicazioni aziendali alle piattaforme di e-commerce fino ai sistemi IoT.
Le API e i Web Services sono concetti strettamente collegati. Un Web Service può essere visto come una particolare implementazione di un’API che utilizza HTTP e altri standard Web per funzionare su Internet.
Tutti i Web Service sono API, ma non tutte le API sono Web Service. Un'API può essere anche locale (es. API di Windows per aprire un file). Un Web Service è sempre un'API che viaggia su rete HTTP. All'esame dite: "Un Web Service è un'API distribuita su Web".
8. Web Service, SOA, SOAP e REST: modelli architetturali a confronto
Nel definire i Web Service, si è adottato un approccio evolutivo che sfrutta le tecnologie già affermate del Web, in particolare HTTP come protocollo di trasporto delle informazioni. Questa scelta ha consentito di utilizzare l’infrastruttura Internet esistente, riducendo i costi di implementazione e favorendo una rapida diffusione delle soluzioni basate su servizi.
Per la rappresentazione dei dati scambiati tra client e server è stato introdotto XML (eXtensible Markup Language), uno standard indipendente dalla piattaforma, capace di descrivere in modo strutturato e leggibile richieste e risposte. XML ha avuto un ruolo centrale nelle prime implementazioni dei Web Service, garantendo interoperabilità tra sistemi eterogenei.
9. Service Oriented Architecture (SOA)
Questo modello di sviluppo si colloca all’interno di una visione più ampia nota come Service Oriented Architecture (SOA). SOA non è una tecnologia specifica, ma un paradigma architetturale che mira a organizzare il software come un insieme di servizi riutilizzabili e interoperabili. L’obiettivo principale di SOA è quello di ottimizzare i costi di sviluppo, evitando di riscrivere funzionalità già esistenti, valorizzare le tecnologie disponibili attraverso l’integrazione e adattarsi con maggiore flessibilità alle evoluzioni tecnologiche e di mercato.
Dal punto di vista architetturale, SOA introduce alcune caratteristiche fondamentali. In primo luogo, l’accoppiamento lasco (loosely coupled), che consente ai servizi di interagire senza dipendere rigidamente dalle rispettive implementazioni. In secondo luogo, la trasparenza di localizzazione, grazie alla quale il client non deve conoscere i dettagli tecnici o la posizione fisica del servizio. Infine, l’indipendenza dal protocollo e dalla piattaforma, che permette di modificare l’implementazione interna di un servizio senza impatti sull’interfaccia esposta.
All’interno di un’architettura SOA interagiscono tre attori principali. Il Service Provider è l’entità che implementa il servizio e ne pubblica la descrizione. Il Service Registry funge da catalogo, raccogliendo le informazioni sui servizi disponibili e consentendone la scoperta. Il Service Consumer, infine, è l’applicazione che ricerca e utilizza il servizio di cui ha bisogno.
1. Loosely Coupled = accoppiamento lasco: posso cambiare il motore dell'auto senza cambiare il volante, finché l'attacco è uguale. 2. Trasparenza di localizzazione: al client non interessa se il servizio è a Milano o a Tokyo, chiama lo stesso URI. 3. Indipendenza dalla piattaforma: Java può parlare con .NET perché parlano XML/JSON su HTTP. Se dite questi 3 all'orale, avete dimostrato di aver capito SOA.
10. Il ciclo di vita di un Web Service SOAP
Nel modello SOAP, il ciclo di vita di un Web Service segue una sequenza ben definita. In una prima fase, il servizio viene creato e descritto attraverso un documento WSDL (Web Service Description Language), un file XML che specifica in modo formale le operazioni disponibili, i parametri richiesti e i valori restituiti. Questo documento può essere pubblicato in un registro UDDI (Universal Description, Discovery and Integration).
Successivamente, il client può individuare il servizio interrogando il registro oppure accedendo direttamente al WSDL se l’indirizzo del servizio è già noto. Una volta acquisite le specifiche, il client genera uno strato software chiamato stub, che si occupa della comunicazione con lo skeleton lato server. Questi componenti gestiscono automaticamente la conversione dei dati applicativi in messaggi SOAP e viceversa.
La comunicazione SOAP avviene tramite messaggi XML strutturati secondo uno schema preciso. Ogni messaggio è racchiuso in un Envelope, può contenere un Header con informazioni di controllo (ad esempio sicurezza o gestione delle transazioni) e include un Body, che trasporta i dati veri e propri della richiesta o della risposta. L’intero processo è supportato da una pila protocollare composta da UDDI, WSDL, SOAP e XML.
11. REST: un modello più semplice e aderente al Web
Accanto a SOAP si è affermato un secondo modello per la realizzazione dei Web Service: REST (Representational State Transfer). REST propone un approccio più leggero, che rinuncia alla complessità dei messaggi SOAP e all’uso di infrastrutture dedicate come stub e skeleton. Al contrario, REST sfrutta direttamente i meccanismi nativi del Web.
In un’architettura REST, le risorse vengono identificate tramite URI, che rappresentano l’indirizzo logico della risorsa stessa. Le operazioni sulle risorse non sono definite da metodi remoti, ma dall’uso coerente dei metodi HTTP standard, come GET, POST, PUT e DELETE.
Ad esempio, per ottenere l’elenco dei prodotti di un catalogo, è sufficiente inviare una richiesta GET all’URI che rappresenta quella risorsa. Il server associa l’URI a una query sul database e restituisce la rappresentazione richiesta, che può essere in formato HTML, XML o, più comunemente, JSON. In SOAP, lo stesso risultato richiederebbe la costruzione e l’elaborazione di un messaggio XML strutturato secondo regole più complesse.
SOAP: devo spedire una lettera raccomandata con busta, modulo, timbro, ricevuta. Sicurissimo, ma lento e complicato. REST: mando un WhatsApp con "dammi lista prodotti". Velocissimo, leggero, 90% del Web moderno usa REST. SOAP è rimasto solo in banche, assicurazioni e PA dove serve estrema sicurezza e contratti rigidi WSDL.
12. I principi fondamentali dell’architettura REST
L’architettura REST, formalizzata da Roy Fielding nel 2000, si basa su alcuni principi chiave. Le risorse devono essere identificate in modo univoco tramite URI chiari e significativi. I metodi HTTP devono essere utilizzati in modo esplicito e coerente, mappando correttamente le operazioni CRUD. Le risposte devono essere autodescrittive, in modo che il client possa interpretarle senza informazioni aggiuntive. Inoltre, le interazioni devono essere stateless, cioè ogni richiesta deve contenere tutte le informazioni necessarie, senza dipendere da uno stato mantenuto sul server. Infine, REST supporta diversi formati di rappresentazione dei dati, rendendo l’integrazione particolarmente flessibile.
Gli URI REST sono spesso definiti “parlanti” perché descrivono chiaramente la risorsa a cui fanno riferimento, ad esempio un cliente specifico, un prodotto o un insieme filtrato di dati. Questa chiarezza semantica contribuisce alla leggibilità e alla manutenibilità delle applicazioni.
Stateless è la parola magica di REST. Significa che ogni richiesta è indipendente, come se il server avesse amnesia. Non dice "Ah sei tu di prima". Ogni volta gli devi ridire tutto: chi sei (token), cosa vuoi. Sembra inefficiente, ma permette di scalare all'infinito: posso mettere 100 server dietro, ognuno risponde senza dover sincronizzare lo stato con gli altri. Se fosse stateful, tutti i server dovrebbero parlarsi per sapere dove eravate rimasti.
13. REST, CRUD e RESTful API
In REST, le operazioni fondamentali di gestione dei dati (Create, Read, Update, Delete) vengono realizzate attraverso i metodi HTTP. POST viene utilizzato per creare nuove risorse, GET per recuperarle, PUT per aggiornarle e DELETE per eliminarle. È importante sottolineare che l’uso corretto dei metodi HTTP è un requisito essenziale: utilizzare GET per creare una risorsa, ad esempio, viola i principi REST.
Le API che rispettano questi vincoli sono definite RESTful API. Esse devono garantire una chiara separazione tra client e server, comunicazioni stateless, possibilità di caching delle risposte, un’interfaccia uniforme e la possibilità di estendere l’architettura tramite ulteriori livelli applicativi. Grazie a queste caratteristiche, REST è oggi il modello dominante per lo sviluppo di Web Service e API nel Web moderno.
| Operazione CRUD | Metodo HTTP | Esempio | Corretto? |
|---|---|---|---|
| Create | POST | POST /prodotti | ✅ Sì |
| Read | GET | GET /prodotti/123 | ✅ Sì |
| Update | PUT | PUT /prodotti/123 | ✅ Sì |
| Delete | DELETE | DELETE /prodotti/123 | ✅ Sì |
| Create | GET | GET /crea?prodotto=123 | ❌ No, viola REST |
Mai usare GET per creare o cancellare! GET deve essere sicuro e idempotente (puoi chiamarlo 100 volte e non cambia nulla). Se usi GET per cancellare, un crawler di Google che indicizza il sito potrebbe cancellarti tutto il database! È successo davvero in passato.
14. Conclusioni - Fine Modulo 1
La progettazione di un’applicazione Web o di rete richiede una scelta accurata dell’architettura, dei linguaggi e dei protocolli più adatti alle esigenze funzionali e prestazionali. Comprendere il modello client-server, le architetture a livelli e i servizi di rete è fondamentale per sviluppare applicazioni moderne, scalabili, sicure e affidabili.
Con questa lezione abbiamo chiuso il cerchio del Modulo 1: siamo partiti dai sistemi distribuiti, siamo passati per HTTP e i socket, abbiamo visto le Web Application e ora abbiamo capito come le applicazioni parlano tra loro grazie a API e Web Service. Siete pronti per entrare nel vivo della programmazione di rete con Java Socket che vedremo nel Modulo 2.
🎓 Fine Modulo 1 - Cosa sapete fare ora
Ora sapete spiegare la differenza tra API e Web Service, cosa significa SOA, cosa contiene un messaggio SOAP con Envelope/Header/Body, cos'è WSDL e UDDI, e soprattutto perché oggi il 90% del Web usa REST con URI parlanti e metodi CRUD mappati su HTTP. Se sapete disegnare a mano un flusso REST con GET/POST/PUT/DELETE e un flusso SOAP con WSDL, siete già pronti per l'esame di Stato.
