Vodič za SOAP web usluge: Što je SOAP protokol? PRIMJER
Što je SOAP?
SOAP je protokol temeljen na XML-u za pristup web uslugama putem HTTP-a. Ima neke specifikacije koje se mogu koristiti u svim aplikacijama.
SOAP je poznat kao Simple Object Access Protocol, ali kasnije je samo skraćen na SOAP v1.2. SOAP je protokol ili drugim riječima definicija načina na koji web usluge međusobno komuniciraju ili komuniciraju s klijentskim aplikacijama koje ih pozivaju.
SOAP je razvijen kao međujezik kako bi aplikacije izgrađene na različitim programskim jezicima mogle lako komunicirati jedna s drugom i izbjeći ekstremne razvojne napore.
Uvod u SOAP
U današnjem svijetu postoji ogroman broj aplikacija koje su izgrađene na različitim programskim jezicima. Na primjer, može postojati web aplikacija dizajnirana u Java, drugi u .Netu i još jedan u PHP.
Razmjena podataka između aplikacija ključna je u današnjem umreženom svijetu. Ali razmjena podataka između ovih heterogenih aplikacija bila bi složena. To će biti i složenost koda za postizanje ove razmjene podataka.
Jedna od metoda koja se koristi za borbu protiv ove složenosti je korištenje XML-a (Extensible Markup Language) kao međujezika za razmjenu podataka između aplikacija.
Svaki programski jezik može razumjeti XML označni jezik. Stoga je XML korišten kao temeljni medij za razmjenu podataka.
Ali ne postoje standardne specifikacije o upotrebi XML-a u svim programskim jezicima za razmjenu podataka. Tu dolazi na scenu SOAP softver.
SOAP je dizajniran za rad s XML-om preko HTTP-a i ima neku vrstu specifikacije koja se može koristiti u svim aplikacijama. U sljedećim poglavljima razmotrit ćemo dodatne detalje o SOAP protokolu.
Prednosti SOAP-a
SOAP je protokol koji se koristi za razmjenu podataka između aplikacija. Ispod su neki od razloga zašto se koristi SOAP.
- Kada razvijate web usluge temeljene na SOAP-u, morate imati nešto od jezika koji se može koristiti za web usluge za komunikaciju s klijentskim aplikacijama. SOAP je savršen medij koji je razvijen za postizanje ove svrhe. Ovaj protokol također preporučuje konzorcij W3C koji je upravno tijelo za sve web standarde.
- SOAP je lagani protokol koji se koristi za razmjenu podataka između aplikacija. Zabilježite ključnu riječ 'svjetlo.' Budući da se programiranje SOAP-a temelji na jeziku XML, koji je sam po sebi lagani jezik za razmjenu podataka, stoga SOAP kao protokol također spada u istu kategoriju.
- SOAP je dizajniran da bude neovisan o platformi i također je dizajniran da bude neovisan o operativnom sustavu. Dakle, SOAP protokol može raditi s bilo kojom aplikacijom temeljenom na programskom jeziku na oba Windows međutim Linux platforma.
- Radi na HTTP protokolu – SOAP radi na HTTP protokolu, koji je zadani protokol koji koriste sve web aplikacije. Stoga ne postoji nikakva prilagodba koja je potrebna za pokretanje web usluga izgrađenih na SOAP protokolu za rad na World Wide Webu.
SOAP građevni blokovi
SOAP specifikacija definira nešto što je poznato kao "SOAP poruka” što je ono što se šalje web servisu i klijentskoj aplikaciji.
Donji dijagram SOAP arhitekture prikazuje različite građevne blokove SOAP poruke.

