SOAP-webservices-zelfstudie: wat is SOAP-protocol? VOORBEELD

Inhoudsopgave:

Anonim

Wat is SOAP?

SOAP is een op XML gebaseerd protocol voor toegang tot webservices via HTTP. Het heeft een bepaalde specificatie die in alle toepassingen kan worden gebruikt.

SOAP staat bekend als het Simple Object Access Protocol, maar werd in latere tijden gewoon afgekort tot SOAP v1.2. SOAP is een protocol, of met andere woorden, een definitie van hoe webservices met elkaar praten of praten met clienttoepassingen die ze aanroepen.

SOAP is ontwikkeld als een tussenliggende taal, zodat applicaties die op verschillende programmeertalen zijn gebouwd, gemakkelijk met elkaar kunnen praten en de extreme ontwikkelingsinspanningen kunnen vermijden.

In deze zelfstudie over SOAP-webservices leert u:

  • SOAP Introductie
  • Voordelen van SOAP
  • SOAP-bouwstenen
  • SOAP-berichtstructuur
  • SOAP-envelopelement
  • SOAP-communicatiemodel
  • Praktisch SOAP-voorbeeld

SOAP Introductie

In de wereld van vandaag is er een enorm aantal applicaties die zijn gebouwd op verschillende programmeertalen. Er kan bijvoorbeeld een webtoepassing zijn ontworpen in Java, een andere in .Net en een andere in PHP.

Het uitwisselen van gegevens tussen applicaties is cruciaal in de huidige netwerkwereld. Maar gegevensuitwisseling tussen deze heterogene applicaties zou complex zijn. Dat geldt ook voor de complexiteit van de code om deze gegevensuitwisseling tot stand te brengen.

Een van de methoden die wordt gebruikt om deze complexiteit te bestrijden, is door XML (Extensible Markup Language) te gebruiken als tussentaal voor het uitwisselen van gegevens tussen applicaties.

Elke programmeertaal kan de XML-opmaaktaal begrijpen. Daarom werd XML gebruikt als het onderliggende medium voor gegevensuitwisseling.

Maar er zijn geen standaardspecificaties voor het gebruik van XML in alle programmeertalen voor gegevensuitwisseling. Dat is waar SOAP-software om de hoek komt kijken.

SOAP is ontworpen om met XML over HTTP te werken en heeft een soort specificatie die in alle toepassingen kan worden gebruikt. In de volgende hoofdstukken zullen we verdere details over het SOAP-protocol bekijken.

Voordelen van SOAP

SOAP is het protocol dat wordt gebruikt voor gegevensuitwisseling tussen applicaties. Hieronder staan ​​enkele van de redenen waarom SOAP wordt gebruikt.

  • Wanneer u op SOAP gebaseerde webservices ontwikkelt, hebt u een taal nodig die kan worden gebruikt voor webservices om met clienttoepassingen te communiceren. SOAP is het perfecte medium dat is ontwikkeld om dit doel te bereiken. Dit protocol wordt ook aanbevolen door het W3C-consortium, het bestuursorgaan voor alle webstandaarden.
  • SOAP is een lichtgewicht protocol dat wordt gebruikt voor gegevensuitwisseling tussen applicaties. Let op het trefwoord ' licht '. Omdat SOAP-programmering is gebaseerd op de XML-taal, die zelf een lichtgewicht gegevensuitwisselingstaal is, is SOAP een protocol dat ook in dezelfde categorie valt.
  • SOAP is ontworpen om platformonafhankelijk te zijn en is ook ontworpen om besturingssysteemonafhankelijk te zijn. Het SOAP-protocol kan dus elke op programmeertaal gebaseerde applicaties op zowel Windows- als Linux-platform werken.
  • Het werkt op het HTTP-protocol -SOAP werkt op het HTTP-protocol, het standaardprotocol dat door alle webapplicaties wordt gebruikt. Daarom is er geen enkele vorm van aanpassing vereist om de webservices die op het SOAP-protocol zijn gebouwd, te laten werken op het World Wide Web.

SOAP-bouwstenen

De SOAP-specificatie definieert iets dat bekend staat als een " SOAP-bericht ", dat is wat naar de webservice en de clienttoepassing wordt verzonden.

Het onderstaande diagram van de SOAP-architectuur toont de verschillende bouwstenen van een SOAP-bericht.

