Tutorial Servicii Web SOAP: Ce este protocolul SOAP?

⚡ Rezumat inteligent

SOAP (Simple Object Access Protocol) este un protocol bazat pe XML pentru accesarea serviciilor web prin HTTP. Această resursă explică elementele constitutive SOAP, structura mesajelor, elementele de anvelopă și de eroare, modelul de comunicare și un exemplu practic de serviciu web ASMX.

  • 📦 Protocol de bază: SOAP este un protocol de mesagerie bazat pe XML, independent de transport, care permite aplicațiilor construite în diferite limbaje să schimbe date prin HTTP.
  • 🧱 Blocuri de construcții: Un mesaj SOAP constă dintr-un plic, un antet opțional, un corp și un element opțional de tip Fault.
  • ✉️ Elementul plicului: Plicul rădăcină obligatoriu încapsulează mesajul și semnalează începutul și sfârșitul acestuia aplicației client.
  • 🔁 Model de comunicare: Clientul marshaling o cerere într-un mesaj SOAP; serverul o demarshalingează și returnează un răspuns SOAP, totul prin HTTP.
  • 🛠️ Exemplu practic: Un serviciu web ASMX din Visual Studio generează automat mesajele de cerere și răspuns SOAP pentru clientul apelant.

Ce este protocolul SOAP

Ce este SAPUNUL?

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

SOAP este cunoscut sub numele de Simple Object Access Protocol (Protocol simplu de acces la obiecte), dar ulterior a fost prescurtat la SOAP v1.2. SOAP este un protocol sau, cu alte cuvinte, este o definiție a modului în care serviciile web comunică între ele sau 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 imens de aplicații 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.

Însă 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 se dezvoltăping Pentru serviciile web bazate pe SOAP, este nevoie de un limbaj care poate fi utilizat de serviciile web pentru a comunica cu aplicațiile client. SOAP este mediul perfect, 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ăÎntrucât programarea SOAP se bazează pe limbajul XML, care în sine este un limbaj ușor de schimb de date, prin urmare, și SOAP ca protocol se încadrează în aceeași categorie.
  • SOAP este conceput să fie independent de platformă și, de asemenea, să fie independent de sistemul de operare. Astfel, protocolul SOAP poate funcționa cu orice aplicații bazate pe limbaj de programare, atât pe Windows și Linux platforme.
  • Funcționează pe protocolul HTTP – SOAP funcționează pe protocolul HTTP, care este protocolul implicit utilizat de toate aplicațiile web. Prin urmare, nu este necesară nicio personalizare 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 trimis serviciului web și aplicației client.”

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

Blocuri de construcție SOAP

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

  • An Plic element care identifică documentul XML ca mesaj SOAP – Aceasta este partea care conține mesajul SOAP și este utilizată pentru a încapsula toate detaliile din mesajul SOAP. Acesta este elementul rădăcină din mesajul SOAP.
  • A Antet element care conține informații din antet – Elementul antet poate conține informații precum acreditările de autentificare, care pot fi utilizate de aplicația apelantă. 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 pot fi de tipuri simple, cum ar fi șiruri de caractere și numere, dar pot 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 structurat care are o combinație între „Nume Tutorial” și „Nume Tutorial”. Description”, atunci am 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>

A Corp magazin mobil element care conține informații despre apel și răspuns – Acest element conține datele efective care trebuie trimise între serviciul web și aplicația apelantă. Mai jos este un exemplu de serviciu web SOAP al corpului SOAP care funcționează efectiv pe tipul complex definit în secțiunea antetului. Iată răspunsul la Numele tutorialului și la 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.

Așa cum s-a 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ă luăm mai jos un exemplu de mesaj SOAP simplu și să vedem ce face de fapt fiecare element.

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 numit „Guru„99WebService”.
  4. "Guru„99Webservice” acceptă un parametru de tipul „int” și are numele 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 îi spune aplicației client numele serviciului web, parametrii pe care îi așteaptă și tipul fiecărui parametru 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 rădăcină Envelope. Este absolut obligatoriu ca un mesaj SOAP să aibă un element envelope.
  • 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 pentru versiunea 1.2 a elementului SOAP envelope.

<?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 cerere către un serviciu web SOAP, răspunsul returnat poate fi de două forme: 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ă se generează erori SOAP, acestea sunt returnate ca erori „HTTP 500”.