SOAP poruka nije ništa drugo nego obični XML dokument koji ima dolje navedene komponente.
- Element omotnice koji identificira XML dokument kao SOAP poruku – Ovo je dio koji sadrži SOAP poruku i koristi se za kapsuliranje svih detalja u SOAP poruci. Ovo je korijenski element u SOAP poruci.
- Element zaglavlja koji sadrži informacije zaglavlja – Element zaglavlja može sadržavati informacije kao što su vjerodajnice za provjeru autentičnosti koje može koristiti aplikacija koja poziva. Također može sadržavati definiciju složenih tipova koji se mogu koristiti u SOAP poruci. Prema zadanim postavkama, SOAP poruka može sadržavati parametre koji mogu biti jednostavnih vrsta kao što su nizovi i brojevi, ali mogu biti i složeni tipovi objekata.
Dolje je prikazan primjer jednostavnog SOAP servisa složenog tipa.
Pretpostavimo da želimo poslati tip strukturiranih podataka koji ima kombinaciju "Naziv vodiča" i "Tručitelj Description", tada bismo definirali kompleksni tip kao što je prikazano u nastavku.
Složeni tip definiran je oznakom elementa . Svi potrebni elementi strukture zajedno s odgovarajućim tipovima podataka definirani su u zbirci složenih tipova.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Element Body koji sadrži informacije o pozivu i odgovoru – Ovaj element sadrži stvarne podatke koji se trebaju poslati između web usluge i aplikacije koja poziva. Ispod je primjer SOAP web usluge SOAP tijela koje zapravo radi na složenom tipu definiranom u odjeljku zaglavlja. Ovdje je odgovor Naziva i Vodiča Description koji se šalje pozivnoj aplikaciji koja poziva ovu web uslugu.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
Struktura SOAP poruke
Jedna stvar koju treba napomenuti je da SOAP poruke obično automatski generira web usluga kada se pozove.
Kad god klijentska aplikacija pozove metodu u web-usluzi, web-usluga će automatski generirati SOAP poruku koja će sadržavati potrebne pojedinosti o podacima koji će biti poslani s web-usluge klijentskoj aplikaciji.
Kao što je objašnjeno u prethodnoj temi ovog vodiča za SOAP, jednostavna SOAP poruka ima sljedeće elemente –
- Element Envelope
- Element zaglavlja i
- Element tijela
- Element greške (neobavezno)
Pogledajmo donji primjer jednostavne SOAP poruke i vidimo što element zapravo radi.