SOAP-berichtbouwstenen

Het SOAP-bericht is niets anders dan een XML-document met de onderstaande componenten.

  • Een envelopelement dat het XML-document identificeert als een SOAP-bericht - Dit is het bevattende deel van het SOAP-bericht en wordt gebruikt om alle details in het SOAP-bericht in te kapselen. Dit is het hoofdelement in het SOAP-bericht.
  • Een header-element dat header-informatie bevat - Het header-element kan informatie bevatten zoals authenticatiegegevens die kunnen worden gebruikt door de aanroepende toepassing. Het kan ook de definitie van complexe typen bevatten die in het SOAP-bericht kunnen worden gebruikt. Standaard kan het SOAP-bericht parameters bevatten die van eenvoudige typen kunnen zijn, zoals strings en getallen, maar het kan ook een complex objecttype zijn.

Hieronder ziet u een eenvoudig SOAP-servicevoorbeeld van een complex type.

Stel dat we een gestructureerd gegevenstype willen verzenden met een combinatie van een "Tutorial Name" en een "Tutorial Description", dan zouden we het complexe type definiëren zoals hieronder getoond.

Het complexe type wordt gedefinieerd door de element-tag . Alle vereiste elementen van de structuur samen met hun respectievelijke gegevenstypen worden vervolgens gedefinieerd in de complexe typeverzameling.

  • Een Body-element dat oproep- en antwoordinformatie bevat - Dit element bevat de feitelijke gegevens die tussen de webservice en de aanroepende applicatie moeten worden verzonden. Hieronder ziet u een voorbeeld van een SOAP-webservice van de SOAP-body die daadwerkelijk werkt op het complexe type dat is gedefinieerd in de koptekstsectie. Hier is het antwoord van de Tutorial Name en Tutorial Description die naar de aanroepende applicatie wordt gestuurd die deze webservice aanroept.
Web ServicesAll about web services

SOAP-berichtstructuur

Een ding om op te merken is dat SOAP-berichten normaal gesproken automatisch worden gegenereerd door de webservice wanneer deze wordt aangeroepen.

Telkens wanneer een clienttoepassing een methode in de webservice aanroept, genereert de webservice automatisch een SOAP-bericht met de nodige details van de gegevens die van de webservice naar de clienttoepassing worden verzonden.

Zoals besproken in het vorige onderwerp van deze SOAP-zelfstudie, heeft een eenvoudig SOAP-bericht de volgende elementen:

  • Het Envelop-element
  • Het header-element en
  • Het lichaamselement
  • Het foutelement (optioneel)

Laten we eens kijken naar een voorbeeld hieronder van een eenvoudig SOAP-bericht en kijken welk element werkelijk doet.

SOAP-berichtstructuur
  1. Zoals blijkt uit het bovenstaande SOAP-bericht, is het eerste deel van het SOAP-bericht het envelopelement dat wordt gebruikt om het volledige SOAP-bericht in te kapselen.
  2. Het volgende element is de SOAP-body die de details van het daadwerkelijke bericht bevat.
  3. Ons bericht bevat een webservice met de naam "Guru99WebService".
  4. De "Guru99Webservice" accepteert een parameter van het type 'int' en heeft de naam TutorialID.

Nu zal het bovenstaande SOAP-bericht worden doorgegeven tussen de webservice en de clienttoepassing.

U kunt zien hoe nuttig de bovenstaande informatie is voor de clienttoepassing. Het SOAP-bericht vertelt de clienttoepassing wat de naam is van de webservice, en ook welke parameters hij verwacht en ook wat het type is van elke parameter die door de webservice wordt gebruikt.

SOAP-envelopelement

Het eerste deel van de bouwsteen is de SOAP-envelop.

De SOAP-envelop wordt gebruikt om alle noodzakelijke details van de SOAP-berichten in te kapselen, die worden uitgewisseld tussen de webservice en de clienttoepassing.

Het SOAP-envelopelement wordt gebruikt om het begin en einde van een SOAP-bericht aan te geven. Hierdoor kan de clienttoepassing die de webservice oproept, weten wanneer het SOAP-bericht eindigt.

