Tutorial privind serviciile web SOAP: Ce este protocolul SOAP? EXEMPLU

Ce este SAPUNUL?

SOAP este un protocol bazat pe XML pentru accesarea serviciilor web prin HTTP. Are anumite specificații care ar putea fi utilizate în toate aplicațiile.

SOAP este cunoscut sub numele de Protocolul de acces simplu la obiect, dar mai târziu a fost doar scurtat la SOAP v1.2. SOAP este un protocol sau, cu alte cuvinte, este o definiție a modului în care serviciile web vorbesc între ele sau vorbesc cu aplicațiile client care le invocă.

SOAP a fost dezvoltat ca un limbaj intermediar, astfel încât aplicațiile construite pe diferite limbaje de programare să poată vorbi cu ușurință între ele și să evite efortul extrem de dezvoltare.

SOAP Introducere

În lumea de astăzi, există un număr mare de aplicații care sunt construite pe diferite limbaje de programare. De exemplu, ar putea exista o aplicație web proiectată în Java, altul în .Net și altul în PHP.

Schimbul de date între aplicații este crucial în lumea în rețea de astăzi. Dar schimbul de date între aceste aplicații eterogene ar fi complex. La fel va fi și complexitatea codului pentru a realiza acest schimb de date.

Una dintre metodele folosite pentru a combate această complexitate este utilizarea XML (Extensible Markup Language) ca limbaj intermediar pentru schimbul de date între aplicații.

Fiecare limbaj de programare poate înțelege limbajul de marcare XML. Prin urmare, XML a fost folosit ca mediu de bază pentru schimbul de date.

Dar nu există specificații standard privind utilizarea XML în toate limbajele de programare pentru schimbul de date. Aici intervine software-ul SOAP.

SOAP a fost proiectat să funcționeze cu XML prin HTTP și să aibă un fel de specificație care ar putea fi utilizată în toate aplicațiile. Vom analiza mai multe detalii despre protocolul SOAP în capitolele următoare.

Avantajele SOAP

SOAP este protocolul folosit pentru schimbul de date între aplicații. Mai jos sunt câteva dintre motivele pentru care este utilizat SOAP.

  • Când dezvoltați servicii web bazate pe SOAP, trebuie să aveți o parte din limbaj care poate fi folosit pentru serviciile web pentru a vorbi cu aplicațiile client. SAPUNUL este mediul perfect care a fost dezvoltat pentru a atinge acest scop. Acest protocol este recomandat și de consorțiul W3C, care este organismul de conducere pentru toate standardele web.
  • SOAP este un protocol ușor care este utilizat pentru schimbul de date între aplicații. Notați cuvântul cheie 'ușoară.' Deoarece programarea SOAP se bazează pe limbajul XML, care în sine este un limbaj ușor de schimb de date, deci SOAP ca protocol care se încadrează, de asemenea, în aceeași categorie.
  • SOAP este conceput pentru a fi independent de platformă și este, de asemenea, conceput pentru a fi independent de sistemul de operare. Deci, protocolul SOAP poate funcționa orice aplicație bazată pe limbaj de programare pe ambele Windows si Linux platformă.
  • Funcționează pe protocolul HTTP – SOAP funcționează pe protocolul HTTP, care este protocolul implicit utilizat de toate aplicațiile web. Prin urmare, nu există niciun fel de personalizare care este necesară pentru a rula serviciile web construite pe protocolul SOAP pentru a funcționa pe World Wide Web.

Blocuri de construcție SOAP

Specificația SOAP definește ceva cunoscut sub numele de „mesaj SOAP” care este ceea ce este trimis către serviciul web și aplicația client.

Diagrama de mai jos a arhitecturii SOAP arată diferitele blocuri ale unui mesaj SOAP.

Blocuri de construcție SOAP
Blocuri de construcție pentru mesaje SOAP

Mesajul SOAP nu este altceva decât un simplu document XML care are componentele de mai jos.

  • Un element Plic care identifică documentul XML ca un mesaj SOAP – Aceasta este partea care conține mesajul SOAP și este folosit pentru a încapsula toate detaliile din mesajul SOAP. Acesta este elementul rădăcină din mesajul SOAP.
  • Un element Header care conține informații despre antet – Elementul antet poate conține informații precum acreditările de autentificare care pot fi utilizate de aplicația care apelează. De asemenea, poate conține definiția tipurilor complexe care ar putea fi utilizate în mesajul SOAP. În mod implicit, mesajul SOAP poate conține parametri care ar putea fi de tipuri simple, cum ar fi șiruri și numere, dar poate fi și un tip de obiect complex.

Un exemplu simplu de serviciu SOAP de tip complex este prezentat mai jos.

Să presupunem că dorim să trimitem un tip de date structurate care să aibă o combinație de „Nume tutorial” și „Tutorial Description”, atunci vom defini tipul complex așa cum se arată mai jos.

Tipul complex este definit de eticheta elementului . Toate elementele necesare ale structurii împreună cu tipurile lor de date respective sunt apoi definite în colecția de tipuri complexe.

<xsd:complexType>     
 <xsd:sequence>       
 	<xsd:element name="Tutorial Name" type="string"/>         
  	<xsd:element name="Tutorial Description"  type="string"/>
  </xsd:sequence>
</xsd:complexType>
  • Un element Body care conține informații despre apel și răspuns – Acest element este ceea ce conține datele reale care trebuie trimise între serviciul web și aplicația de apelare. Mai jos este un exemplu de serviciu web SOAP al corpului SOAP care funcționează de fapt pe tipul complex definit în secțiunea antet. Iată răspunsul Tutorial Name și Tutorial Description care este trimis către aplicația de apelare care apelează acest serviciu web.
<soap:Body>
   <GetTutorialInfo>
		<TutorialName>Web Services</TutorialName> 
		<TutorialDescription>All about web services</TutorialDescription> 
   </GetTutorialInfo>
</soap:Body>

Structura mesajelor SOAP

Un lucru de remarcat este că mesajele SOAP sunt în mod normal generate automat de serviciul web atunci când este apelat.

Ori de câte ori o aplicație client apelează o metodă în serviciul web, serviciul web va genera automat un mesaj SOAP care va avea detaliile necesare ale datelor care vor fi trimise de la serviciul web către aplicația client.

După cum sa discutat în subiectul anterior al acestui tutorial SOAP, un mesaj SOAP simplu are următoarele elemente:

  • Elementul Plic
  • Elementul antet și
  • Elementul corpului
  • Elementul de eroare (Opțional)

Să ne uităm la un exemplu de mai jos al unui mesaj SOAP simplu și să vedem ce element face de fapt.

Structura mesajelor SOAP

Structura mesajelor SOAP
  1. După cum se vede din mesajul SOAP de mai sus, prima parte a mesajului SOAP este elementul plic care este folosit pentru a încapsula întregul mesaj SOAP.
  2. Următorul element este corpul SOAP care conține detaliile mesajului real.
  3. Mesajul nostru conține un serviciu web care are numele „Guru99WebService”.
  4. „Guru99Webservice” acceptă un parametru de tipul „int” și are numele de TutorialID.

Acum, mesajul SOAP de mai sus va fi transmis între serviciul web și aplicația client.

Puteți vedea cât de utile sunt informațiile de mai sus pentru aplicația client. Mesajul SOAP spune aplicației client care este numele serviciului web și, de asemenea, ce parametri se așteaptă și care este tipul fiecărui parametru care este preluat de serviciul web.

Element plic SOAP

Primul bit al blocului de construcție este plicul SOAP.

Plicul SOAP este folosit pentru a încapsula toate detaliile necesare ale mesajelor SOAP, care sunt schimbate între serviciul web și aplicația client.

Elementul plic SOAP este folosit pentru a indica începutul și sfârșitul unui mesaj SOAP. Acest lucru permite aplicației client care apelează serviciul web să știe când se termină mesajul SOAP.

Următoarele puncte pot fi notate pe elementul plic SOAP.

  • Fiecare mesaj SOAP trebuie să aibă un element Envelope rădăcină. Este absolut obligatoriu ca mesajul SOAP să aibă un element plic.
  • Fiecare element Plic trebuie să aibă cel puțin un element de corp de săpun.
  • Dacă un element Envelope conține un element antet, acesta trebuie să conțină cel mult unul și trebuie să apară ca primul copil al Plicului, înaintea elementului body.
  • Plicul se schimbă când versiunile SOAP se schimbă.
  • Un procesor SOAP compatibil cu v1.1 generează o eroare la primirea unui mesaj care conține spațiul de nume plic v1.2.
  • Un procesor SOAP compatibil cu v1.2 generează o eroare Version Mismatch dacă primește un mesaj care nu include spațiul de nume al plicului v1.2.

Mai jos este un exemplu de API SOAP al versiunii 1.2 a elementului plic 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>

Mesajul de eroare

Când se face o solicitare către un serviciu web SOAP, răspunsul returnat poate fi fie de 2 forme, care sunt un răspuns de succes sau un răspuns de eroare. Când se generează un succes, răspunsul de la server va fi întotdeauna un mesaj SOAP. Dar dacă sunt generate erori SOAP, acestea sunt returnate ca erori „HTTP 500”.

Mesajul SOAP Fault constă din următoarele elemente.

  1. – Acesta este codul care desemnează codul erorii. Codul de eroare poate fi oricare dintre valorile de mai jos
    1. SOAP-ENV:VersionMismatch – Acesta este momentul în care este întâlnit un spațiu de nume nevalid pentru elementul SOAP Envelope.
    2. SOAP-ENV:MustUnderstand – Un element copil imediat al elementului Header, cu atributul mustUnderstand setat la „1”, nu a fost înțeles.
    3. SOAP-ENV:Client – ​​Mesajul a fost format incorect sau conținea informații incorecte.
    4. SOAP-ENV:Server – A apărut o problemă cu serverul, așa că mesajul nu a putut continua.
  2. – Acesta este mesajul text care oferă o descriere detaliată a erorii.
  3. (Opțional)– Acesta este un șir de text care indică cine a cauzat defecțiunea.
  4. (Opțional) – Acesta este elementul pentru mesajele de eroare specifice aplicației. Deci, aplicația ar putea avea un mesaj de eroare specific pentru diferite scenarii logice de afaceri.

Exemplu pentru mesajul de eroare

Un exemplu de mesaj de eroare este dat mai jos. Eroarea este generată dacă scenariul în care clientul încearcă să folosească o metodă numită TutorialID în clasa GetTutorial.

Mesajul de eroare de mai jos este generat în cazul în care metoda nu există în clasa definită.

<?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>

ieșire:

Când executați codul de mai sus, va afișa o eroare precum „Eșuat la localizarea metodei (GetTutorialID) în clasă (GetTutorial)”

Modelul de comunicare SOAP

Toată comunicarea prin SOAP se face prin protocolul HTTP. Înainte de SOAP, o mulțime de servicii web a folosit stilul standard RPC (Remote Procedure Call) pentru comunicare. Acesta era cel mai simplu tip de comunicare, dar avea multe limitări.

Acum, în acest tutorial SOAP API, să luăm în considerare diagrama de mai jos pentru a vedea cum funcționează această comunicare. În acest exemplu, să presupunem că serverul găzduiește un serviciu web care a furnizat 2 metode ca

  • GetEmployee – Acest lucru ar obține toate detaliile angajaților
  • SetEmployee – Aceasta ar stabili valoarea detaliilor precum departamentul angajaților, salariul etc. în consecință.

În comunicarea normală în stil RPC, clientul ar apela doar metodele din cererea sa și ar trimite parametrii necesari către server, iar serverul ar trimite apoi răspunsul dorit.

Modelul de comunicare SOAP

Modelul de comunicare de mai sus are limitele serioase de mai jos

  1. Nu independent de limbă – Serverul care găzduiește metodele ar fi într-un anumit limbaj de programare și, în mod normal, apelurile către server ar fi doar în acel limbaj de programare.
  2. Nu protocolul standard – Când se efectuează un apel către procedura de la distanță, apelul nu este efectuat prin protocolul standard. Aceasta a fost o problemă, deoarece în mare parte toate comunicările pe web trebuiau făcute prin protocolul HTTP.
  3. firewall-uri – Deoarece apelurile RPC nu trec prin protocolul normal, porturile separate trebuie să fie deschise pe server pentru a permite clientului să comunice cu serverul. În mod normal, toate firewall-urile ar bloca acest tip de trafic și, în general, era necesară o mulțime de configurații pentru a se asigura că acest tip de comunicare între client și server va funcționa.