- Kao što se vidi iz gornje SOAP poruke, prvi dio SOAP poruke je element omotnice koji se koristi za kapsuliranje cijele SOAP poruke.
- Sljedeći element je tijelo SOAP-a koje sadrži detalje stvarne poruke.
- Naša poruka sadrži web uslugu koja ima naziv “Guru99WebService”.
- “Guru99Webservice” prihvaća parametar tipa 'int' i ima naziv TutorialID.
Sada će se gornja SOAP poruka proslijediti između web usluge i klijentske aplikacije.
Možete vidjeti koliko su gornje informacije korisne za klijentsku aplikaciju. SOAP poruka govori klijentskoj aplikaciji koji je naziv web usluge, također koje parametre očekuje i također koji je tip svakog parametra koji preuzima web usluga.
Element omotnice SOAP-a
Prvi dio građevnog bloka je SOAP omotnica.
SOAP omotnica koristi se za kapsuliranje svih potrebnih detalja SOAP poruka koje se razmjenjuju između web usluge i klijentske aplikacije.
Element SOAP omotnice koristi se za označavanje početka i kraja SOAP poruke. To omogućuje klijentskoj aplikaciji koja poziva web uslugu da zna kada SOAP poruka završava.
Sljedeće točke mogu se uočiti na elementu omotnice SOAP-a.
- Svaka SOAP poruka mora imati korijenski element omotnice. Apsolutno je obavezno da SOAP poruka ima element omotnice.
- Svaki element Envelope mora imati barem jedan element tijela sapuna.
- Ako element Envelope sadrži element zaglavlja, ne smije sadržavati više od jednog i mora se pojaviti kao prvo dijete omotnice, prije elementa body.
- Omotnica se mijenja kada se mijenjaju verzije SOAP-a.
- SOAP procesor kompatibilan s v1.1 generira pogrešku nakon primanja poruke koja sadrži prostor imena v1.2 omotnice.
- SOAP procesor usklađen s v1.2 generira pogrešku Version Mismatch ako primi poruku koja ne uključuje prostor imena v1.2 omotnice.
Ispod je primjer SOAP API-ja verzije 1.2 elementa omotnice SOAP-a.
<?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>
Poruka greške
Kada se uputi zahtjev SOAP web servisu, vraćeni odgovor može biti u 2 oblika koji su uspješan odgovor ili odgovor na pogrešku. Kada se generira uspjeh, odgovor poslužitelja uvijek će biti SOAP poruka. Ali ako se generiraju SOAP pogreške, one se vraćaju kao pogreške "HTTP 500".
Poruka SOAP greške sastoji se od sljedećih elemenata.
- – Ovo je šifra koja označava šifru greške. Šifra greške može biti bilo koja od dolje navedenih vrijednosti
- SOAP-ENV:VersionMismatch – Ovo je kada se naiđe na nevažeći prostor imena za element SOAP Envelope.
- SOAP-ENV:MustUnderstand – Neposredni podređeni element elementa zaglavlja, s atributom mustUnderstand postavljenim na "1", nije shvaćen.
- SOAP-ENV:Klijent – Poruka je bila netočno oblikovana ili je sadržavala netočne informacije.
- SOAP-ENV:Poslužitelj – Došlo je do problema s poslužiteljem, pa se poruka nije mogla nastaviti.
- – Ovo je tekstualna poruka koja daje detaljan opis greške.
- (nije obavezno)– Ovo je tekstualni niz koji označava tko je uzrokovao kvar.
- (nije obavezno) – Ovo je element za poruke o pogrešci specifične za aplikaciju. Dakle, aplikacija može imati određenu poruku o pogrešci za različite scenarije poslovne logike.
Primjer za poruku o grešci
Dolje je dan primjer poruke o grešci. Pogreška se generira ako scenarij u kojem klijent pokušava upotrijebiti metodu pod nazivom TutorialID u klasi GetTutorial.
Donja poruka o grešci generira se u slučaju da metoda ne postoji u definiranoj klasi.
<?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>
Izlaz:
Kada izvršite gornji kod, prikazat će se pogreška poput "Nije uspjelo lociranje metode (GetTutorialID) u klasi (GetTutorial)"
SOAP komunikacijski model
Sva komunikacija putem SOAP-a odvija se putem HTTP protokola. Prije SOAP-a, puno web usluge koristio standardni RPC (Remote Procedure Call) stil za komunikaciju. Ovo je bila najjednostavnija vrsta komunikacije, ali je imala puno ograničenja.
Sada u ovom vodiču za SOAP API, razmotrimo donji dijagram da vidimo kako ova komunikacija funkcionira. U ovom primjeru, pretpostavimo da poslužitelj ugošćuje web uslugu koja pruža 2 metode kao
- GetEmployee – Time bi dobili sve podatke o zaposleniku
- Postavi Zaposlenika – Time bi se u skladu s time postavila vrijednost detalja kao što su zaduženje zaposlenika, plaća itd.
U normalnoj komunikaciji u stilu RPC-a, klijent bi samo pozvao metode u svom zahtjevu i poslao potrebne parametre poslužitelju, a poslužitelj bi potom poslao željeni odgovor.
Gore navedeni komunikacijski model ima dolje navedena ozbiljna ograničenja
- Nije neovisno o jeziku – Poslužitelj koji hostira metode bio bi na određenom programskom jeziku i obično bi pozivi poslužitelju bili samo na tom programskom jeziku.
- Nije standardni protokol – Kada se uputi poziv udaljenoj proceduri, poziv se ne provodi putem standardnog protokola. To je bio problem jer se uglavnom sva komunikacija putem weba morala odvijati putem HTTP protokola.
- firewall – Budući da RPC pozivi ne idu preko uobičajenog protokola, odvojeni portovi moraju biti otvoreni na poslužitelju kako bi se omogućilo klijentu da komunicira s poslužiteljem. Obično bi svi vatrozidi blokirali ovu vrstu prometa, a općenito je bilo potrebno mnogo konfiguracije kako bi se osiguralo da ova vrsta komunikacije između klijenta i poslužitelja funkcionira.
Kako bi prevladao sva gore navedena ograničenja, SOAP bi tada koristio komunikacijski model u nastavku
- Klijent bi formatirao informacije u vezi s pozivom procedure i svim argumentima u SOAP poruku i poslao ih poslužitelju kao dio HTTP zahtjeva. Ovaj proces enkapsulacije podataka u SOAP poruku poznat je kao Marshalling.
- Poslužitelj bi zatim razmotao poruku koju je poslao klijent, vidio što je klijent tražio i zatim poslao odgovarajući odgovor nazad klijentu kao SOAP poruku. Praksa odmotavanja zahtjeva koje šalje klijent poznata je kao Demarshalling.
Praktični primjer SOAP-a
Sada u ovom vodiču za SoapUI, pogledajmo praktični primjer SOAP-a,
Vjerojatno jedan od najboljih načina da vidite kako se SOAP poruke generiraju jest da zapravo vidite web uslugu na djelu.
Ova će se tema baviti korištenjem Microsoft.Net framework za izgradnju ASMX web usluge. Ova vrsta web usluge podržava i SOAP verziju 1.1 i verziju 1.2.
ASMX web usluge automatski generiraju Jezik definicije web usluge (WSDL) dokument. Ovaj WSDL dokument zahtijeva pozivna klijentska aplikacija kako bi aplikacija znala što web usluga može učiniti.
U našem primjeru izradit ćemo jednostavnu web uslugu koja će se koristiti za vraćanje niza aplikaciji koja poziva web uslugu.
Ova web usluga bit će smještena u Asp.Net web aplikacija. Zatim ćemo pozvati web uslugu i vidjeti rezultat koji vraća web usluga.
Visual Studio će nam također pokazati koja se SOAP poruka prenosi između web usluge i pozivajuće aplikacije.
Prvi preduvjet za postavljanje naše aplikacije web usluge što se može učiniti slijedeći korake u nastavku.
Provjerite imate li Visual Studio 2013 instaliran na vašem sustavu za ovaj primjer.
Korak 1) Prvi korak je stvaranje prazne ASP.Net web aplikacije. U Visual Studio 2013 kliknite na opciju izbornika Datoteka->Novi projekt.
Nakon što kliknete opciju Novi projekt, Visual Studio će vam dati još jedan dijaloški okvir za odabir vrste projekta i davanje potrebnih pojedinosti o projektu. Ovo je objašnjeno u sljedećem koraku.
Korak 2) U ovom koraku
- Prvo odaberite C# web predložak ASP.NET web aplikacije. Projekt mora biti ove vrste kako bi se mogao stvoriti projekt SOAP usluga. Odabirom ove opcije, Visual Studio će potom izvršiti potrebne korake za dodavanje potrebnih datoteka koje su potrebne bilo kojoj web aplikaciji.
- Dajte ime svom projektu koji je u našem slučaju dan kao webservice.asmx. Zatim osigurajte mjesto na kojem će biti pohranjene datoteke projekta.
Kada završite, vidjet ćete projektnu datoteku stvorenu u vašem pregledniku rješenja u Visual Studio 2013.
Korak 3) U ovom koraku
Dodat ćemo datoteku web usluge našem projektu
- Prvo desnom tipkom miša kliknite datoteku projekta kao što je prikazano u nastavku
- Nakon što desnom tipkom miša kliknete datoteku projekta, imate priliku odabrati opciju “Dodaj->Web usluga (ASMX) za dodavanje datoteke web usluge. Samo navedite naziv Tutorial Service za datoteku naziva web usluge.
Korak 4) Dodajte sljedeći kod svojoj asmx datoteci Tutorial Service.
Objašnjenje koda:
- Ovaj redak koda daje naziv za vašu datoteku web usluge. Ovo je važan korak jer omogućuje klijentskoj aplikaciji da pozove web uslugu putem naziva web usluge.
- Obično se datoteka klase koristi za kapsuliranje funkcionalnosti web usluge. Tako će datoteka klase sadržavati definiciju svih web metoda koje će pružiti neke funkcije klijentskoj aplikaciji.
- Ovdje je [WebMethod] poznat kao atribut koji opisuje funkciju. Sljedeći korak stvara funkciju pod nazivom "Guru99WebService", ali uz uključivanje ovog koraka dodavanja atributa [WebMethod] osigurava se da ovu metodu može pozvati aplikacija klijenta. Ako ovaj atribut nije na mjestu, klijentska aplikacija nikada ne može pozvati metodu.
- Ovdje definiramo funkciju pod nazivom 'Guru99WebService' koja će se koristiti za vraćanje niza pozivnoj klijentskoj aplikaciji. Ova funkcija je web usluga koju može pozvati bilo koja klijentska aplikacija.
- Koristimo povratnu izjavu za vraćanje niza "Ovo je Guru99 Web usluga" klijentskoj aplikaciji.
Ako se kôd uspješno izvrši, sljedeći će se izlaz prikazati kada pokrenete kôd u pregledniku.
Izlaz:
- Izlaz jasno pokazuje da je naziv naše web usluge "Guru99 Web usluga" što je rezultat davanja naziva za našu web uslugu.
- Također možemo vidjeti da možemo pozvati web uslugu. Ako kliknemo gumb Pozovi, dobit ćemo donji odgovor u web pregledniku.
Gornji izlaz,
- Jasno pokazuje da se pozivanjem web metode vraća niz "Ovo je Guru99 web usluga".
- Visual Studio vam također omogućuje pregled SOAP zahtjeva za porukom i odgovora koji se generira kada se pozove gornja web usluga.
SOAP zahtjev koji se generira kada se pozove web usluga prikazan je u nastavku.
Objašnjenje koda:
- Prvi dio SOAP poruke je element omotnice o čemu je bilo riječi u prethodnim poglavljima. Ovo je enkapsulirajući element koji je prisutan u svakoj SOAP poruci.
- SOAP Tijelo je sljedeći element i sadrži stvarne detalje SOAP poruke.
- Treći dio je element koji specificira da želimo pozvati uslugu koja se zove 'Guru99WebService.'
<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>
Objašnjenje koda:
- Prvi dio SOAP poruke je element omotnice o čemu je bilo riječi u prethodnim poglavljima. Ovo je enkapsulirajući element koji je prisutan u svakoj SOAP poruci.
- SOAP Tijelo je sljedeći element i sadrži stvarne detalje SOAP poruke.
- Zanimljiv dio koji ćete sada vidjeti je atribut 'string'. Ovo klijentskoj aplikaciji govori da web usluga koja se poziva vraća objekt tipa string. Ovo je vrlo korisno jer ako klijentska aplikacija koja inače ne bi znala što web servis vraća.
Rezime
- SOAP je protokol koji se koristi za razmjenu podataka između aplikacija koje su izgrađene na različitim programski jezici.
- SOAP je izgrađen na XML specifikaciji i radi s HTTP protokolom. To ga čini savršenim za korištenje unutar web aplikacija.
- SOAP građevni blokovi sastoje se od SOAP poruke. Svaka SOAP poruka sastoji se od elementa omotnice, zaglavlja i elementa tijela.
- Element omotnice je obvezni element u SOAP poruci i koristi se za kapsuliranje svih podataka u SOAP poruci.
- Element zaglavlja može se koristiti za sadržavanje informacija kao što su informacije o autentifikaciji ili definicija složenih tipova podataka.
- Element body je glavni element koji sadrži definiciju web metoda zajedno sa svim informacijama o parametrima ako je potrebno.