De volgende punten kunnen worden opgemerkt bij het SOAP-envelopelement.

  • Elk SOAP-bericht moet een root Envelope-element hebben. Het is absoluut verplicht voor SOAP-berichten om een ​​envelopelement te hebben.
  • Elk Envelope-element moet ten minste één zeeplichaamelement hebben.
  • Als een Envelope-element een header-element bevat, mag het er niet meer dan één bevatten en moet het verschijnen als het eerste kind van de Envelope, vóór het body-element.
  • De envelop verandert wanneer SOAP-versies veranderen.
  • Een v1.1-compatibele SOAP-processor genereert een fout bij het ontvangen van een bericht met de v1.2-envelopnaamruimte.
  • Een v1.2-compatibele SOAP-processor genereert een fout met versie-mismatch als deze een bericht ontvangt dat de v1.2-envelopnaamruimte niet bevat.

Hieronder ziet u een SOAP API-voorbeeld van versie 1.2 van het SOAP-envelopelement.

int

Het foutbericht

Wanneer een verzoek wordt gedaan aan een SOAP-webservice, kan het geretourneerde antwoord twee vormen hebben die een succesvolle reactie of een foutreactie zijn. Als er een succes wordt gegenereerd, is het antwoord van de server altijd een SOAP-bericht. Maar als SOAP-fouten worden gegenereerd, worden ze geretourneerd als "HTTP 500" -fouten.

Het SOAP-foutbericht bestaat uit de volgende elementen.

  1. - Dit is de code die de code van de fout aangeeft . De foutcode kan een van de onderstaande waarden zijn
    1. SOAP-ENV: VersionMismatch - Dit is wanneer een ongeldige naamruimte voor het SOAP Envelope-element wordt aangetroffen.
    2. SOAP-ENV: MustUnderstand - Een direct onderliggend element van het Header-element, met het kenmerk mustUnderstand ingesteld op "1", werd niet begrepen.
    3. SOAP-ENV: Client - Het bericht is onjuist opgemaakt of bevat onjuiste informatie.
    4. SOAP-ENV: Server - Er was een probleem met de server, dus het bericht kon niet doorgaan.
  2. - Dit is het tekstbericht met een gedetailleerde beschrijving van de fout.
  3. (Optioneel) - Dit is een tekstreeks die aangeeft wie de fout heeft veroorzaakt.
  4. (Optioneel) - Dit is het element voor toepassingsspecifieke foutmeldingen. De toepassing kan dus een specifiek foutbericht hebben voor verschillende scenario's voor bedrijfslogica.

Voorbeeld voor foutmelding

Hieronder wordt een voorbeeld van een storingsmelding gegeven. De fout wordt gegenereerd als het scenario waarin de client een methode met de naam TutorialID probeert te gebruiken in de klasse GetTutorial.

Het onderstaande foutbericht wordt gegenereerd in het geval dat de methode niet bestaat in de gedefinieerde klasse.

SOAP-ENV:ClientFailed to locate method (GetTutorialID) in class (GetTutorial)

Uitgang:

Wanneer u de bovenstaande code uitvoert, wordt de fout weergegeven als "Kan methode (GetTutorialID) niet vinden in de klas (GetTutorial)"

SOAP-communicatiemodel

Alle communicatie via SOAP verloopt via het HTTP-protocol. Vóór SOAP gebruikten veel webservices de standaard RPC-stijl (Remote Procedure Call) voor communicatie. Dit was het eenvoudigste type communicatie, maar het had veel beperkingen.

Laten we nu in deze SOAP API-zelfstudie het onderstaande diagram bekijken om te zien hoe deze communicatie werkt. Laten we in dit voorbeeld aannemen dat de server een webservice host die twee methoden biedt, zoals

  • GetEmployee - Dit zou alle werknemersgegevens krijgen
  • SetEmployee - Dit zou de waarde van de details zoals personeelsafdeling, salaris, enz. Dienovereenkomstig instellen.

In de normale RPC-stijlcommunicatie zou de client gewoon de methoden in zijn verzoek aanroepen en de vereiste parameters naar de server sturen, en de server zou dan het gewenste antwoord verzenden.