Pentru a depăși toate limitările menționate mai sus, SOAP ar folosi modelul de comunicare de mai jos

Modelul de comunicare SOAP

  1. Clientul ar formata informațiile referitoare la apelul procedurii și orice argument într-un mesaj SOAP și le trimite serverului ca parte a unei cereri HTTP. Acest proces de încapsulare a datelor într-un mesaj SOAP era cunoscut ca Marshalling.
  2. Serverul ar despacheta apoi mesajul trimis de client, va vedea ce a cerut clientul și apoi trimitea răspunsul corespunzător înapoi clientului ca mesaj SOAP. Practica de a despacheta o solicitare trimisa de client este cunoscuta ca Demarshaling.

Exemplu practic de SAPUN

Acum, în acest tutorial SoapUI, să vedem un exemplu practic de SOAP,

Probabil că una dintre cele mai bune modalități de a vedea cum sunt generate mesajele SOAP este de a vedea de fapt un serviciu web în acțiune.

Acest subiect va analiza utilizarea Microsoft.Net framework pentru a construi un serviciu web ASMX. Acest tip de serviciu web acceptă atât versiunea SOAP 1.1, cât și versiunea 1.2.

Serviciile web ASMX generează automat Limbajul de definire a serviciului web (WSDL) document. Acest document WSDL este solicitat de aplicația client care apelează, astfel încât aplicația să știe ce este capabil să facă serviciul web.

În exemplul nostru, vom crea un serviciu web simplu, care va fi folosit pentru a returna un șir aplicației care apelează serviciul web.

Acest serviciu web va fi găzduit într-un Asp.Net aplicatie web. Apoi vom invoca serviciul web și vom vedea rezultatul care este returnat de serviciul web.

Visual Studio ne va arăta, de asemenea, ce mesaj SOAP este transmis între serviciul web și aplicația de apelare.

Prima condiție prealabilă pentru a configura aplicația noastră de servicii web, care poate fi făcută urmând pașii de mai jos.

Vă rugăm să vă asigurați că aveți Visual Studio 2013 instalat pe sistemul dvs. pentru acest exemplu.

Pas 1) Primul pas este să creați o aplicație web ASP.Net goală. Din Visual Studio 2013, faceți clic pe opțiunea de meniu Fișier->Proiect nou.

Exemplu de mesaj SOAP

Odată ce faceți clic pe opțiunea Proiect nou, Visual Studio vă va oferi apoi o altă casetă de dialog pentru a alege tipul de proiect și pentru a oferi detaliile necesare ale proiectului. Acest lucru este explicat în pasul următor.

Pas 2) În această etapă,

  1. Asigurați-vă că alegeți mai întâi C# șablon web al aplicației web ASP.NET. Proiectul trebuie să fie de acest tip pentru a crea un proiect de servicii SOAP. Alegând această opțiune, Visual Studio va efectua apoi pașii necesari pentru a adăuga fișierele necesare care sunt solicitate de orice aplicație bazată pe web.
  2. Dați un nume pentru proiectul dvs. care, în cazul nostru, a fost dat ca webservice.asmx. Apoi asigurați-vă că oferiți o locație în care vor fi stocate fișierele de proiect.

Exemplu de mesaj SOAP

Odată terminat, veți vedea fișierul de proiect creat în exploratorul de soluții în Visual Studio 2013.

Exemplu de mesaj SOAP

Pas 3) În această etapă,

Vom adăuga un fișier serviciu web la proiectul nostru

  1. Mai întâi faceți clic dreapta pe fișierul de proiect, așa cum se arată mai jos

Exemplu de mesaj SOAP

  1. Odată ce faceți clic dreapta pe fișierul de proiect, aveți șansa de a alege opțiunea „Add->Web Service(ASMX) pentru a adăuga un fișier de serviciu web. Doar furnizați un nume de Serviciu de tutorial pentru fișierul cu numele serviciului web.

Exemplu de mesaj SOAP

Pas 4) Adăugați următorul cod în fișierul asmx al serviciului de instruire.

Exemplu de mesaj SOAP

Explicația codului:

  1. Această linie de cod oferă un nume pentru fișierul serviciului dvs. web. Acesta este un pas important, deoarece permite aplicației client să apeleze serviciul web prin numele serviciului web.
  2. În mod normal, un fișier de clasă este utilizat pentru a încapsula funcționalitatea unui serviciu web. Deci fișierul de clasă va avea definiția tuturor metodelor web care vor oferi anumite funcționalități aplicației client.
  3. Aici [WebMethod] este cunoscut ca un atribut care descrie o funcție. Pasul următor creează o funcție numită „Guru99WebService”, dar prin includerea acestui pas de adăugare a unui atribut [WebMethod] se asigură că această metodă poate fi invocată de o aplicație client. Dacă acest atribut nu este în vigoare, atunci metoda nu poate fi apelată niciodată de o aplicație client.
  4. Aici definim o funcție numită „Guru99WebService” care va fi folosită pentru a returna un șir aplicației client care apelează. Această funcție este un serviciu web care poate fi apelat de orice aplicație client.
  5. Folosim instrucțiunea return pentru a returna șirul „Acesta este un serviciu web Guru99” la aplicația client.

Dacă codul este executat cu succes, următoarea ieșire va fi afișată atunci când rulați codul în browser.

ieșire:

Exemplu de mesaj SOAP

  • Rezultatul arată clar că numele serviciului nostru web este „Serviciul web Guru99”, care este rezultatul acordării unui nume serviciului nostru web.
  • De asemenea, putem vedea că putem invoca serviciul web. Dacă facem clic pe butonul Invoke, vom primi răspunsul de mai jos în browserul web.

Exemplu de mesaj SOAP

Ieșirea de mai sus,

  • Arată clar că, prin invocarea metodei web, este returnat șirul „Acesta este un serviciu web Guru99”.
  • De asemenea, Visual Studio vă permite să vizualizați solicitarea mesajului SOAP și răspunsul care este generat atunci când este apelat serviciul web de mai sus.

Solicitarea SOAP care este generată atunci când este apelat serviciul web este prezentată mai jos.

Exemplu de mesaj SOAP

Explicația codului:

  1. Prima parte a mesajului SOAP este elementul plic care este ceea ce a fost discutat în capitolele anterioare. Acesta este elementul de încapsulare care este prezent în fiecare mesaj SOAP.
  2. Corpul SOAP este următorul element și conține detaliile reale ale mesajului SOAP.
  3. A treia parte este elementul care specifică că vrem să apelăm serviciul care se numește „Guru99WebService”.

Exemplu de mesaj 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>

Explicația codului:

  1. Prima parte a mesajului SOAP este elementul plic care este ceea ce a fost discutat în capitolele anterioare. Acesta este elementul de încapsulare care este prezent în fiecare mesaj SOAP.
  2. Corpul SOAP este următorul element și conține detaliile reale ale mesajului SOAP.
  3. Partea interesantă pe care o veți vedea acum este atributul „șir”. Aceasta îi spune aplicației client că serviciul web apelat returnează un obiect de tip șir. Acest lucru este foarte util deoarece dacă aplicația client care altfel nu ar ști ce returnează serviciul web.

Rezumat

  • SOAP este un protocol care este folosit pentru a schimba date între aplicații care sunt construite pe diferite limbaje de programare.
  • SOAP este construit pe specificația XML și funcționează cu protocolul HTTP. Acest lucru îl face perfect pentru utilizare în cadrul aplicațiilor web.
  • Blocurile SOAP constau dintr-un mesaj SOAP. Fiecare mesaj SOAP constă dintr-un element plic, un antet și un element body.
  • Elementul plic este elementul obligatoriu din mesajul SOAP și este utilizat pentru a încapsula toate datele din mesajul SOAP.
  • Elementul antet poate fi folosit pentru a conține informații precum informații de autentificare sau definirea unor tipuri de date complexe.
  • Elementul body este elementul principal care conține definiția metodelor web împreună cu orice informații despre parametri, dacă este necesar.