Tutorial sui servizi Web SOAP: cos'è il protocollo SOAP? ESEMPIO

Cos'è il SAPONE?

SOAP è un protocollo basato su XML per l'accesso ai servizi Web tramite HTTP. Ha alcune specifiche che potrebbero essere utilizzate in tutte le applicazioni.

SOAP è noto come Simple Object Access Protocol, ma in seguito è stato semplicemente abbreviato in SOAP v1.2. SOAP è un protocollo o, in altre parole, una definizione di come i servizi Web comunicano tra loro o con le applicazioni client che li richiamano.

SOAP è stato sviluppato come linguaggio intermedio in modo che le applicazioni basate su vari linguaggi di programmazione potessero comunicare facilmente tra loro ed evitare sforzi di sviluppo estremi.

Introduzione al sapone

Nel mondo di oggi esiste un numero enorme di applicazioni basate su diversi linguaggi di programmazione. Ad esempio, potrebbe essere progettata un'applicazione web Java, un altro in .Net e un altro in PHP.

Lo scambio di dati tra applicazioni è cruciale nel mondo in rete di oggi. Ma lo scambio di dati tra queste applicazioni eterogenee sarebbe complesso. Così come lo sarà la complessità del codice per realizzare questo scambio di dati.

Uno dei metodi utilizzati per combattere questa complessità è l'utilizzo di XML (Extensible Markup Language) come linguaggio intermedio per lo scambio di dati tra le applicazioni.

Ogni linguaggio di programmazione può comprendere il linguaggio di markup XML. Pertanto, XML è stato utilizzato come mezzo sottostante per lo scambio di dati.

Ma non esistono specifiche standard sull'uso di XML in tutti i linguaggi di programmazione per lo scambio di dati. È qui che entra in gioco il software SOAP.

SOAP è stato progettato per funzionare con XML su HTTP e avere una sorta di specifica che potrebbe essere utilizzata in tutte le applicazioni. Esamineremo ulteriori dettagli sul protocollo SOAP nei capitoli successivi.

Vantaggi del sapone

SOAP è il protocollo utilizzato per lo scambio di dati tra applicazioni. Di seguito sono riportati alcuni dei motivi per cui viene utilizzato SOAP.

  • Quando si sviluppano servizi Web basati su SOAP, è necessario disporre di un linguaggio che possa essere utilizzato dai servizi Web per comunicare con le applicazioni client. SOAP è il mezzo perfetto sviluppato per raggiungere questo scopo. Questo protocollo è raccomandato anche dal consorzio W3C che è l'organo di governo di tutti gli standard web.
  • SOAP è un protocollo leggero utilizzato per lo scambio di dati tra applicazioni. Nota la parola chiave "leggera.' Poiché la programmazione SOAP è basata sul linguaggio XML, che a sua volta è un linguaggio di scambio dati leggero, quindi SOAP come protocollo rientra anch'esso nella stessa categoria.
  • SOAP è progettato per essere indipendente dalla piattaforma ed è anche progettato per essere indipendente dal sistema operativo. Quindi il protocollo SOAP può funzionare con qualsiasi applicazione basata sul linguaggio di programmazione su entrambi Windows e il Linux piattaforma.
  • Funziona sul protocollo HTTP –SOAP funziona sul protocollo HTTP, che è il protocollo predefinito utilizzato da tutte le applicazioni web. Pertanto, non è necessario alcun tipo di personalizzazione per eseguire i servizi Web basati sul protocollo SOAP per funzionare sul World Wide Web.

Elementi costitutivi del sapone

La specifica SOAP definisce qualcosa noto come "Messaggio SOAP" che è ciò che viene inviato al servizio Web e all'applicazione client.

Il diagramma seguente dell'architettura SOAP mostra i vari elementi costitutivi di un messaggio SOAP.

Elementi costitutivi del sapone
Elementi costitutivi del messaggio SOAP

Il messaggio SOAP non è altro che un semplice documento XML che ha i seguenti componenti.

  • Un elemento Envelope che identifica il documento XML come messaggio SOAP – Questa è la parte contenente il messaggio SOAP e viene utilizzata per incapsulare tutti i dettagli nel messaggio SOAP. Questo è l'elemento radice nel messaggio SOAP.
  • Un elemento Header che contiene informazioni di intestazione – L'elemento header può contenere informazioni quali credenziali di autenticazione che possono essere utilizzate dall'applicazione chiamante. Può anche contenere la definizione di tipi complessi che potrebbero essere utilizzati nel messaggio SOAP. Per impostazione predefinita, il messaggio SOAP può contenere parametri che potrebbero essere di tipi semplici quali stringhe e numeri, ma possono anche essere un tipo di oggetto complesso.

