SOAP-i veebiteenuste õpetus: mis on SOAP-protokoll? NÄIDE
Mis on SEEP?
SOAP on XML-põhine protokoll veebiteenustele juurdepääsuks HTTP kaudu. Sellel on teatud spetsifikatsioonid, mida saab kasutada kõigis rakendustes.
SOAP on tuntud kui Simple Object Access Protocol, kuid hilisematel aegadel lühendati see lihtsalt SOAP v1.2-ks. SOAP on protokoll või teisisõnu definitsioon selle kohta, kuidas veebiteenused räägivad üksteisega või räägivad neid kutsuvate klientrakendustega.
SOAP töötati välja vahekeelena, et erinevatele programmeerimiskeeltele üles ehitatud rakendused saaksid omavahel hõlpsalt rääkida ja vältida äärmuslikku arendustööd.
SEEBI tutvustus
Tänapäeva maailmas on tohutul hulgal rakendusi, mis on üles ehitatud erinevatele programmeerimiskeeltele. Näiteks võib olla loodud veebirakendus Java, teine .Netis ja teine in PHP.
Andmete vahetamine rakenduste vahel on tänapäeva võrguga ühendatud maailmas ülioluline. Kuid andmevahetus nende heterogeensete rakenduste vahel oleks keeruline. Nii on ka koodi keerukus selle andmevahetuse teostamiseks.
Üks selle keerukuse vastu võitlemise meetodeid on kasutada XML-i (Extensible Markup Language) vahekeelena andmete vahetamiseks rakenduste vahel.
Iga programmeerimiskeel saab XML-i märgistuskeelest aru. Seetõttu kasutati andmevahetuse aluskandjana XML-i.
Kuid XML-i kasutamisel kõigis andmevahetuseks mõeldud programmeerimiskeeltes pole standardseid spetsifikatsioone. See on koht, kus SOAP-tarkvara tuleb sisse.
SOAP oli loodud töötama XML-iga HTTP kaudu ja sellel on mingi spetsifikatsioon, mida saaks kasutada kõigis rakendustes. SOAP-protokolli üksikasju käsitleme järgmistes peatükkides.
SEEBI eelised
SOAP on rakendustevaheliseks andmevahetuseks kasutatav protokoll. Allpool on mõned põhjused, miks SEEPI kasutatakse.
- SOAP-põhiste veebiteenuste arendamisel peab teil olema keel, mida saab kasutada veebiteenuste jaoks kliendirakendustega suhtlemiseks. SOAP on ideaalne meedium, mis töötati välja selle eesmärgi saavutamiseks. Seda protokolli soovitab ka W3C konsortsium, mis on kõigi veebistandardite juhtorgan.
- SOAP on kerge protokoll, mida kasutatakse rakendustevaheliseks andmevahetuseks. Pange tähele märksõna "valgus.' Kuna SOAP-i programmeerimine põhineb XML-keelel, mis ise on kerge andmevahetuskeel, siis SOAP kui protokoll, mis samuti kuulub samasse kategooriasse.
- SOAP on loodud platvormist sõltumatuks ja ka operatsioonisüsteemist sõltumatuks. Seega saab SOAP-protokoll töötada mis tahes programmeerimiskeeltel põhinevatel rakendustel mõlemal Windows ja Linux platvormi.
- See töötab HTTP-protokolliga – SOAP töötab HTTP-protokolliga, mis on kõigi veebirakenduste vaikeprotokoll. Seega ei ole SOAP-protokollile ehitatud veebiteenuste käitamiseks veebis töötamiseks vaja mingit kohandamist.
SEEBI ehitusplokid
SOAP spetsifikatsioon määratleb midagi, mida tuntakse kui "SEEBI sõnum” mis saadetakse veebiteenusele ja kliendirakendusele.
Allolev SOAP-i arhitektuuri diagramm näitab SOAP-sõnumi erinevaid ehitusplokke.
SOAP-sõnum pole midagi muud kui lihtsalt XML-dokument, millel on järgmised komponendid.
- Ümbrikuelement, mis identifitseerib XML-dokumendi SOAP-sõnumina – see on SOAP-sõnumi osa ja seda kasutatakse SOAP-sõnumi kõigi üksikasjade kapseldamiseks. See on SOAP-sõnumi juurelement.
- Päise element, mis sisaldab päise teavet – päiseelement võib sisaldada teavet, näiteks autentimismandaate, mida helistav rakendus saab kasutada. See võib sisaldada ka keerukate tüüpide määratlust, mida saab SOAP-sõnumis kasutada. Vaikimisi võib SOAP-sõnum sisaldada parameetreid, mis võivad olla lihtsat tüüpi (nt stringid ja numbrid), kuid võivad olla ka keerukad objektitüübid.
Allpool on näidatud keerukat tüüpi lihtsa SEEPI teenuse näide.
Oletame, et tahame saata struktureeritud andmetüüpi, mis sisaldas kombinatsiooni „õpetuse nimi” ja „õpetus”. Descriptioon”, siis määratleksime kompleksi tüübi, nagu allpool näidatud.
Kompleksne tüüp on määratletud elemendisildiga . Seejärel määratletakse keerukas tüübikogus kõik struktuuri nõutavad elemendid koos nende vastavate andmetüüpidega.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Kehaelement, mis sisaldab kõne- ja vastuseteavet – see element sisaldab tegelikke andmeid, mis tuleb veebiteenuse ja helistava rakenduse vahel saata. Allpool on SOAP-i veebiteenuse näide SOAP-i kehast, mis tegelikult töötab päise jaotises määratletud komplekstüübil. Siin on õpetuse nime ja õpetuse vastus Descriptioon, mis saadetakse sellele veebiteenusele helistavale helistavale rakendusele.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
SEEBI sõnumi struktuur
Üks asi, mida tuleb tähele panna, on see, et SOAP-sõnumid genereerib tavaliselt veebiteenus selle väljakutsumisel automaatselt.
Iga kord, kui klientrakendus kutsub veebiteenuses mõnda meetodit, genereerib veebiteenus automaatselt SOAP-teate, mis sisaldab vajalikke üksikasju andmete kohta, mis saadetakse veebiteenusest kliendirakendusele.
Nagu selle SOAP-õpetuse eelmises teemas arutatud, on lihtsal SOAP-sõnumil järgmised elemendid:
- Element Ümbrik
- Päise element ja
- Keha element
- Element Vea (valikuline)
Vaatame allolevat näidet lihtsast SOAP-sõnumist ja vaatame, mida element tegelikult teeb.
- Nagu ülaltoodud SOAP-sõnumist näha, on SOAP-sõnumi esimene osa ümbrikuelement, mida kasutatakse kogu SOAP-sõnumi kapseldamiseks.
- Järgmine element on SOAP-i keha, mis sisaldab tegeliku sõnumi üksikasju.
- Meie sõnum sisaldab veebiteenust, mille nimi on "Guru99WebService".
- "Guru99Webservice" aktsepteerib parameetrit tüüpi "int" ja selle nimi on TutorialID.
Nüüd edastatakse ülaltoodud SOAP-sõnum veebiteenuse ja kliendirakenduse vahel.
Näete, kui kasulik on ülaltoodud teave kliendirakendusele. SOAP-sõnum annab kliendirakendusele teada, mis on veebiteenuse nimi ja milliseid parameetreid see ootab, ja ka seda, mis on iga veebiteenuse poolt kasutatava parameetri tüüp.
SEEBI ümbriku element
Ehitusploki esimene osa on SOAP Envelope.
SOAP-ümbrikut kasutatakse SOAP-sõnumite kõigi vajalike üksikasjade kapseldamiseks, mida vahetatakse veebiteenuse ja kliendirakenduse vahel.
SOAP-i ümbriku elementi kasutatakse SOAP-teate alguse ja lõpu tähistamiseks. See võimaldab veebiteenusele helistaval klientrakendusel teada saada, millal SOAP-sõnum lõpeb.
SOAP-ümbriku elemendile saab märkida järgmisi punkte.
- Igal SOAP-sõnumil peab olema juurümbriku element. SOAP-sõnumis on ümbriku elemendi olemasolu absoluutselt kohustuslik.
- Igal ümbriku elemendil peab olema vähemalt üks seebi korpuse element.
- Kui element Envelope sisaldab päiseelementi, ei tohi see sisaldada rohkem kui ühte ja see peab ilmuma ümbriku esimese alamelemendina enne kehaelementi.
- Ümbrik muutub SOAP-i versioonide muutumisel.
- V1.1-ga ühilduv SOAP-protsessor tekitab v1.2 ümbriku nimeruumi sisaldava sõnumi saamisel vea.
- V1.2-ga ühilduv SOAP-protsessor genereerib versiooni mittevastavuse tõrke, kui saab sõnumi, mis ei sisalda v1.2 ümbriku nimeruumi.
Allpool on SOAP API näide SOAP-ümbriku elemendi versioonist 1.2.
<?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>
Veateade
Kui SOAP-i veebiteenusele esitatakse päring, võib tagastatud vastuseks olla kas kaks vormi, mis on edukas vastus või veavastus. Edu saavutamisel on serveri vastuseks alati SOAP-sõnum. Kui aga tekitatakse SOAP-tõrkeid, tagastatakse need „HTTP 2” vigadena.
SOAP Fault teade koosneb järgmistest elementidest.
- – See on kood, mis tähistab vea koodi. Veakood võib olla üks järgmistest väärtustest
- SOAP-ENV:VersionMismatch – see on siis, kui avastatakse SOAP Envelope elemendi vale nimeruum.
- SOAP-ENV:MustUnderstand – Päiseelemendi vahetut alamelementi, mille atribuudi mustUnderstand väärtuseks on määratud „1”, ei mõistetud.
- SOAP-ENV:Klient – sõnum oli valesti koostatud või sisaldas ebaõiget teavet.
- SOAP-ENV:Server – serveriga tekkis probleem, mistõttu sõnumit ei saanud edasi saata.
- – See on tekstsõnum, mis kirjeldab viga üksikasjalikult.
- (Valikuline)– See on tekstistring, mis näitab, kes tõrke põhjustas.
- (Valikuline) – See on rakendusepõhiste veateadete element. Seega võib rakendusel olla konkreetne veateade erinevate äriloogika stsenaariumide jaoks.
Näide veateate kohta
Allpool on toodud veateate näide. Viga genereeritakse juhul, kui stsenaarium, kus klient proovib kasutada meetodit nimega TutorialID klassis GetTutorial.
Allolev veateade genereeritakse juhul, kui meetodit määratletud klassis ei eksisteeri.
<?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>
Väljund:
Kui käivitate ülaltoodud koodi, kuvatakse tõrge nagu "Meetodi (GetTutorialID) leidmine klassis (GetTutorial) nurjus"
SEEBI kommunikatsioonimudel
Kogu SOAP-i suhtlus toimub HTTP-protokolli kaudu. Enne SEEPI palju veebiteenused kasutas suhtlemiseks standardset RPC-stiili (Remote Procedure Call). See oli lihtsaim suhtlusviis, kuid sellel oli palju piiranguid.
Nüüd selles SOAP API õpetuses vaatleme allolevat diagrammi, et näha, kuidas see suhtlus toimib. Oletame selles näites, et server hostib veebiteenust, mis pakub kahte meetodit nagu
- GetTemployee – See annab kõik töötaja andmed
- SetEmployee – See määraks vastavalt selliste detailide väärtuse nagu töötajate osakond, palk jne.
Tavalises RPC-stiilis suhtluses helistab klient lihtsalt oma päringus olevad meetodid ja saadab serverile vajalikud parameetrid ning server saadab seejärel soovitud vastuse.
Ülaltoodud suhtlusmudelil on järgmised tõsised piirangud
- Ei ole keelest sõltumatu – Meetodeid majutav server oleks kindlas programmeerimiskeeles ja tavaliselt tehakse kõned serverile ainult selles programmeerimiskeeles.
- Mitte standardprotokoll – Kui helistatakse kaugprotseduurile, ei toimu kõne standardprotokolli kaudu. See oli probleem, kuna enamasti tuli kogu veebi kaudu suhtlemine toimuda HTTP-protokolli kaudu.
- Tulemüürid – Kuna RPC-kõned ei toimu tavalise protokolli kaudu, peavad serveris olema avatud eraldi pordid, et klient saaks serveriga suhelda. Tavaliselt blokeerivad kõik tulemüürid seda tüüpi liiklust ja kliendi ja serveri vahelise suhtluse toimimise tagamiseks oli üldiselt vaja palju konfiguratsiooni.
Kõigist ülaltoodud piirangutest ülesaamiseks kasutaks SOAP allolevat suhtlusmudelit
- Klient vormindab protseduurikutset ja mis tahes argumente puudutava teabe SOAP-sõnumiks ja saadab selle HTTP-päringu osana serverisse. Seda andmete SOAP-sõnumisse kapseldamise protsessi tunti kui Järjestamine.
- Seejärel pakkib server lahti kliendi saadetud sõnumi, vaatab, mida klient taotles, ja saadab seejärel vastava vastuse kliendile SOAP-sõnumina tagasi. Kliendi saadetud päringu lahtipakkimise tava on tuntud kui Demarshalling.
Praktiline SEEBI näide
Nüüd selles SoapUI õpetuses vaatame praktilist SEEBI näidet,
Tõenäoliselt on üks parimaid viise, kuidas näha, kuidas SOAP-sõnumid genereeritakse, vaadata veebiteenust töös.
Selles teemas vaadeldakse selle kasutamist Microsoft.Neti raamistik ASMX-i veebiteenuse loomiseks. Seda tüüpi veebiteenus toetab nii SOAP-i versiooni 1.1 kui ka versiooni 1.2.
ASMX veebiteenused genereerivad automaatselt Web Service Definition Language (WSDL) dokument. Seda WSDL-dokumenti nõuab helistav kliendirakendus, et rakendus teaks, mida veebiteenus on võimeline tegema.
Meie näites loome lihtsa veebiteenuse, mida kasutatakse stringi tagastamiseks veebiteenust kutsuvale rakendusele.
Seda veebiteenust hostitakse a Asp.Net veebirakendus. Seejärel käivitame veebiteenuse ja näeme tulemust, mille veebiteenus tagastab.
Visual Studio näitab meile ka seda, milline SOAP-sõnum edastatakse veebiteenuse ja helistamisrakenduse vahel.
Esimene eeltingimus meie veebiteenuse rakenduse seadistamiseks, mida saab teha alltoodud samme järgides.
Veenduge, et selle näite jaoks oleks teie süsteemi installitud Visual Studio 2013.
Step 1) Esimene samm on tühja ASP.Neti veebirakenduse loomine. Visual Studio 2013-s klõpsake menüükäsku Fail->Uus projekt.
Kui klõpsate suvandil Uus projekt, annab Visual Studio teile uue dialoogiboksi projekti tüübi valimiseks ja projekti vajalike üksikasjade esitamiseks. Seda selgitatakse järgmises etapis.
Step 2) Selles sammus
- Valige esmalt kindlasti C# Veebirakenduse ASP.NET veebimall. SOAP-teenuste projekti loomiseks peab projekt seda tüüpi olema. Selle valiku valimisel viib Visual Studio seejärel läbi vajalikud toimingud vajalike failide lisamiseks, mida nõuavad mis tahes veebipõhised rakendused.
- Andke oma projektile nimi, mis meie puhul on antud kui webservice.asmx. Seejärel määrake kindlasti koht, kuhu projektifailid salvestatakse.
Kui olete lõpetanud, näete Visual Studio 2013 lahendusuurijas loodud projektifaili.
Step 3) Selles sammus
Lisame oma projektile veebiteenuse faili
- Kõigepealt paremklõpsake projekti failil, nagu allpool näidatud
- Kui teete projekti failil paremklõpsu, on teil võimalus veebiteenuse faili lisamiseks valida suvand "Lisa-> Veebiteenus (ASMX). Sisestage veebiteenuse nimefaili jaoks lihtsalt Tutorial Service'i nimi.
Step 4) Lisage oma Tutorial Service asmx-faili järgmine kood.
Koodi selgitus:
- See koodirida annab teie veebiteenuse failile nime. See on oluline samm, kuna võimaldab kliendirakendusel helistada veebiteenusele veebiteenuse nime kaudu.
- Tavaliselt kasutatakse veebiteenuse funktsioonide kapseldamiseks klassifaili. Seega on klassifailis kõigi veebimeetodite määratlused, mis pakuvad kliendirakendusele teatud funktsioone.
- Siin tuntakse [WebMethod] atribuuti, mis kirjeldab funktsiooni. Järgmises etapis luuakse funktsioon nimega "Guru99WebService", kuid selle [WebMethod] atribuudi lisamise etapi kaasamine tagab, et klientrakendus saab seda meetodit käivitada. Kui see atribuut pole paigas, ei saa klientrakendus seda meetodit kunagi kutsuda.
- Siin määratleme funktsiooni nimega 'Guru99WebService', mida kasutatakse stringi tagastamiseks helistavale kliendirakendusele. See funktsioon on veebiteenus, millele saab helistada mis tahes kliendirakendus.
- Me kasutame tagastamislauset stringi "See on Guru99 veebiteenus" tagastamiseks kliendirakendusele.
Kui kood on edukalt käivitatud, kuvatakse koodi brauseris käivitamisel järgmine väljund.
Väljund:
- Väljund näitab selgelt, et meie veebiteenuse nimi on “Guru99 veebiteenus”, mis on meie veebiteenusele nime andmise tulemus.
- Samuti näeme, et saame veebiteenust käivitada. Kui klõpsame nuppu Invoke, saame veebibrauseris alloleva vastuse.
Ülaltoodud väljund,
- See näitab selgelt, et veebimeetodi käivitamisel tagastatakse string "See on Guru99 veebiteenus".
- Visual Studio võimaldab teil vaadata ka SOAP-sõnumipäringut ja vastust, mis genereeritakse ülaltoodud veebiteenuse kutsumisel.
SOAP-i päring, mis genereeritakse veebiteenuse kutsumisel, on näidatud allpool.
Koodi selgitus:
- SOAP-sõnumi esimene osa on ümbriku element, millest oli juttu eelmistes peatükkides. See on kapseldav element, mis esineb igas SOAP-sõnumis.
- SOAP Body on järgmine element ja sisaldab SOAP-sõnumi tegelikke üksikasju.
- Kolmas osa on element, mis määrab, et me tahame kutsuda teenust, mille nimi on "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>
Koodi selgitus:
- SOAP-sõnumi esimene osa on ümbriku element, millest oli juttu eelmistes peatükkides. See on kapseldav element, mis esineb igas SOAP-sõnumis.
- SOAP Body on järgmine element ja sisaldab SOAP-sõnumi tegelikke üksikasju.
- Huvitav osa, mida praegu näete, on atribuut "string". See annab kliendirakendusele teada, et väljakutsutav veebiteenus tagastab stringi tüüpi objekti. See on väga kasulik, sest kui klientrakendus, mis muidu ei teaks, mida veebiteenus tagastab.
kokkuvõte
- SOAP on protokoll, mida kasutatakse andmete vahetamiseks erinevatele rakendustele programmeerimiskeeled.
- SOAP on üles ehitatud XML-spetsifikatsioonile ja töötab HTTP-protokolliga. See muudab selle suurepäraseks kasutamiseks veebirakendustes.
- SOAP-i ehitusplokid koosnevad SOAP-sõnumist. Iga SOAP-sõnum koosneb ümbrikuelemendist, päisest ja kehaelemendist.
- Ümbriku element on SOAP-sõnumi kohustuslik element ja seda kasutatakse kõigi SOAP-sõnumi andmete kapseldamiseks.
- Päise elementi saab kasutada teabe, näiteks autentimisteabe või keerukate andmetüüpide määratluse sisaldamiseks.
- Kehaelement on põhielement, mis sisaldab veebimeetodite määratlust ja vajaduse korral parameetriteavet.