Het bovenstaande communicatiemodel heeft de onderstaande ernstige beperkingen

  1. Niet taalonafhankelijk - De server die de methoden host, zou in een bepaalde programmeertaal zijn en normaal gesproken zouden de oproepen naar de server alleen in die programmeertaal zijn.
  2. Niet het standaardprotocol - Wanneer een oproep wordt gedaan naar de externe procedure, wordt de oproep niet uitgevoerd via het standaardprotocol. Dit was een probleem omdat vrijwel alle communicatie via het web via het HTTP-protocol moest verlopen.
  3. Firewalls - Aangezien RPC-oproepen niet via het normale protocol verlopen, moeten er aparte poorten op de server openstaan ​​om de client met de server te laten communiceren. Normaal gesproken blokkeerden alle firewalls dit soort verkeer en was er over het algemeen veel configuratie nodig om ervoor te zorgen dat dit soort communicatie tussen de client en de server zou werken.

Om alle bovengenoemde beperkingen te overwinnen, zou SOAP dan het onderstaande communicatiemodel gebruiken

  1. De client formatteert de informatie met betrekking tot de procedureaanroep en eventuele argumenten in een SOAP-bericht en stuurt dit naar de server als onderdeel van een HTTP-verzoek. Dit proces van het inkapselen van de gegevens in een SOAP-bericht stond bekend als Marshalling.
  2. De server zou dan het door de cliënt verzonden bericht uitpakken, zien waar de cliënt om vroeg en vervolgens het juiste antwoord als een SOAP-bericht naar de cliënt terugsturen. De praktijk van het uitpakken van een door de klant verzonden verzoek staat bekend als Demarshalling.

Praktisch SOAP-voorbeeld

Laten we nu in deze SoapUI-zelfstudie een praktisch SOAP-voorbeeld bekijken,

Waarschijnlijk een van de beste manieren om te zien hoe SOAP-berichten worden gegenereerd, is door een webservice daadwerkelijk in actie te zien.

In dit onderwerp wordt ingegaan op het gebruik van het Microsoft.Net-framework om een ​​ASMX-webservice te bouwen. Dit type webservice ondersteunt zowel SOAP-versie 1.1 als versie 1.2.

ASMX-webservices genereren automatisch het WSDL-document (Web Service Definition Language). Dit WSDL-document is vereist voor de aanroepende clienttoepassing, zodat de toepassing weet waartoe de webservice in staat is.

In ons voorbeeld gaan we een eenvoudige webservice maken, die zal worden gebruikt om een ​​string terug te sturen naar de applicatie die de webservice aanroept.

Deze webservice wordt gehost in een Asp.Net-webapplicatie. We zullen dan de webservice aanroepen en het resultaat zien dat door de webservice wordt geretourneerd.

Visual Studio laat ons ook zien wat het SOAP-bericht wordt verzonden tussen de webservice en de aanroepende applicatie.

De eerste vereiste om onze webservicetoepassing in te stellen, kan worden gedaan door de onderstaande stappen te volgen.

Zorg ervoor dat Visual Studio 2013 voor dit voorbeeld op uw systeem is geïnstalleerd.

Stap 1) De eerste stap is het maken van een lege ASP.Net-webtoepassing. Klik vanuit Visual Studio 2013 op de menuoptie Bestand-> Nieuw project.

Zodra u op de optie Nieuw project klikt, geeft Visual Studio u een ander dialoogvenster om het type project te kiezen en om de nodige details van het project te geven. Dit wordt uitgelegd in de volgende stap.

Stap 2) In deze stap,

  1. Zorg ervoor dat u eerst de C # -websjabloon van de ASP.NET-webtoepassing kiest. Het project moet van dit type zijn om een ​​SOAP-servicesproject te kunnen maken. Door deze optie te kiezen, voert Visual Studio vervolgens de nodige stappen uit om de vereiste bestanden toe te voegen die vereist zijn voor elke webgebaseerde toepassing.
  2. Geef een naam voor uw project die in ons geval is opgegeven als webservice.asmx. Zorg er vervolgens voor dat u een locatie opgeeft waar de projectbestanden worden opgeslagen.

Als u klaar bent, ziet u het projectbestand dat is gemaakt in uw oplossingsverkenner in Visual Studio 2013.

Stap 3) In deze stap,

We gaan een webservicebestand toevoegen aan ons project

  1. Klik eerst met de rechtermuisknop op het projectbestand, zoals hieronder weergegeven

  1. Zodra u met de rechtermuisknop op het projectbestand klikt, heeft u de kans om de optie "Toevoegen-> Webservice (ASMX) te kiezen om een ​​webservicebestand toe te voegen. Geef gewoon de naam van Tutorial Service op voor het webservicenaambestand.