Di seguito è riportato un semplice esempio di servizio SOAP di tipo complesso.

Supponiamo di voler inviare un tipo di dati strutturati che abbia una combinazione di "Nome tutorial" e "Nome tutorial" Descriptione", allora definiremmo il tipo complesso come mostrato di seguito.

Il tipo complesso è definito dal tag dell'elemento Tutti gli elementi richiesti della struttura insieme ai rispettivi tipi di dati vengono quindi definiti nella raccolta di tipi complessi.

<xsd:complexType>     
 <xsd:sequence>       
 	<xsd:element name="Tutorial Name" type="string"/>         
  	<xsd:element name="Tutorial Description"  type="string"/>
  </xsd:sequence>
</xsd:complexType>
  • Un elemento Body che contiene informazioni di chiamata e risposta: questo elemento contiene i dati effettivi che devono essere inviati tra il servizio Web e l'applicazione chiamante. Di seguito è riportato un esempio di servizio Web SOAP del corpo SOAP che funziona effettivamente sul tipo complesso definito nella sezione dell'intestazione. Ecco la risposta del nome del tutorial e del tutorial Description che viene inviato all'applicazione chiamante che chiama questo servizio web.
<soap:Body>
   <GetTutorialInfo>
		<TutorialName>Web Services</TutorialName> 
		<TutorialDescription>All about web services</TutorialDescription> 
   </GetTutorialInfo>
</soap:Body>

Struttura dei messaggi SOAP

Una cosa da notare è che i messaggi SOAP vengono normalmente generati automaticamente dal servizio Web quando viene chiamato.

Ogni volta che un'applicazione client richiama un metodo nel servizio Web, il servizio Web genererà automaticamente un messaggio SOAP che conterrà i dettagli necessari dei dati che saranno inviati dal servizio Web all'applicazione client.

Come discusso nell'argomento precedente di questo tutorial SOAP, un semplice messaggio SOAP ha i seguenti elementi:

  • L'elemento Busta
  • L'elemento di intestazione e
  • L'elemento del corpo
  • L'elemento Fault (facoltativo)

Diamo un'occhiata all'esempio seguente di un semplice messaggio SOAP e vediamo cosa fa effettivamente l'elemento.

Struttura dei messaggi SOAP

Struttura dei messaggi SOAP
  1. Come visto dal messaggio SOAP precedente, la prima parte del messaggio SOAP è l'elemento busta utilizzato per incapsulare l'intero messaggio SOAP.
  2. L'elemento successivo è il corpo SOAP che contiene i dettagli del messaggio vero e proprio.
  3. Il nostro messaggio contiene un servizio web che ha il nome di “Guru99WebService”.
  4. Il “Guru99Webservice” accetta un parametro del tipo 'int' e ha il nome TutorialID.

Ora, il messaggio SOAP precedente verrà passato tra il servizio Web e l'applicazione client.

Puoi vedere quanto siano utili le informazioni di cui sopra per l'applicazione client. Il messaggio SOAP indica all'applicazione client qual è il nome del servizio Web, quali parametri si aspetta e anche qual è il tipo di ciascun parametro utilizzato dal servizio Web.

Elemento busta SOAP

Il primo pezzo dell'elemento costitutivo è la busta SOAP.

La busta SOAP viene utilizzata per incapsulare tutti i dettagli necessari dei messaggi SOAP scambiati tra il servizio Web e l'applicazione client.

L'elemento busta SOAP viene utilizzato per indicare l'inizio e la fine di un messaggio SOAP. Ciò consente all'applicazione client che chiama il servizio Web di sapere quando termina il messaggio SOAP.

Sull'elemento SOAP envelope si possono notare i seguenti punti.

  • Ogni messaggio SOAP deve avere un elemento Envelope root. È assolutamente obbligatorio che il messaggio SOAP abbia un elemento busta.
  • Ogni elemento Envelope deve avere almeno un elemento soap body.
  • Se un elemento Envelope contiene un elemento header, non deve contenerne più di uno e deve apparire come primo figlio dell'Envelope, prima dell'elemento body.
  • La busta cambia quando cambiano le versioni SOAP.
  • Un processore SOAP compatibile con v1.1 genera un errore alla ricezione di un messaggio contenente lo spazio dei nomi della busta v1.2.
  • Un processore SOAP compatibile con v1.2 genera un errore di mancata corrispondenza della versione se riceve un messaggio che non include lo spazio dei nomi della busta v1.2.

