1 / 30

Web услуги – SOAP протокол

Web услуги – SOAP протокол. Въведение в SOAP. SOAP е XML – базиран протокол, позволяващ обмен на информация между приложенията, изпълнявани от различни операционни системи, с различни технологии и езици чрез HTTP . Какво представлява SOAP?

teige
Download Presentation

Web услуги – SOAP протокол

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Web услуги – SOAP протокол

  2. Въведение в SOAP • SOAPе XML– базиран протокол, позволяващ обмен на информация между приложенията, изпълнявани от различни операционни системи, с различни технологии и езици чрез HTTP. • Какво представлява SOAP? • SOAP – съкращение наSimple Object Access Protocol • SOAP е протокол за връзка • SOAP е формат за изпращане на съобщения • SOAP е създаден за връзка чрез Internet • SOAP е платформено независим • SOAP е езиково независим • SOAP се базира на XML • SOAP е прост и с възможност за разширение • SOAP е развит като W3C стандарт

  3. Въведение в SOAP • Градивни елементи на SOAP съобщението (XML документ) • Елемент Envelope- определя XML документа като SOAP съобщение • Незадължителен елемент Header– съдържа заглавна информация • Задължителен елемент Body– съдържа информация за извикване и за отговор • Незадължителен елемент Fault– осигурява информация за грешките по време на обработката на съобщението • Всички тези елементи са декларирани в област на данните по подразбиране за SOAP envelope: http://www.w3.org/2001/12/soap-envelope • Област на данни по подразбиране за SOAP кодиране и типове данни: http://www.w3.org/2001/12/soap-encoding

  4. Въведение в SOAP • Синтактични правила • SOAP съобщението трябва да е кодирано с XML • SOAP съобщението трябва да използва SOAP Envelope namespace • SOAP съобщението трябва да използва SOAP Encoding namespace • SOAP съобщението не трябва да съдържа указване на DTD • SOAP съобщението не трябва да съдържа XML обработващи инструкции

  5. Въведение в SOAP • Скелет на SOAP съобщение <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> ... ... </soap:Header> <soap:Body> ... ... <soap:Fault> ... ... </soap:Fault> </soap:Body> </soap:Envelope>

  6. Въведение в SOAP • Елемент SOAP ENVELOPE • Задължителният елементSOAP Envelopeе корен заSOAPсъобщението. Той дефинира XML документа като SOAP съобщение. • Атрибутът encodingStyleдефинира типовете данни, използвани в документа. Той може да фигурира при всеки SOAP елемент и ще се прилага за съответния елемент и неговите наследници. SOAP съобщението няма подразбиращо се кодиране. <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> ... //Информацията на съобщението се намира тук ... </soap:Envelope> soap:encodingStyle="URI"

  7. Въведение в SOAP • Елемент SOAP HEADER • Ако има такъв елемент, той трябва да бъде първи childелемент наEnvelope. • Непосредствените елементи childнаHeaderтрябва да се определят от област данни. • SOAP дефинира 3 атрибута в областта данни по подразбиране ("http://www.w3.org/2001/12/soap-envelope"). Те са: actor, mustUnderstandиencodingStyle. • Атрибутите, дефинирани в SOAP Headerопределят как реципиента ще обработва SOAP съобщението (кои части и задължително ли). <?xml version="1.0"?> <soap:Envelope . . . <soap:Header> <m:Trans xmlns:m="http://www.w3schools.com/transaction/" soap:mustUnderstand="1">234</m:Trans> </soap:Header> . . . </soap:Envelope> Съдържание на HEADER: "Trans" елемент, атрибут "mustUnderstand" със стойност "1", стойност 234.

  8. Въведение в SOAP • Елемент SOAP HEADER • SOAP съобщението може да пътува от изпращащия до получателя, минавайки през различни точки по време на пътя. Не всички части на съобщението могат да се считат за задължителни • Атрибут actorможе да се използва за да адресира елемент Headerкъм конкретна крайна точка. . . . <soap:Header> <m:Trans xmlns:m="http://www.w3schools.com/transaction/" soap:actor="http://www.w3schools.com/appml/"> 234 </m:Trans> </soap:Header> . . . soap:actor="URI"

  9. Въведение в SOAP • Елемент SOAP HEADER • Атрибут mustUnderstand се използва за да укаже дали headerвхода е задължителен или не за реципиента по отношение на обработката. • Ако се добави "mustUnderstand="1"към елемент childна елементаHeader, то последното дава индикация, че приемникът, обработвайки Header трябва да разпознае елемента. Ако приемникът не го разпознае, то трябва да даде грешка при обработката на Header. . . . <soap:Header> <m:Trans xmlns:m="http://www.w3schools.com/transaction/" soap:mustUnderstand="1"> 234 </m:Trans> </soap:Header> ... soap:mustUnderstand= "0 | 1"

  10. Въведение в SOAP • Елемент SOAP BODY • Задължителният елемент SOAP Body съдържа SOAP съобщението, предназначено за задължителната крайна точка. • Непосредствените елементи childна елементаSOAP Bodyмогат да бъдат определени с област данни. SOAP дефинира един елемент в елементаBodyв областта данни по подразбиране ("http://www.w3.org/2001/12/soap-envelope"). Това е елемента SOAP Fault, който се използва за индикация на съобщение за грешка. m:GetPrice и item елементи са специфични за приложението (не са част от SOAP стандарта) . . . <soap:Body> <m:GetPrice xmlns:m="http://www.w3schools.com/prices"> <m:Item>Apples</m:Item> </m:GetPrice> </soap:Body> . . . Търси се цената на ябълките

  11. Въведение в SOAP • Елемент SOAP BODY • SOAP отговорът изглежда по следния начин: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body> <m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices"> <m:Price>1.90</m:Price> </m:GetPriceResponse> </soap:Body> </soap:Envelope>

  12. Въведение в SOAP • Елемент SOAP FAULT • Съобщение за грешка от SOAP съобщението се пренася в елементFault. • Ако има елемент Fault, то той трябва да е елемент “child”на елемента Body. • ЕлементFaultможе да бъде единствен в SOAP съобщението. • Елементът Faultима следните под-елементи: Под-елементОписание <faultcode> Код за идентификация на грешка <faultstring> Обяснение на грешката <faultactor> Причинител на грешката <detail> Съдържа специфична за приложението информация свързана към елемента Body

  13. Въведение в SOAP • Елемент SOAP FAULT • Стойностите на faultcode,дефинирани по-долу трябва да се използват в елемента faultcodeпри описанието на грешки: ГрешкаОписание VersionMismatchНамерена невалидна област данни за елемент SOAP Envelope MustUnderstandЕлементът “child”на Header с атрибут mustUnderstandустановен в "1“ не е разбран ClientСъобщението е некоректно създадено или съдържа некоректна информация ServerИма проблем със сървъра и съобщението не може да се обработи

  14. SOAP и HTTP • HTTPпротоколът комуникира над TCP/IP. Един HTTP клиент се свързва с HTTP сървър, използвайки TCP. След установяване на връзката, клиентът може да изпрати HTTP запитващо съобщение към сървъра: • Сървърът обработва запитването и изпраща HTTP отговор обратно към клиента. Отговорът съдържа код на състоянието, който индицира състоянието на запитването: POST /item HTTP/1.1 Host: 189.123.345.239 Content-Type: text/plain Content-Length: 200 200 OK Content-Type: text/plain Content-Length: 200 Сървърът връща код на състоянието 200. Това е стандартен успешен код за HTTP.

  15. SOAP и HTTP 400 Bad Request Content-Length: 0 • Ако сървърът не може да декодира запитването, то той ще върне: • Методът SOAP еHTTP запитване/отговор, който спазва кодиращите правила на SOAP. • HTTP + XML = SOAP • Запитването SOAP може да бъдеHTTP POSTилиHTTP GETзапитване. • Запитването HTTP POSTспецифицира поне две HTTP заглавия: Content-TypeиContent-Length. • Заглавието Content-Typeза SOAP запитване и отговор дефинира тип MIME за съобщението и символно кодиране (незадължително), което се използва за XML bodyна запитването или отговора.

  16. SOAP и HTTP Синтаксис Content-Type: MIMEType; charset=character-encoding • Заглавието Content-Lengthза SOAP запитване и отговор специфицира брой байтове в тялото на запитването или отговора. Пример POST /item HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8 Синтаксис Content-Length: bytes Пример POST /item HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8 Content-Length: 250

  17. SOAP - пример • ЗапитванеGetStockPriceсе изпраща към сървъра. Запитването има параметър StockName. ПараметърътPriceще се върне в отговор.Областта данни за функцията е дефинирана на адрес:http://www.example.org/stock. SOAP запитване POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock">    <m:GetStockPrice> <m:StockName>IBM</m:StockName>      </m:GetStockPrice> </soap:Body> </soap:Envelope>

  18. SOAP - пример • ЗапитванеGetStockPrice– обяснения • Съобщението се транспортира чрез команда HTTP POST. Параметърът Host указва адреса на сървъра, към който е запитването за цената на стоката. • Envelope съдържа: 1) декларация на областта данни, характерна за SOAP; 2) атрибут за стила на кодиране на данните в съобщението (зависи от версията на SOAP). • Header отсъства в примера. • Body съдържа елемент GetStockPrice, дефиниран в област данни зависеща от приложението. Този елемент може да се счита от целевото приложение като извикване на метод GetStockPriceот обекта http://www.example.org/stock.

  19. SOAP - пример SOAP отговор HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope>

  20. WSDL и SOAP • WSDL (Web Services Description Language) е език базиран на XML и използван за описание и локализиране на Web услуги. • Web услугите са софтуерни компоненти, които са достъпни в intranet, extranet иInternet на базата на Web технологии и стандартизирана XML-базирана система за съобщения. • WSDLописва Web услугата и предоставяната функционалност, а SOAPсе използва от приложението – клиент за извикване на функциите от WSDLописанието. • ЕдинWSDLдокумент е XML документ. • Той съдържа множество от дефиниции за описание на web услугата като съдържа следните елементи: • <portType> - операциите, извършвани от web услугата • <message> - съобщенията, използвани от web услугата • <types> - типовете данни, използвани от web услугата • <binding> - протоколите за връзка, използвани от web услугата

  21. WSDL <definitions> <types> definition of types........ </types> <message> definition of a message.... </message> <portType> definition of a port....... </portType> <binding> definition of a binding.... </binding> </definitions> Структура на WSDL документ WSDLдокументът може да съдържа и други елементи като разширения и елементи-услуги, които позволяват групиране на дефинициите на няколко webуслуги в единWSDLдокумент.

  22. WSDL • WSDL Port • Елементът <portType> описва web услугата, операциите, които могат да бъдат извършени и включените съобщения. • Елементът <portType> може да се сравни с библиотечна функция (или модул или клас) от традиционното програмиране. • WSDL Message • Елементът<message>дефинира елементите данни на операцията. • Всяко съобщение може да се състои от една или повече части. Частите могат да се сравнят с параметри на функция. • WSDL Type • Елементът<types>дефинира типа данни, използвани от webуслугата. • За платформена независимост WSDLизползва синтаксиса наXML Schemaза дефиниране на типовете данни.

  23. WSDL • WSDL Binding • Елементът <binding>дефинира формата на съобщението и особеностите на протокола за всеки порт. • WSDL пример Опростен WSDLдокумент <message name="getTermRequest"> <part name="term" type="xs:string"/> </message> <message name="getTermResponse"> <part name="value" type="xs:string"/> </message> <portType name="glossaryTerms"> <operation name="getTerm"> <input message="getTermRequest"/><output message="getTermResponse"/> </operation></portType>

  24. WSDL • WSDL пример – обяснения • Елементът<portType>дефинира"glossaryTerms"като име на port, а"getTerm"като име на операция. • Операцията"getTerm"има едно входно съобщение, наречено "getTermRequest"и изходно съобщение, наречено "getTermResponse". • Елементите<message>дефинират частите на всяко съобщение и свързаните типове данни. • В сравнение с традиционното програмиране, glossaryTermsе библиотека а, "getTerm"е функция с "getTermRequest"за входен параметър иgetTermResponseкато резултантен параметър.

  25. WSDL • WSDLPorts – описват интерфейсите (легалните операции) представени от web услугата. • Типове операции • Типът заявка – отговор е най-общият тип, но WSDLдефинира четири типа: ТипДефиниция One-way Операцията може да получи съобщение, но няма да върне отговор Request-response Операцията може да получи заявка и ще върне отговор Solicit-response Операцията може да изпрати заявка и ще чака за отговор Notification Операцията може да изпрати заявка, но няма да чака за отговор

  26. WSDL • WSDLPorts • Операция One-way – пример • Операцията"setTerm"позволява вход на нови съобщения, използвайки съобщението "newTermValues"с входни параметри "term"и"value". Но не е дефиниран изход за операцията. <message name="newTermValues"> <part name="term" type="xs:string"/> <part name="value" type="xs:string"/> </message> <portType name="glossaryTerms"> <operation name="setTerm"> <input name="newTerm" message="newTermValues"/> </operation> </portType > Порт "glossaryTerms" дефинира операцияone-wayс име"setTerm"

  27. WSDL <message name="getTermRequest"> <part name="term" type="xs:string"/> </message> <message name="getTermResponse"> <part name="value" type="xs:string"/> </message> <portType name="glossaryTerms"><operation name="getTerm"><input message="getTermRequest"/><output message="getTermResponse"/></operation></portType> • WSDLPorts • Операция Request-response – пример • Операция"getTerm"изисква входно съобщение, наречено "getTermRequest"с параметър"term“ище върне изходно съобщение, наречено "getTermResponse"с параметър "value". Порт"glossaryTerms"дефинира операцияrequest-responseнаречена"getTerm".

  28. WSDL • WSDLBinding (свързване към) SOAP • WSDL bindings дефинира формат на съобщението и детайлите на протокола за web услугата. • Операция Request-response – пример <message name="getTermRequest"> 1/2 <part name="term" type="xs:string"/> </message> <message name="getTermResponse"> <part name="value" type="xs:string"/> </message> <portType name="glossaryTerms"><operation name="getTerm"><input message="getTermRequest"/><output message="getTermResponse"/></operation></portType>

  29. WSDL Два атрибута на елемента binding: name – име на връзката; type – указва порта на връзката (glossaryTerms) • WSDLBinding (свързване към) SOAP • Операция Request-response – пример <binding type="glossaryTerms" name="b1"> 2/2 <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <operation> <soap:operation soapAction="http://example.com/getTerm"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> Два атрибута на елемента soap:binding: style – document; transport – дефинира SOAPпротокола за използване (http)

  30. WSDL • WSDLBinding (свързване към) SOAP • Операция Request-response – пример • Елементът operationдефинира всяка операция, която портът открива. • За всяка операция трябва да се дефинира съответноSOAPдействие. • Необходимо е и специфициране на кодирането на входа и изхода. За случая се използва "literal".

More Related