Mesajul SOAP Fault constă din următoarele elemente.

  1. <faultCode> – Acesta este codul care desemnează codul erorii. Codul de eroare poate avea 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 prezentat mai jos. Eroarea este generată în scenariul în care clientul încearcă să utilizeze o metodă numită TutorialID din 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 eroarea de genul „Eșuat la localizarea metodei (GetTutorialID) în clasa (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 oferă 2 metode, și anume:

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

Î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.

Model de comunicare SOAP în stil RPC

Modelul de comunicare menționat mai sus are următoarele limitări serioase:

  1. Nu independent de limbă – Serverul care găzduiește metodele ar fi într-un anumit limbaj de programare, iar în mod normal apelurile către server s-ar face 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 utiliza apoi modelul de comunicare de mai jos.

Modelul de comunicare SOAP Stilul SOAP

  1. Clientul ar formata informațiile referitoare la apelul procedurii și orice argumente într-un mesaj SOAP și le-ar trimite serverului ca parte a unei cereri HTTP. Acest proces de încapsulare a datelor într-un mesaj SOAP era cunoscut sub numele de Marshalling.
  2. Serverul ar despacheta apoi mesajul trimis de client, ar vedea ce a solicitat clientul și apoi ar trimite răspunsul corespunzător înapoi clientului sub formă de mesaj SOAP. Practica despachetăriiping O cerere trimisă de client este cunoscută sub numele de Demarshalling.

Exemplu practic de SAPUN

Acum în asta SoapUI În acest tutorial, haideți să vedem un exemplu practic SOAP. Probabil una dintre cele mai bune metode de a vedea cum sunt generate mesajele SOAP este să vedem 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 utilizat pentru a returna un șir de caractere 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, care este mesajul SOAP transmis între serviciul web și aplicația apelantă. Prima condiție prealabilă pentru configurarea aplicației noastre de serviciu web poate fi îndeplinită urmând pașii de mai jos. Asigurați-vă 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 pentru un proiect nou

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 oricărei aplicații web.
  2. Dați un nume proiectului dvs., care în cazul nostru a fost webservice.asmx. Apoi asigurați-vă că specificați o locație unde vor fi stocate fișierele proiectului.

Detalii proiect exemplu mesaj SOAP

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

Explorator de soluții exemplu de mesaj SOAP

Pas 3) În acest pas, vom adăuga un fișier de serviciu Web la proiectul nostru.

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

Exemplu de mesaj SOAP proiect cu clic dreapta

  1. După ce faceți clic dreapta pe fișierul proiectului, aveți posibilitatea de a alege opțiunea „Adăugare->Serviciu Web (ASMX)” pentru a adăuga un fișier de serviciu web. Trebuie doar să furnizați numele Serviciului Tutorial pentru fișierul cu numele serviciului web.

Exemplu de mesaj SOAP pentru adăugarea unui serviciu web

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

Exemplu de cod de serviciu web pentru mesaje SOAP

Code Explicaţie:

  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 odată cu 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 prezent, atunci metoda nu poate fi niciodată apelată de o aplicație client.
  4. Aici definim o funcție numită 'Guru99WebService', care va fi utilizată pentru a returna un șir de caractere aplicației client apelante. 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 de caractere „Acesta este un Guru99” serviciu Web către 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 de ieșire

  • Rezultatul arată clar că numele serviciului nostru web este „Guru99 Web Service”, 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 (Invocare), vom primi răspunsul de mai jos în browserul web.

Exemplu de mesaj SOAP - răspuns la invocarea unui mesaj

Rezultatul de mai sus:

  • Arată clar că prin invocarea metodei web, șirul „Acesta este un GuruSe returnează „99 Web service”.
  • 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 Cerere SOAP

Code Explicaţie:

  1. Prima parte a mesajului SOAP este elementul anvelopă, care a fost discutat în capitolele anterioare. Acesta este elementul de încapsulare 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ă faptul că dorim să apelăm serviciul numit „Guru99WebService'.

Exemplu de mesaj SOAP Răspuns 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>

Code Explicaţie:

  1. Prima parte a mesajului SOAP este elementul anvelopă, care a fost discutat în capitolele anterioare. Acesta este elementul de încapsulare 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 „string”. Acesta îi spune aplicației client că serviciul web apelat returnează un obiect de tip șir. Acest lucru este foarte util, deoarece altfel aplicația client nu ar ști ce returnează serviciul web.

Întrebări frecvente

Inteligența artificială poate genera cereri SOAP din limbaj natural, poate valida plicuri în raport cu un WSDL și poate detecta mesaje malformate sau suspecte. În sistemele enterprise vechi, asistenții inteligenți artificiali ajută, de asemenea, dezvoltatorii să înțeleagă și să întrețină mai rapid serviciile SOAP mai vechi.

Da. Instrumentele de inteligență artificială pot genera automat exemple de plicuri SOAP, pot crea scenarii de erori și pot construi teste de regresie pentru endpoint-uri. Dezvoltatorii ar trebui să revizuiască XML-ul generat pentru a confirma că spațiile de nume, tipurile de date și anteturile de securitate sunt corecte înainte de utilizare.

SOAP este un protocol strict bazat pe XML, cu standarde încorporate pentru securitate și gestionarea erorilor. REST este un stil arhitectural mai ușor, care utilizează metode HTTP și adesea JSON. SOAP se potrivește integrărilor formale ale întreprinderilor, în timp ce REST este popular pentru API-urile web publice.

Da. Deși REST domină noile API-uri publice, SOAP rămâne comun în sistemele de tip întreprinderi, bancar, de plăți și telecomunicații care necesită securitate puternică, constrângeri formale...tracts (WSDL) și mesagerie fiabilă. Multe integrări vechi continuă să depindă de serviciile web SOAP.

Rezumați această postare cu: