back to top

SOAP: cos’è e come funziona

SOAP è l’acronimo di Simple Object Access Protocol ed è un protocollo per lo scambio di messaggi tra componenti software (solitamente definiti client e web service) che avviene secondo le regole della sintassi XML. La parola “Object” indica che l’uso del protocollo deve essere fatto secondo il paradigma della programmazione orientata agli oggetti. SOAP permette l’interazione tra diverse piattaforme e linguaggi di programmazione, il che lo rende estremamente versatile e utilizzato in molte applicazioni di rete.

Il protocollo definisce un set di regole che il client deve rispettare per richiedere la risposta al server che ospita ed espone il web service. Attraverso lo scambio di messaggi SOAP definiamo, quindi, delle RPC-Call (Remote Procedure Call), ovvero delle chiamate di procedure remote: in pratica, un componente software locale svolge un’operazione attraverso un’elaborazione compiuta, totalmente o in parte, attraverso l’ausilio di un sistema remoto (il web service). Questo approccio consente di incapsulare logica complessa e servizi in unità riutilizzabili.

Pubblicità

La trasmissione e la negoziazione di questi messaggi XML è regolata secondo i protocolli HTTP o SMTP, all’interno dei quali viene incapsulato il messaggio SOAP. Questo significa che SOAP è altamente interoperabile ed è ampiamente utilizzato in architetture basate su richieste e risposte, come RESTful o microservizi.

Elementi che compongono il framework SOAP

Il framework definito da SOAP è composto dai seguenti elementi:

  • Initial SOAP sender – è il nodo che genera il messaggio;
  • SOAP sender – è il componente incaricato di spedire i messaggi SOAP;
  • SOAP intermediary – è il componente che si occupa di processare l’header del messaggio SOAP, girandolo al corretto receiver;
  • SOAP receiver – è il componente incaricato di ricevere i messaggi SOAP;
  • Ultimate SOAP receiver – è il nodo che riceve il messaggio, ovvero il destinatario.
SOAP Transmission Diagram

Si definisce SOAP message path l’insieme dei nodi attraverso il quale circola il messaggio. L’efficienza di questo percorso gioca un ruolo cruciale nella latenza e nelle prestazioni delle applicazioni che utilizzano SOAP per interagire con i servizi web.

Messaggio SOAP

Un messaggio SOAP è strutturato da un header ed un body. Questi componenti rappresentano la cartella di trasporto del messaggio SOAP e ne definiscono la logica di invio e ricezione.

Il segmento header è facoltativo e contiene meta-informazioni, quali ad esempio il routing, la sicurezza, le transazioni e parametri richiesti da una procedura. La capacità di definire dettagli come la durata della transazione o i requisiti di autenticazione rende il header fondamentale per applicazioni enterprise.

Il segmento body, invece, è obbligatorio e trasporta il contenuto informativo (payload). Questo deve seguire uno schema definito dall’XML Schema, il che fornisce un modo standardizzato per validare i messaggi SOAP prima che vengano elaborati dai server.

SOAP Envelope Structure

Con il termine SOAP Envelope identifichiamo il documento XML che contiene il messaggio SOAP in tutte le sue componenti. Questo “involucro” assicura che i dati siano trasmessi con la corretta formattazione e sintassi XML, permettendo una rivisitazione dei messaggi anche in contesti diversi.

Esempio di scambio messaggi SOAP

Prendiamo in considerazione il servizio TempConvert offerto da w3schools e vediamone la struttura di una richiesta e di una risposta. Questo esempio serve a illustrare la semplicità e la chiarezza del protocollo SOAP quando si comunica con un servizio web.

SOAP request

In questo messaggio SOAP, viene effettuata una richiesta verso la procedura CelsiusToFahrenheit, passando come parametro una temperatura Celsius di tipo stringa. Questo mostra come le chiamate a procedure remote possano essere facilmente implementate attraverso un messaggio strutturato e standardizzato.

<!-- HEADER -->
POST /webservices/tempconvert.asmx HTTP/1.1
Host: www.w3schools.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.w3schools.com/webservices/CelsiusToFahrenheit"

<!-- MESSAGGIO XML BODY -->
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CelsiusToFahrenheit xmlns="http://www.w3schools.com/webservices/">
      <Celsius>25</Celsius>
    </CelsiusToFahrenheit>
  </soap:Body>
</soap:Envelope>

SOAP response

In questo messaggio SOAP, vediamo invece la risposta del server CelsiusToFahrenheitResponse di tipo string, che conterrà il valore passato nella richiesta convertito in Fahrenheit. Questa interazione evidenzia l’affidabilità del protocollo SOAP nel garantire che le risposte siano coerenti e nel formato specificato.

<!-- HEADER -->
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<!-- MESSAGGIO XML BODY -->
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CelsiusToFahrenheitResponse xmlns="http://www.w3schools.com/webservices/">
      <CelsiusToFahrenheitResult>77</CelsiusToFahrenheitResult>
    </CelsiusToFahrenheitResponse>
  </soap:Body>
</soap:Envelope>

Questi esempi semplificano la comprensione di come funziona il protocollo SOAP e mostrano come poter effettuare chiamate a procedure remote con successo. Implementando SOAP nelle proprie applicazioni, gli sviluppatori possono sfruttare la potenza della comunicazione XML e garantire l’integrità dei dati trasmessi.

Altri contenuti interessanti

Pubblicità

Leggi anche...

Vibe Coding: cos’è, come funziona e quali sono i migliori strumenti AI per programmare

Immagina di poter scrivere software senza dover digitare una...

I migliori libri per imparare a programmare in Python

Imparare a programmare in Python è un passo fondamentale...

Il file manifest.json: cos’è e a cosa serve

Il file manifest.json è un componente chiave nelle applicazioni web moderne,...

Java: cos’è e a cosa serve l’operatore modulo (%)

In Java, l'operatore modulo è rappresentato dal simbolo "%"...

Radice quadrata in C: vediamo come calcolarla in diversi modi

La radice quadrata è un'operazione matematica piuttosto comune (in...

Sperimentare la sequenza di Collatz in C++

Vediamo come verificare la congettura di Collatz con C++....
Pubblicità