SOAP Web Services Tutorial: Hvad er SOAP Protocol? EKSEMPEL
Hvad er SOAP?
SOAP er en XML-baseret protokol til at få adgang til webtjenester over HTTP. Det har nogle specifikationer, som kan bruges på tværs af alle applikationer.
SOAP er kendt som Simple Object Access Protocol, men blev i senere tider blot forkortet til SOAP v1.2. SOAP er en protokol eller med andre ord er en definition af, hvordan webtjenester taler med hinanden eller taler med klientapplikationer, der kalder dem.
SOAP blev udviklet som et mellemsprog, så applikationer bygget på forskellige programmeringssprog nemt kunne tale med hinanden og undgå den ekstreme udviklingsindsats.
SÆBE introduktion
I dagens verden er der et stort antal applikationer, som er bygget på forskellige programmeringssprog. For eksempel kan der være en webapplikation designet i Java, en anden i .Net og en anden i PHP.
Udveksling af data mellem applikationer er afgørende i dagens netværksverden. Men dataudveksling mellem disse heterogene applikationer ville være kompleks. Det vil også være kompleksiteten af koden for at opnå denne dataudveksling.
En af de metoder, der bruges til at bekæmpe denne kompleksitet, er at bruge XML (Extensible Markup Language) som mellemsprog til udveksling af data mellem applikationer.
Ethvert programmeringssprog kan forstå XML markup sproget. Derfor blev XML brugt som det underliggende medium til dataudveksling.
Men der er ingen standardspecifikationer for brug af XML på tværs af alle programmeringssprog til dataudveksling. Det er her SOAP-software kommer ind.
SOAP er designet til at arbejde med XML over HTTP og har en slags specifikation, som kan bruges på tværs af alle applikationer. Vi vil se nærmere på detaljerne om SOAP-protokollen i de efterfølgende kapitler.
Fordele ved SOAP
SOAP er den protokol, der bruges til dataudveksling mellem applikationer. Nedenfor er nogle af grundene til, hvorfor SOAP bruges.
- Når du udvikler SOAP-baserede webtjenester, skal du have noget sprog, som kan bruges til webtjenester til at tale med klientapplikationer. SOAP er det perfekte medium, som blev udviklet for at opnå dette formål. Denne protokol anbefales også af W3C-konsortiet, som er det styrende organ for alle webstandarder.
- SOAP er en letvægtsprotokol, der bruges til dataudveksling mellem applikationer. Bemærk nøgleordet 'lys.' Da SOAP-programmering er baseret på XML-sproget, som i sig selv er et letvægts-dataudvekslingssprog, derfor falder SOAP som en protokol i samme kategori.
- SOAP er designet til at være platformsuafhængig og er også designet til at være operativsystemuafhængig. Så SOAP-protokollen kan fungere på alle programmeringssprogsbaserede applikationer på begge Windows og Linux perron.
- Det virker på HTTP-protokollen – SOAP fungerer på HTTP-protokollen, som er standardprotokollen, der bruges af alle webapplikationer. Derfor er der ingen form for tilpasning, der kræves for at køre webtjenesterne bygget på SOAP-protokollen for at fungere på World Wide Web.
SÆBE byggeklodser
SOAP-specifikationen definerer noget kendt som en "SOAP besked” som er det, der sendes til webservicen og klientapplikationen.
Nedenstående diagram over SOAP-arkitektur viser de forskellige byggesten i en SOAP-meddelelse.
SOAP-meddelelsen er intet andet end blot et XML-dokument, som har nedenstående komponenter.
- Et envelope-element, der identificerer XML-dokumentet som en SOAP-meddelelse - Dette er den del af SOAP-meddelelsen, der indeholder, og bruges til at indkapsle alle detaljerne i SOAP-meddelelsen. Dette er rodelementet i SOAP-meddelelsen.
- Et Header-element, der indeholder header-oplysninger – Header-elementet kan indeholde oplysninger, såsom godkendelsesoplysninger, som kan bruges af den kaldende applikation. Den kan også indeholde definitionen af komplekse typer, som kan bruges i SOAP-meddelelsen. Som standard kan SOAP-meddelelsen indeholde parametre, som kan være af simple typer såsom strenge og tal, men kan også være en kompleks objekttype.
Et simpelt SOAP-tjenesteeksempel af en kompleks type er vist nedenfor.
Antag, at vi ønskede at sende en struktureret datatype, som havde en kombination af et "Tutorial Name" og et "Tutorial" Description," så ville vi definere den komplekse type som vist nedenfor.
Den komplekse type er defineret af element-tagget . Alle de nødvendige elementer i strukturen sammen med deres respektive datatyper defineres derefter i den komplekse typesamling.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Et Body-element, der indeholder opkalds- og svaroplysninger – Dette element er det, der indeholder de faktiske data, som skal sendes mellem webtjenesten og den opkaldende applikation. Nedenfor er et eksempel på SOAP-webservice på SOAP-kroppen, som faktisk fungerer på den komplekse type, der er defineret i overskriftssektionen. Her er svaret på selvstudiets navn og selvstudiet Description, der sendes til den opkaldende applikation, som kalder denne webtjeneste.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
SOAP-meddelelsesstruktur
En ting at bemærke er, at SOAP-beskeder normalt automatisk genereres af webtjenesten, når den kaldes.
Når en klientapplikation kalder en metode i webtjenesten, vil webtjenesten automatisk generere en SOAP-meddelelse, som vil have de nødvendige detaljer om de data, som vil blive sendt fra webtjenesten til klientapplikationen.
Som diskuteret i det foregående emne i denne SOAP-tutorial, har en simpel SOAP-meddelelse følgende elementer -
- Konvolutelementet
- Overskriftselementet og
- Kropselementet
- Fejlelementet (valgfrit)
Lad os se på et eksempel nedenfor på en simpel SOAP-meddelelse og se, hvad element faktisk gør.
- Som det ses af ovenstående SOAP-meddelelse, er den første del af SOAP-meddelelsen kuvertelementet, som bruges til at indkapsle hele SOAP-meddelelsen.
- Det næste element er SOAP-legemet, som indeholder detaljerne i den faktiske besked.
- Vores besked indeholder en webservice, som har navnet "Guru99WebService".
- "Guru99Webservice" accepterer en parameter af typen 'int' og har navnet TutorialID.
Nu vil ovenstående SOAP-meddelelse blive sendt mellem webtjenesten og klientapplikationen.
Du kan se, hvor nyttige ovenstående oplysninger er for klientapplikationen. SOAP-meddelelsen fortæller klientapplikationen, hvad der er navnet på webtjenesten, og også hvilke parametre den forventer, og også hvilken type af hver parameter, der tages af webtjenesten.
Sæbekuvertelement
Den første del af byggestenen er SOAP Envelope.
SOAP-konvolutten bruges til at indkapsle alle de nødvendige detaljer om SOAP-meddelelserne, som udveksles mellem webservicen og klientapplikationen.
SOAP-kuvertelementet bruges til at angive begyndelsen og slutningen af en SOAP-meddelelse. Dette gør det muligt for klientapplikationen, der kalder webtjenesten, at vide, hvornår SOAP-meddelelsen slutter.
Følgende punkter kan noteres på SOAP-kuvertelementet.
- Hver SOAP-meddelelse skal have et rodkonvolutelement. Det er absolut obligatorisk for SOAP-meddelelse at have et kuvertelement.
- Hvert Envelope-element skal have mindst ét sæbeelement.
- Hvis et kuvertelement indeholder et overskriftselement, må det ikke indeholde mere end ét, og det skal vises som det første underordnede af konvolutten før brødelementet.
- Konvolutten ændres, når SOAP-versionerne ændres.
- En v1.1-kompatibel SOAP-processor genererer en fejl ved modtagelse af en meddelelse, der indeholder v1.2-envelope-navneområdet.
- En v1.2-kompatibel SOAP-processor genererer en Version Mismatch-fejl, hvis den modtager en meddelelse, der ikke inkluderer v1.2-envelope-navneområdet.
Nedenfor er et SOAP API-eksempel på version 1.2 af SOAP-envelope-elementet.
<?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>
Fejlmeddelelsen
Når der sendes en anmodning til en SOAP-webservice, kan svaret, der returneres, være af enten 2 formularer, som er et vellykket svar eller et fejlsvar. Når en succes genereres, vil svaret fra serveren altid være en SOAP-meddelelse. Men hvis der genereres SOAP-fejl, returneres de som "HTTP 500"-fejl.
SOAP-fejlmeddelelsen består af følgende elementer.
- – Dette er koden, der angiver koden for fejlen. Fejlkoden kan være en af nedenstående værdier
- SOAP-ENV:VersionMismatch – Dette er, når et ugyldigt navneområde for SOAP Envelope-elementet stødes på.
- SOAP-ENV:MustUnderstand – Et umiddelbart underordnet element af Header-elementet, med mustUnderstand-attributten sat til "1", blev ikke forstået.
- SOAP-ENV:Client – Meddelelsen var forkert udformet eller indeholdt forkerte oplysninger.
- SOAP-ENV:Server – Der var et problem med serveren, så beskeden kunne ikke fortsætte.
- – Dette er tekstmeddelelsen, der giver en detaljeret beskrivelse af fejlen.
- (Valgfri)– Dette er en tekststreng, der angiver, hvem der har forårsaget fejlen.
- (Valgfri) – Dette er elementet for applikationsspecifikke fejlmeddelelser. Så applikationen kunne have en specifik fejlmeddelelse for forskellige forretningslogiske scenarier.
Eksempel på fejlmeddelelse
Et eksempel på en fejlmeddelelse er givet nedenfor. Fejlen genereres, hvis scenariet, hvor klienten forsøger at bruge en metode kaldet TutorialID i klassen GetTutorial.
Nedenstående fejlmeddelelse genereres i tilfælde af, at metoden ikke eksisterer i den definerede klasse.
<?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>
Output:
Når du udfører ovenstående kode, vil den vise fejlen som "Failed to locate method (GetTutorialID) in class (GetTutorial)"
SOAP kommunikationsmodel
Al kommunikation via SOAP foregår via HTTP-protokollen. Forud for SOAP, en masse webservices brugt standard RPC (Remote Procedure Call) stil til kommunikation. Dette var den enkleste form for kommunikation, men den havde mange begrænsninger.
Lad os nu i denne SOAP API-tutorial overveje nedenstående diagram for at se, hvordan denne kommunikation fungerer. Lad os i dette eksempel antage, at serveren er vært for en webtjeneste, der gav 2 metoder som
- Få medarbejder – Dette ville få alle medarbejderdetaljer
- Sæt medarbejder – Dette ville sætte værdien af detaljer som ansattes afdeling, løn osv. i overensstemmelse hermed.
I den normale RPC-stil kommunikation ville klienten blot kalde metoderne i sin anmodning og sende de nødvendige parametre til serveren, og serveren ville derefter sende det ønskede svar.
Ovenstående kommunikationsmodel har nedenstående alvorlige begrænsninger
- Ikke sproguafhængig – Serveren, der hoster metoderne, vil være på et bestemt programmeringssprog, og normalt vil opkaldene til serveren kun være på det programmeringssprog.
- Ikke standardprotokollen – Når der foretages et opkald til fjernproceduren, udføres opkaldet ikke via standardprotokollen. Dette var et problem, da stort set al kommunikation over nettet skulle ske via HTTP-protokollen.
- Firewalls – Da RPC-opkald ikke går via den normale protokol, skal separate porte være åbne på serveren for at tillade klienten at kommunikere med serveren. Normalt ville alle firewalls blokere denne form for trafik, og en masse konfiguration var generelt påkrævet for at sikre, at denne form for kommunikation mellem klienten og serveren ville fungere.
For at overvinde alle de begrænsninger, der er nævnt ovenfor, ville SOAP derefter bruge nedenstående kommunikationsmodel
- Klienten vil formatere oplysningerne vedrørende procedurekaldet og eventuelle argumenter til en SOAP-meddelelse og sende den til serveren som en del af en HTTP-anmodning. Denne proces med at indkapsle dataene i en SOAP-meddelelse blev kendt som Marshalling.
- Serveren vil derefter pakke meddelelsen sendt af klienten ud, se hvad klienten anmoder om og derefter sende det passende svar tilbage til klienten som en SOAP-meddelelse. Praksis med at udpakke en anmodning sendt af klienten er kendt som Demarshalling.
Eksempel på praktisk SOAP
Lad os nu i denne SoapUI-tutorial se et praktisk SOAP-eksempel,
Sandsynligvis en af de bedste måder at se, hvordan SOAP-meddelelser bliver genereret, er faktisk at se en webtjeneste i aktion.
Dette emne vil se på brugen af Microsoft.Net framework til at bygge en ASMX webservice. Denne type webservice understøtter både SOAP version 1.1 og version 1.2.
ASMX webtjenester genererer automatisk Web Service Definition Language (WSDL) dokument. Dette WSDL-dokument kræves af den kaldende klientapplikation, så applikationen ved, hvad webtjenesten er i stand til at gøre.
I vores eksempel skal vi lave en simpel webtjeneste, som vil blive brugt til at returnere en streng til den applikation, der kalder webtjenesten.
Denne webservice vil blive hostet i en Asp.Net webapplikation. Vi vil derefter påberåbe os webservicen og se resultatet, der returneres af webservicen.
Visual Studio vil også vise os, hvad SOAP-beskeden sendes mellem webtjenesten og opkaldsapplikationen.
Den første forudsætning for at konfigurere vores webserviceapplikation, hvilket kan gøres ved at følge nedenstående trin.
Sørg for, at du har Visual Studio 2013 installeret på dit system til dette eksempel.
Trin 1) Det første trin er at oprette en tom ASP.Net webapplikation. Fra Visual Studio 2013 skal du klikke på menupunktet Filer->Nyt projekt.
Når du klikker på indstillingen Nyt projekt, giver Visual Studio dig en anden dialogboks til at vælge projekttype og give de nødvendige detaljer om projektet. Dette forklares i næste trin.
Trin 2) I dette trin,
- Sørg for først at vælge C# webskabelon for ASP.NET webapplikation. Projektet skal være af denne type for at skabe SOAP-serviceprojekt. Ved at vælge denne mulighed vil Visual Studio derefter udføre de nødvendige trin for at tilføje nødvendige filer, som kræves af enhver webbaseret applikation.
- Giv dit projekt et navn, som i vores tilfælde er blevet givet som webservice.asmx. Sørg derefter for at angive en placering, hvor projektfilerne vil blive gemt.
Når du er færdig, vil du se projektfilen oprettet i din løsningsstifinder i Visual Studio 2013.
Trin 3) I dette trin,
Vi vil tilføje en webservicefil til vores projekt
- Først Højreklik på projektfilen som vist nedenfor
- Når du højreklikker på projektfilen, har du mulighed for at vælge indstillingen "Tilføj->Webservice(ASMX) for at tilføje en webtjenestefil. Angiv blot et navn på Tutorial Service for webtjenestens navnefil.
Trin 4) Tilføj følgende kode til din Tutorial Service asmx-fil.
Kodeforklaring:
- Denne kodelinje giver et navn til din webservicefil. Dette er et vigtigt skridt, fordi det giver mulighed for, at klientapplikationen ringer til webtjenesten via navnet på webtjenesten.
- Normalt bruges en klassefil til at indkapsle funktionaliteten af en webtjeneste. Så klassefilen vil have definitionen af alle webmetoder, som vil give en vis funktionalitet til klientapplikationen.
- Her er [WebMethod] kendt som en attribut, der beskriver en funktion. Det efterfølgende trin opretter en funktion kaldet "Guru99WebService", men med inkluderingen af dette trin med tilføjelse af en [WebMethod]-attribut sikrer du, at denne metode kan påkaldes af en klientapplikation. Hvis denne attribut ikke er på plads, kan metoden aldrig kaldes af en klientapplikation.
- Her definerer vi en funktion kaldet 'Guru99WebService', som vil blive brugt til at returnere en streng til den kaldende klientapplikation. Denne funktion er en webservice, som kan kaldes af enhver klientapplikation.
- Vi bruger returerklæringen til at returnere strengen "This is a Guru99 Web service" til klientapplikationen.
Hvis koden eksekveres med succes, vil følgende output blive vist, når du kører din kode i browseren.
Output:
- Outputtet viser tydeligt, at navnet på vores webservice er "Guru99 Web Service", som er resultatet af at give et navn til vores webservice.
- Vi kan også se, at vi kan påberåbe os webtjenesten. Hvis vi klikker på Invoke-knappen, får vi nedenstående svar i webbrowseren.
Ovenstående output,
- Det viser tydeligt, at ved at påberåbe sig webmetoden returneres strengen "This is a Guru99 Web service".
- Visual Studio giver dig også mulighed for at se SOAP-meddelelsesanmodningen og -svaret, som genereres, når ovenstående webservice kaldes.
SOAP-anmodningen, som genereres, når webtjenesten kaldes, er vist nedenfor.
Kodeforklaring:
- Den første del af SOAP-meddelelsen er kuvertelementet, som er det, der blev diskuteret i de foregående kapitler. Dette er det indkapslende element, som er til stede i hver SOAP-meddelelse.
- SOAP Body er det næste element og indeholder de faktiske detaljer om SOAP-meddelelsen.
- Den tredje del er det element, som specificerer, at vi vil kalde tjenesten, som hedder '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>
Kodeforklaring:
- Den første del af SOAP-meddelelsen er kuvertelementet, som er det, der blev diskuteret i de foregående kapitler. Dette er det indkapslende element, som er til stede i hver SOAP-meddelelse.
- SOAP Body er det næste element og indeholder de faktiske detaljer om SOAP-meddelelsen.
- Den interessante del, du vil se nu, er 'string'-attributten. Dette fortæller klientapplikationen, at den webtjeneste, der kaldes, returnerer et objekt af typen streng. Dette er meget nyttigt, fordi hvis klientapplikationen, som ellers ikke ville vide, hvad webtjenesten returnerer.
Resumé
- SOAP er en protokol, der bruges til at udveksle data mellem applikationer, der er bygget på forskellige programmeringssprog.
- SOAP er bygget på XML-specifikationen og arbejder med HTTP-protokollen. Dette gør den perfekt til brug inden for webapplikationer.
- SOAP-byggestenene består af en SOAP-meddelelse. Hver SOAP-meddelelse består af et kuvertelement, en header og et brødtekstelement.
- Konvolutelementet er det obligatoriske element i SOAP-meddelelsen og bruges til at indkapsle alle data i SOAP-meddelelsen.
- Header-elementet kan bruges til at indeholde information såsom autentificeringsinformation eller definition af komplekse datatyper.
- Body-elementet er hovedelementet, som indeholder definitionen af webmetoderne sammen med eventuelle parameteroplysninger, hvis det kræves.