Stap 4) Voeg de volgende code toe aan uw Tutorial Service asmx-bestand.

Code Verklaring:

  1. Deze regel code geeft een naam voor uw webservicebestand. Dit is een belangrijke stap omdat het plaats maakt voor de clienttoepassing om de webservice op te roepen via de naam van de webservice.
  2. Normaal gesproken wordt een klassenbestand gebruikt om de functionaliteit van een webservice in te kapselen. Het klassenbestand heeft dus de definitie van alle webmethoden die de clienttoepassing enige functionaliteit bieden.
  3. Hier staat [WebMethod] bekend als een attribuut dat een functie beschrijft. De volgende stap creëert een functie genaamd "Guru99WebService", maar met de opname van deze stap zorgt het toevoegen van een [WebMethod] attribuut ervoor dat deze methode kan worden aangeroepen door een clienttoepassing. Als dit kenmerk niet aanwezig is, kan de methode nooit worden aangeroepen door een clienttoepassing.
  4. Hier definiëren we een functie genaamd 'Guru99WebService' die zal worden gebruikt om een ​​string naar de aanroepende clienttoepassing te retourneren. Deze functie is een webservice die kan worden aangeroepen door elke clienttoepassing.
  5. We gebruiken de return-instructie om de string "Dit is een Guru99-webservice" terug te sturen naar de clienttoepassing.

Als de code met succes is uitgevoerd, wordt de volgende uitvoer weergegeven wanneer u uw code in de browser uitvoert.

Uitgang:

  • De output laat duidelijk zien dat de naam van onze webservice "Guru99 Web Service" is, wat het resultaat is van het geven van een naam voor onze webservice.
  • We kunnen ook zien dat we de webservice kunnen aanroepen. Als we op de knop Aanroepen klikken, krijgen we het onderstaande antwoord in de webbrowser.

De bovenstaande output,

  • Het laat duidelijk zien dat door het aanroepen van de webmethode de string "Dit is een Guru99 webservice" wordt geretourneerd.
  • Met Visual Studio kunt u ook het SOAP-berichtverzoek en -antwoord bekijken dat wordt gegenereerd wanneer de bovenstaande webservice wordt aangeroepen.

Het SOAP-verzoek dat wordt gegenereerd wanneer de webservice wordt aangeroepen, wordt hieronder weergegeven.

Code Verklaring:

  1. Het eerste deel van het SOAP-bericht is het envelopelement dat in de voorgaande hoofdstukken werd besproken. Dit is het inkapselingselement dat in elk SOAP-bericht aanwezig is.
  2. De SOAP Body is het volgende element en bevat de feitelijke details van het SOAP-bericht.
  3. Het derde deel is het element dat aangeeft dat we de service willen bellen die 'Guru99WebService' wordt genoemd.

string

Code Verklaring:

  1. Het eerste deel van het SOAP-bericht is het envelopelement dat in de voorgaande hoofdstukken werd besproken. Dit is het inkapselingselement dat in elk SOAP-bericht aanwezig is.
  2. De SOAP Body is het volgende element en bevat de feitelijke details van het SOAP-bericht.
  3. Het interessante deel dat u nu zult zien, is het kenmerk 'string'. Dit vertelt de clienttoepassing dat de webservice die wordt aangeroepen, een object van het type string retourneert. Dit is erg handig als de clienttoepassing die anders niet zou weten wat de webservice retourneert.

Overzicht

  • SOAP is een protocol dat wordt gebruikt om gegevens uit te wisselen tussen applicaties die zijn gebouwd op verschillende programmeertalen.
  • SOAP is gebaseerd op de XML-specificatie en werkt met het HTTP-protocol. Dit maakt het perfect voor gebruik binnen webapplicaties.
  • De SOAP-bouwstenen bestaan ​​uit een SOAP-bericht. Elk SOAP-bericht bestaat uit een envelop-element, een header en een body-element.
  • Het envelopelement is het verplichte element in het SOAP-bericht en wordt gebruikt om alle gegevens in het SOAP-bericht in te kapselen.
  • Het header-element kan worden gebruikt om informatie te bevatten, zoals authenticatie-informatie of de definitie van complexe gegevenstypen.
  • Het body-element is het belangrijkste element dat de definitie van de webmethoden bevat, samen met eventuele parameterinformatie, indien nodig.