Kurz webových služeb SOAP: Co je protokol SOAP? PŘÍKLAD
Co je SOAP?
SOAP je protokol založený na XML pro přístup k webovým službám přes HTTP. Má určitou specifikaci, kterou lze použít ve všech aplikacích.
SOAP je známý jako Simple Object Access Protocol, ale v pozdějších dobách byl jen zkrácen na SOAP v1.2. SOAP je protokol nebo jinými slovy definice toho, jak spolu webové služby komunikují nebo komunikují s klientskými aplikacemi, které je vyvolávají.
SOAP byl vyvinut jako prostřední jazyk, takže aplikace postavené na různých programovacích jazycích spolu mohly snadno komunikovat a vyhnout se extrémnímu úsilí o vývoj.
Úvod do SOAP
V dnešním světě existuje obrovské množství aplikací, které jsou postaveny na různých programovacích jazycích. Může existovat například webová aplikace navržená v Java, další v .Net a další v PHP.
Výměna dat mezi aplikacemi je v dnešním propojeném světě klíčová. Výměna dat mezi těmito heterogenními aplikacemi by však byla složitá. Tomu odpovídá i složitost kódu k provedení této výměny dat.
Jednou z metod používaných v boji proti této složitosti je použití XML (Extensible Markup Language) jako zprostředkujícího jazyka pro výměnu dat mezi aplikacemi.
Každý programovací jazyk rozumí značkovacímu jazyku XML. Proto bylo jako základní médium pro výměnu dat použito XML.
Neexistují však žádné standardní specifikace pro použití XML ve všech programovacích jazycích pro výměnu dat. Zde přichází na řadu SOAP software.
SOAP byl navržen pro práci s XML přes HTTP a měl určitou specifikaci, která by mohla být použita ve všech aplikacích. Na další podrobnosti o protokolu SOAP se podíváme v následujících kapitolách.
Výhody SOAP
SOAP je protokol používaný pro výměnu dat mezi aplikacemi. Níže jsou uvedeny některé z důvodů, proč se používá SOAP.
- Při vývoji webových služeb založených na SOAP musíte mít nějaký jazyk, který lze použít pro webové služby pro komunikaci s klientskými aplikacemi. SOAP je dokonalé médium, které bylo vyvinuto za účelem dosažení tohoto účelu. Tento protokol také doporučuje konsorcium W3C, které je řídícím orgánem pro všechny webové standardy.
- SOAP je odlehčený protokol, který se používá pro výměnu dat mezi aplikacemi. Všimněte si klíčového slova 'světlo.' Protože programování SOAP je založeno na jazyce XML, který je sám o sobě lehkým jazykem pro výměnu dat, proto SOAP jako protokol, který také spadá do stejné kategorie.
- SOAP je navržen tak, aby byl nezávislý na platformě a je také navržen jako nezávislý na operačním systému. Protokol SOAP může pracovat s jakoukoli aplikací založenou na programovacím jazyce na obou Windows a Linux platforma.
- Funguje na protokolu HTTP – SOAP funguje na protokolu HTTP, což je výchozí protokol používaný všemi webovými aplikacemi. Neexistuje tedy žádný druh přizpůsobení, který je nutný ke spuštění webových služeb postavených na protokolu SOAP, aby fungovaly na World Wide Web.
Stavební bloky SOAP
Specifikace SOAP definuje něco známého jako „zpráva SOAP“, což je to, co je odesláno webové službě a klientské aplikaci.
Níže uvedený diagram architektury SOAP ukazuje různé stavební bloky zprávy SOAP.
Zpráva SOAP není nic jiného než pouhý dokument XML, který má níže uvedené součásti.
- Prvek Envelope, který identifikuje dokument XML jako zprávu SOAP – Jedná se o část obsahující zprávu SOAP a používá se k zapouzdření všech podrobností ve zprávě SOAP. Toto je kořenový prvek ve zprávě SOAP.
- Element Header, který obsahuje informace záhlaví – Element header může obsahovat informace, jako jsou ověřovací údaje, které může použít volající aplikace. Může také obsahovat definici komplexních typů, které by mohly být použity ve zprávě SOAP. Ve výchozím nastavení může zpráva SOAP obsahovat parametry, které mohou být jednoduchého typu, jako jsou řetězce a čísla, ale mohou být také složitého typu objektu.
Níže je uveden jednoduchý příklad komplexního typu služby SOAP.
Předpokládejme, že jsme chtěli poslat strukturovaný datový typ, který měl kombinaci „Název výukového programu“ a „Výukový program Description“, pak bychom definovali komplexní typ, jak je uvedeno níže.
Komplexní typ je definován tagem element . Všechny požadované prvky struktury spolu s jejich příslušnými datovými typy jsou pak definovány v kolekci komplexních typů.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Element Body, který obsahuje informace o volání a odpovědi – Tento element obsahuje skutečná data, která je třeba odeslat mezi webovou službou a volající aplikací. Níže je uveden příklad webové služby SOAP těla SOAP, které ve skutečnosti funguje na komplexním typu definovaném v sekci záhlaví. Zde je odpověď na název a tutoriál Description, který je odeslán do volací aplikace, která volá tuto webovou službu.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
Struktura zpráv SOAP
Jedna věc, kterou je třeba poznamenat, je, že zprávy SOAP jsou obvykle automaticky generovány webovou službou, když je volána.
Kdykoli klientská aplikace zavolá metodu ve webové službě, webová služba automaticky vygeneruje zprávu SOAP, která bude obsahovat potřebné údaje o datech, která budou odeslána z webové služby do klientské aplikace.
Jak bylo uvedeno v předchozím tématu tohoto výukového programu SOAP, jednoduchá zpráva SOAP má následující prvky –
- Prvek Envelope
- Prvek záhlaví a
- Element těla
- Prvek Chyba (Volitelné)
Podívejme se na níže uvedený příklad jednoduché zprávy SOAP a podívejme se, co prvek skutečně dělá.
- Jak je vidět z výše uvedené zprávy SOAP, první částí zprávy SOAP je prvek obálky, který se používá k zapouzdření celé zprávy SOAP.
- Dalším prvkem je tělo SOAP, které obsahuje podrobnosti o aktuální zprávě.
- Naše zpráva obsahuje webovou službu s názvem „Guru99WebService“.
- „Guru99Webservice“ přijímá parametr typu „int“ a má název TutorialID.
Nyní bude výše uvedená zpráva SOAP předána mezi webovou službou a klientskou aplikací.
Můžete vidět, jak užitečné jsou výše uvedené informace pro klientskou aplikaci. Zpráva SOAP sděluje klientské aplikaci, jaké je jméno webové služby a také jaké parametry očekává a také jaký je typ jednotlivých parametrů, které webová služba přebírá.
SOAP Envelope Element
Prvním bitem stavebního bloku je SOAP Envelope.
Obálka SOAP se používá k zapouzdření všech nezbytných podrobností zpráv SOAP, které jsou vyměňovány mezi webovou službou a klientskou aplikací.
Element obálky SOAP se používá k označení začátku a konce zprávy SOAP. To umožňuje klientské aplikaci, která volá webovou službu, vědět, kdy končí zpráva SOAP.
Na prvku obálky SOAP lze zaznamenat následující body.
- Každá zpráva SOAP musí mít kořenový prvek Envelope. Je naprosto povinné, aby zpráva SOAP měla prvek obálky.
- Každý prvek obálky musí mít alespoň jeden prvek těla mýdla.
- Pokud prvek Envelope obsahuje prvek záhlaví, nesmí obsahovat více než jeden a musí se objevit jako první podřízený prvek obálky před prvkem body.
- Obálka se změní, když se změní verze SOAP.
- Procesor SOAP vyhovující v1.1 generuje chybu po přijetí zprávy obsahující jmenný prostor obálky v1.2.
- Procesor SOAP kompatibilní s verzí 1.2 generuje chybu Neshody verzí, pokud obdrží zprávu, která neobsahuje obor názvů obálek verze 1.2.
Níže je uveden příklad SOAP API verze 1.2 prvku obálky SOAP.
<?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>
Chybová zpráva
Když je podán požadavek na webovou službu SOAP, vrácená odpověď může mít buď 2 formy, které jsou úspěšnou odpovědí nebo chybovou odpovědí. Když je generován úspěch, odpověď ze serveru bude vždy zpráva SOAP. Ale pokud jsou generovány chyby SOAP, jsou vráceny jako chyby „HTTP 500“.
Zpráva o chybě SOAP se skládá z následujících prvků.
- – Toto je kód, který označuje kód chyby. Chybový kód může být kteroukoli z níže uvedených hodnot
- SOAP-ENV:VersionMismatch – Toto je případ, kdy je zjištěn neplatný jmenný prostor pro prvek SOAP Envelope.
- SOAP-ENV:MustUnderstand – Bezprostřední podřízený prvek prvku Header s atributem mustUnderstand nastaveným na „1“ nebyl pochopen.
- SOAP-ENV:Client – Zpráva byla nesprávně vytvořena nebo obsahovala nesprávné informace.
- SOAP-ENV:Server – Došlo k problému se serverem, takže zpráva nemohla pokračovat.
- – Toto je textová zpráva, která poskytuje podrobný popis chyby.
- (Volitelný)– Jedná se o textový řetězec, který označuje, kdo poruchu způsobil.
- (Volitelný) – Toto je prvek pro chybové zprávy specifické pro aplikaci. Aplikace tedy může mít specifickou chybovou zprávu pro různé scénáře obchodní logiky.
Příklad chybového hlášení
Níže je uveden příklad chybového hlášení. Chyba se vygeneruje, pokud se ve scénáři, kde se klient pokouší použít metodu nazvanou TutorialID ve třídě GetTutorial.
Níže uvedená chybová zpráva se vygeneruje v případě, že metoda v definované třídě neexistuje.
<?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ýstup:
Když spustíte výše uvedený kód, zobrazí se chyba jako „Nepodařilo se najít metodu (GetTutorialID) ve třídě (GetTutorial)“
SOAP komunikační model
Veškerá komunikace pomocí SOAP probíhá přes protokol HTTP. Před SOAP, hodně webové služby používal pro komunikaci standardní styl RPC (Remote Procedure Call). Byl to nejjednodušší typ komunikace, ale měl spoustu omezení.
Nyní v tomto tutoriálu SOAP API se podívejme na níže uvedený diagram, abychom viděli, jak tato komunikace funguje. V tomto příkladu předpokládejme, že server hostí webovou službu, která poskytuje 2 metody jako
- GetEmployee – Tím získáte všechny podrobnosti o zaměstnancích
- Nastavit zaměstnance – Tím by se podle toho nastavila hodnota podrobností, jako je oddělení zaměstnanců, plat atd.
Při běžné komunikaci ve stylu RPC by klient pouze zavolal metody ve svém požadavku a poslal požadované parametry na server a server by pak poslal požadovanou odpověď.
Výše uvedený komunikační model má níže uvedená závažná omezení
- Není jazykově nezávislý – Server hostující metody by byl v konkrétním programovacím jazyce a normálně by volání na server byla pouze v tomto programovacím jazyce.
- Ne standardní protokol – Při volání na vzdálenou proceduru se volání neprovádí prostřednictvím standardního protokolu. To byl problém, protože většinou veškerá komunikace přes web musela probíhat přes protokol HTTP.
- firewally – Vzhledem k tomu, že volání RPC neprobíhají přes běžný protokol, musí být na serveru otevřeny samostatné porty, aby mohl klient komunikovat se serverem. Za normálních okolností by všechny firewally blokovaly tento druh provozu a k zajištění toho, aby tento druh komunikace mezi klientem a serverem fungoval, bylo obecně vyžadováno mnoho konfigurace.
K překonání všech výše uvedených omezení by pak SOAP použil níže uvedený komunikační model
- Klient naformátuje informace týkající se volání procedury a jakýchkoli argumentů do zprávy SOAP a odešle ji na server jako součást požadavku HTTP. Tento proces zapouzdření dat do zprávy SOAP byl známý jako Marshalling.
- Server by pak rozbalil zprávu odeslanou klientem, viděl, co klient požadoval, a poté poslal příslušnou odpověď zpět klientovi jako zprávu SOAP. Praxe rozbalování požadavku zaslaného klientem je známá jako Demarshalling.
Praktický příklad SOAP
Nyní v tomto tutoriálu SoapUI se podívejme na praktický příklad SOAP,
Pravděpodobně jedním z nejlepších způsobů, jak zjistit, jak se generují zprávy SOAP, je skutečně vidět webovou službu v akci.
Toto téma se bude zabývat použitím Microsoft.Net framework pro vytvoření webové služby ASMX. Tento typ webové služby podporuje SOAP verze 1.1 i verze 1.2.
Webové služby ASMX automaticky generují Web Service Definition Language (WSDL) dokument. Tento dokument WSDL vyžaduje volající klientská aplikace, aby aplikace věděla, co je webová služba schopna dělat.
V našem příkladu vytvoříme jednoduchou webovou službu, která bude sloužit k vrácení řetězce do aplikace, která webovou službu volá.
Tato webová služba bude hostována v asp.net webová aplikace. Poté zavoláme webovou službu a uvidíme výsledek, který webová služba vrátí.
Visual Studio nám také ukáže, jakou zprávu SOAP předává mezi webovou službou a volající aplikací.
Prvním předpokladem pro nastavení naší webové servisní aplikace, kterou lze provést podle níže uvedených kroků.
Ujistěte se, že máte v systému nainstalované Visual Studio 2013 pro tento příklad.
Krok 1) Prvním krokem je vytvoření prázdné webové aplikace ASP.Net. Ve Visual Studiu 2013 klikněte na možnost nabídky Soubor->Nový projekt.
Jakmile kliknete na možnost Nový projekt, Visual Studio vám nabídne další dialogové okno pro výběr typu projektu a zadání nezbytných podrobností o projektu. To je vysvětleno v dalším kroku.
Krok 2) V tomto kroku,
- Ujistěte se, že nejprve vyberete C# webová šablona webové aplikace ASP.NET. Projekt musí být tohoto typu, aby bylo možné vytvořit projekt SOAP služeb. Výběrem této možnosti Visual Studio poté provede nezbytné kroky k přidání požadovaných souborů, které vyžaduje jakákoli webová aplikace.
- Zadejte název svého projektu, který byl v našem případě uveden jako webservice.asmx. Poté se ujistěte, že uvedete umístění, kam budou soubory projektu uloženy.
Po dokončení uvidíte soubor projektu vytvořený v průzkumníku řešení v aplikaci Visual Studio 2013.
Krok 3) V tomto kroku,
Do našeho projektu přidáme soubor webové služby
- První Klikněte pravým tlačítkem myši na soubor projektu, jak je znázorněno níže
- Jakmile kliknete pravým tlačítkem na soubor projektu, máte možnost vybrat možnost „Přidat->Webová služba (ASMX) pro přidání souboru webové služby. Stačí zadat název Tutorial Service pro soubor názvu webové služby.
Krok 4) Přidejte následující kód do souboru asmx výukové služby.
Vysvětlení kódu:
- Tento řádek kódu poskytuje název souboru webové služby. Toto je důležitý krok, protože to umožňuje klientské aplikaci volat webovou službu prostřednictvím názvu webové služby.
- Normálně se k zapouzdření funkčnosti webové služby používá soubor třídy. Takže soubor třídy bude mít definici všech webových metod, které poskytnou klientské aplikaci určitou funkčnost.
- Zde je [WebMethod] známý jako atribut, který popisuje funkci. Následující krok vytvoří funkci nazvanou „Guru99WebService“, ale zahrnutím tohoto kroku přidání atributu [WebMethod] zajišťuje, že tuto metodu lze vyvolat klientskou aplikací. Pokud tento atribut není na svém místě, pak nelze metodu nikdy volat klientskou aplikací.
- Zde definujeme funkci nazvanou 'Guru99WebService', která bude použita k vrácení řetězce volající klientské aplikaci. Tato funkce je webová služba, kterou může volat jakákoli klientská aplikace.
- K vrácení řetězce „Toto je webová služba Guru99“ klientské aplikaci používáme příkaz return.
Pokud je kód úspěšně spuštěn, při spuštění kódu v prohlížeči se zobrazí následující výstup.
Výstup:
- Výstup jasně ukazuje, že název naší webové služby je „Guru99 Web Service“, což je výsledek zadání názvu naší webové služby.
- Můžeme také vidět, že můžeme vyvolat webovou službu. Pokud klikneme na tlačítko Vyvolat, dostaneme ve webovém prohlížeči níže uvedenou odpověď.
Výše uvedený výstup,
- Jasně ukazuje, že vyvoláním webové metody se vrátí řetězec „Toto je webová služba Guru99“.
- Visual Studio také umožňuje zobrazit požadavek na zprávu SOAP a odpověď, která je generována při volání výše uvedené webové služby.
Požadavek SOAP, který je generován při volání webové služby, je uveden níže.
Vysvětlení kódu:
- První částí zprávy SOAP je prvek obálky, o kterém se hovořilo v předchozích kapitolách. Toto je zapouzdřující prvek, který je přítomen v každé zprávě SOAP.
- Tělo SOAP je dalším prvkem a obsahuje skutečné podrobnosti zprávy SOAP.
- Třetí částí je prvek, který určuje, že chceme volat službu, která se nazývá '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>
Vysvětlení kódu:
- První částí zprávy SOAP je prvek obálky, o kterém se hovořilo v předchozích kapitolách. Toto je zapouzdřující prvek, který je přítomen v každé zprávě SOAP.
- Tělo SOAP je dalším prvkem a obsahuje skutečné podrobnosti zprávy SOAP.
- Zajímavá část, kterou nyní uvidíte, je atribut 'string'. To sděluje klientské aplikaci, že volaná webová služba vrací objekt typu string. To je velmi užitečné, protože pokud klientská aplikace, která by jinak nevěděla, co webová služba vrací.
Shrnutí
- SOAP je protokol, který se používá k výměně dat mezi aplikacemi, které jsou postaveny na různých programovací jazyky.
- SOAP je postaven na specifikaci XML a pracuje s protokolem HTTP. Díky tomu je ideální pro použití ve webových aplikacích.
- Stavební bloky SOAP se skládají ze zprávy SOAP. Každá zpráva SOAP se skládá z prvku obálky, záhlaví a prvku těla.
- Prvek obálky je povinný prvek ve zprávě SOAP a používá se k zapouzdření všech dat ve zprávě SOAP.
- Element záhlaví lze použít k tomu, aby obsahoval informace, jako jsou ověřovací informace nebo definice komplexních datových typů.
- Element body je hlavním prvkem, který obsahuje definici webových metod spolu s případnými informacemi o parametrech.