Di seguito è riportato un esempio API SOAP della versione 1.2 dell'elemento busta SOAP.

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding">
          <soap:Body>
        <Guru99WebService xmlns="http://tempuri.org/">
                  <TutorialID>int</TutorialID>
                </Guru99WebService>
          </soap:Body>
</SOAP-ENV:Envelope>

Il messaggio di guasto

Quando viene effettuata una richiesta a un servizio Web SOAP, la risposta restituita può essere di 2 forme: una risposta riuscita o una risposta di errore. Quando viene generato un successo, la risposta dal server sarà sempre un messaggio SOAP. Ma se vengono generati errori SOAP, vengono restituiti come errori "HTTP 500".

Il messaggio di errore SOAP è composto dai seguenti elementi.

  1. – Questo è il codice che designa il codice dell'errore. Il codice di errore può essere uno qualsiasi dei valori seguenti
    1. SOAP-ENV:VersionMismatch: si verifica quando viene rilevato uno spazio dei nomi non valido per l'elemento SOAP Envelope.
    2. SOAP-ENV:MustUnderstand – Un elemento figlio immediato dell'elemento Header, con l'attributo mustUnderstand impostato su "1", non è stato compreso.
    3. SOAP-ENV:Client: il messaggio era formato in modo errato o conteneva informazioni errate.
    4. SOAP-ENV:Server: si è verificato un problema con il server, quindi il messaggio non può continuare.
  2. – Questo è il messaggio di testo che fornisce una descrizione dettagliata dell'errore.
  3. (Opzionale)– Si tratta di una stringa di testo che indica chi ha causato l'errore.
  4. (Opzionale) – Questo è l'elemento per i messaggi di errore specifici dell'applicazione. Pertanto l'applicazione potrebbe avere un messaggio di errore specifico per diversi scenari di logica aziendale.

Esempio di messaggio di errore

Di seguito è riportato un esempio di messaggio di errore. L'errore viene generato se lo scenario in cui il client tenta di utilizzare un metodo chiamato TutorialID nella classe GetTutorial.

Il messaggio di errore seguente viene generato nel caso in cui il metodo non esista nella classe definita.

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
      <SOAP-ENV:Body>
         <SOAP-ENV:Fault>
         <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
        <faultstring xsi:type="xsd:string">
            Failed to locate method (GetTutorialID) in class (GetTutorial)
         </faultstring>
    </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Produzione:

Quando esegui il codice sopra, verrà visualizzato l'errore come "Impossibile individuare il metodo (GetTutorialID) nella classe (GetTutorial)"

Modello di comunicazione SOAP

Tutte le comunicazioni tramite SOAP vengono effettuate tramite il protocollo HTTP. Prima di SOAP, molti servizi web utilizzava lo stile RPC (Remote Procedure Call) standard per la comunicazione. Questo era il tipo di comunicazione più semplice, ma presentava molte limitazioni.

Ora in questo tutorial sull'API SOAP, consideriamo il diagramma seguente per vedere come funziona questa comunicazione. In questo esempio, supponiamo che il server ospiti un servizio Web che fornisce 2 metodi come

  • Ottieni dipendente – Questo otterrebbe tutti i dettagli del dipendente
  • Imposta dipendente – Ciò imposterebbe di conseguenza il valore di dettagli quali reparto dei dipendenti, stipendio, ecc.

Nella normale comunicazione in stile RPC, il client chiamerebbe semplicemente i metodi nella sua richiesta e invierebbe i parametri richiesti al server, e il server invierebbe quindi la risposta desiderata.

Modello di comunicazione SOAP

Il modello di comunicazione di cui sopra presenta le gravi limitazioni riportate di seguito

  1. Non indipendente dalla lingua – Il server che ospita i metodi sarebbe in un particolare linguaggio di programmazione e normalmente le chiamate al server sarebbero solo in quel linguaggio di programmazione.
  2. Non il protocollo standard – Quando si effettua una chiamata alla procedura remota, la chiamata non viene effettuata tramite il protocollo standard. Questo era un problema poiché la maggior parte delle comunicazioni sul web dovevano avvenire tramite il protocollo HTTP.
  3. firewall – Poiché le chiamate RPC non passano tramite il protocollo normale, è necessario aprire porte separate sul server per consentire al client di comunicare con il server. Normalmente tutti i firewall bloccavano questo tipo di traffico e generalmente era necessaria molta configurazione per garantire che questo tipo di comunicazione tra il client e il server funzionasse.

Per superare tutte le limitazioni sopra citate, SOAP utilizzerebbe quindi il modello di comunicazione riportato di seguito

Modello di comunicazione SOAP

  1. Il client formatterà le informazioni relative alla chiamata alla procedura e agli eventuali argomenti in un messaggio SOAP e lo invierà al server come parte di una richiesta HTTP. Questo processo di incapsulamento dei dati in un messaggio SOAP era noto come Marshalling.
  2. Il server quindi scarterà il messaggio inviato dal client, vedrà cosa ha richiesto il client e quindi invierà la risposta appropriata al client come messaggio SOAP. La pratica di scartare una richiesta inviata dal client è nota come Demarshalling.

Esempio pratico di SOAP

Ora in questo tutorial di SoapUI, vediamo un esempio pratico di SOAP,

Probabilmente uno dei modi migliori per vedere come vengono generati i messaggi SOAP è vedere effettivamente un servizio web in azione.

Questo argomento esaminerà l'utilizzo di MicrosoftFramework .Net per creare un servizio Web ASMX. Questo tipo di servizio Web supporta sia la versione SOAP 1.1 che la versione 1.2.

I servizi Web ASMX generano automaticamente il file Linguaggio di definizione dei servizi Web (WSDL) documento. Questo documento WSDL è richiesto dall'applicazione client chiamante in modo che l'applicazione sappia cosa è in grado di fare il servizio Web.

Nel nostro esempio creeremo un semplice servizio web, che verrà utilizzato per restituire una stringa all'applicazione che chiama il servizio web.

Questo servizio web sarà ospitato in un file Asp.Net applicazione web. Invocheremo quindi il servizio web e vedremo il risultato restituito dal servizio web.

Visual Studio ci mostrerà anche il messaggio SOAP passato tra il servizio Web e l'applicazione chiamante.

Il primo prerequisito per configurare la nostra applicazione di servizio Web è che possiamo farlo seguendo i passaggi sottostanti.

Per questo esempio, assicurati di avere Visual Studio 2013 installato sul tuo sistema.

Passo 1) Il primo passo è creare un'applicazione Web ASP.Net vuota. Da Visual Studio 2013, clicca sull'opzione di menu File->Nuovo progetto.

Esempio di messaggio SOAP

Una volta cliccato sull'opzione Nuovo progetto, Visual Studio ti darà un'altra finestra di dialogo per scegliere il tipo di progetto e per fornire i dettagli necessari del progetto. Questo è spiegato nel passaggio successivo.

Passo 2) In questa fase,

  1. Assicurati di scegliere prima il C# modello web di applicazione Web ASP.NET. Il progetto deve essere di questo tipo per creare un progetto di servizi SOAP. Scegliendo questa opzione, Visual Studio eseguirà i passaggi necessari per aggiungere i file richiesti da qualsiasi applicazione basata sul Web.
  2. Dai un nome al tuo progetto che nel nostro caso è stato dato come webservice.asmx. Quindi assicurati di fornire una posizione in cui verranno archiviati i file di progetto.

Esempio di messaggio SOAP

Una volta fatto, vedrai il file di progetto creato nel tuo Solution Explorer in Visual Studio 2013.

Esempio di messaggio SOAP

Passo 3) In questa fase,

Aggiungeremo un file di servizio Web al nostro progetto

  1. Innanzitutto fare clic con il pulsante destro del mouse sul file di progetto come mostrato di seguito

Esempio di messaggio SOAP

  1. Dopo aver fatto clic con il pulsante destro del mouse sul file di progetto, hai la possibilità di scegliere l'opzione "Aggiungi->Servizio Web (ASMX) per aggiungere un file di servizio Web. Basta fornire un nome di Servizio Tutorial per il file del nome del servizio web.

Esempio di messaggio SOAP

Passo 4) Aggiungere il seguente codice al file asmx del servizio Tutorial.

Esempio di messaggio SOAP

Spiegazione del codice:

  1. Questa riga di codice fornisce un nome per il file del servizio Web. Questo è un passaggio importante perché consente all'applicazione client di chiamare il servizio Web tramite il nome del servizio Web.
  2. Normalmente un file di classe viene utilizzato per incapsulare la funzionalità di un servizio web. Quindi il file di classe conterrà la definizione di tutti i metodi web che forniranno alcune funzionalità all'applicazione client.
  3. Qui [WebMethod] è noto come un attributo che descrive una funzione. Il passaggio successivo crea una funzione chiamata "Guru99WebService", ma con l'inclusione di questo passaggio di aggiunta di un attributo [WebMethod] si assicura che questo metodo possa essere richiamato da un'applicazione client. Se questo attributo non è presente, il metodo non potrà mai essere chiamato da un'applicazione client.
  4. Qui stiamo definendo una funzione chiamata "Guru99WebService" che verrà utilizzata per restituire una stringa all'applicazione client chiamante. Questa funzione è un servizio Web che può essere richiamato da qualsiasi applicazione client.
  5. Stiamo utilizzando l'istruzione return per restituire la stringa "Questo è un servizio Web Guru99" all'applicazione client.

Se il codice viene eseguito correttamente, quando si esegue il codice nel browser verrà visualizzato il seguente output.

Produzione:

Esempio di messaggio SOAP

  • L'output mostra chiaramente che il nome del nostro servizio web è "Guru99 Web Service", che è il risultato dell'assegnazione di un nome al nostro servizio web.
  • Possiamo anche vedere che possiamo invocare il servizio web. Se facciamo clic sul pulsante Invoca, otterremo la risposta seguente nel browser web.

Esempio di messaggio SOAP

L'output di cui sopra,

  • Mostra chiaramente che invocando il metodo web, viene restituita la stringa "Questo è un servizio Web Guru99".
  • Visual Studio consente inoltre di visualizzare la richiesta e la risposta del messaggio SOAP generato quando viene chiamato il servizio Web sopra indicato.

Di seguito è mostrata la richiesta SOAP che viene generata quando viene chiamato il servizio web.

Esempio di messaggio SOAP

Spiegazione del codice:

  1. La prima parte del messaggio SOAP è l'elemento busta che è ciò che è stato discusso nei capitoli precedenti. Questo è l'elemento di incapsulamento presente in ogni messaggio SOAP.
  2. Il corpo SOAP è l'elemento successivo e contiene i dettagli effettivi del messaggio SOAP.
  3. La terza parte è l'elemento che specifica che vogliamo chiamare il servizio che si chiama 'Guru99WebService.'

Esempio di messaggio SOAP

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
    <soap:Body>
      
        <Guru99WebServiceResponse xmlns="http://tempuri.org/">
          
            <Guru99WebServiceResult>string</Guru99WebServiceResult>
          
        </Guru99WebServiceResponse>
    </soap:Body>
</soap:Envelope>

Spiegazione del codice:

  1. La prima parte del messaggio SOAP è l'elemento busta che è ciò che è stato discusso nei capitoli precedenti. Questo è l'elemento di incapsulamento presente in ogni messaggio SOAP.
  2. Il corpo SOAP è l'elemento successivo e contiene i dettagli effettivi del messaggio SOAP.
  3. La parte interessante che vedrai ora è l'attributo 'string'. Questo dice all'applicazione client che il servizio web chiamato restituisce un oggetto di tipo stringa. Questo è molto utile perché se l'applicazione client altrimenti non saprebbe cosa restituisce il servizio web.

Sommario

  • SOAP è un protocollo utilizzato per scambiare dati tra applicazioni basate su sistemi diversi linguaggi di programmazione.
  • SOAP si basa sulla specifica XML e funziona con il protocollo HTTP. Ciò lo rende perfetto per l'utilizzo all'interno delle applicazioni web.
  • Gli elementi costitutivi SOAP sono costituiti da un messaggio SOAP. Ogni messaggio SOAP è costituito da un elemento busta, un'intestazione e un elemento corpo.
  • L'elemento busta è l'elemento obbligatorio nel messaggio SOAP e viene utilizzato per incapsulare tutti i dati nel messaggio SOAP.
  • L'elemento header può essere utilizzato per contenere informazioni quali dati di autenticazione o la definizione di tipi di dati complessi.
  • L'elemento body è l'elemento principale che contiene la definizione dei metodi web insieme a qualsiasi informazione sui parametri, se richiesta.