Simple Object Access Protocol (SOAP) - pangkalahatang paglalarawan. SOAP protocol. Pangunahing konsepto. Istraktura ng Mensahe ng SOAP

Bahaging liriko.

Isipin na ikaw ay nagpatupad o nagpapatupad ng isang tiyak na sistema na dapat ma-access mula sa labas. Yung. mayroong isang tiyak na server kung saan kailangan mong makipag-usap. Halimbawa ng isang web server.

Ang server na ito ay maaaring magsagawa ng maraming mga aksyon, magtrabaho kasama ang database, magsagawa ng ilang mga kahilingan ng third-party sa iba pang mga server, gumawa ng ilang mga kalkulasyon, atbp. mabuhay at posibleng umunlad ayon sa scenario na alam niya (i.e. ayon sa scenario ng mga developer). Hindi kawili-wili para sa isang tao na makipag-ugnayan sa naturang server, dahil maaaring hindi niya magawa/nais na magbigay ng magagandang pahina na may mga larawan at iba pang nilalamang madaling gamitin. Ito ay nakasulat at gumagana upang gumana at magbigay ng data kapag hiniling dito, nang hindi nababahala na ito ay nababasa ng tao, ang kliyente ang haharapin ito mismo.

Ang ibang mga system, na nag-a-access sa server na ito, ay maaari nang itapon ang data na natanggap mula sa server na ito sa kanilang sariling paghuhusga - proseso, maipon, isyu sa kanilang mga kliyente, atbp.

Well, ang isa sa mga pagpipilian para sa pakikipag-usap sa mga naturang server ay SOAP. SOAP xml message exchange protocol.

Praktikal na bahagi.

Ang isang serbisyo sa web (ito ang pangalan ng kung ano ang ibinibigay ng server at kung ano ang ginagamit ng mga kliyente) ay ginagawang posible na makipag-ugnayan sa server na may malinaw na nakabalangkas na mga mensahe. Ang katotohanan ay ang serbisyo sa web ay hindi tumatanggap ng anumang data. Ang serbisyo sa web ay tutugon nang may error sa anumang mensaheng hindi sumusunod sa mga patakaran. Ang error, sa pamamagitan ng paraan, ay magkakaroon din sa xml form na may malinaw na istraktura (na hindi totoo tungkol sa teksto ng mensahe).

WSDL (Web Services Description Language). Ang mga panuntunan kung saan binubuo ang mga mensahe para sa serbisyo sa web ay inilalarawan din gamit ang xml at mayroon ding malinaw na istraktura. Yung. Kung ang isang serbisyo sa web ay nagbibigay ng kakayahang tumawag sa isang pamamaraan, dapat nitong payagan ang mga kliyente na malaman kung anong mga parameter ang ginagamit para sa pamamaraang ito. Kung ang serbisyo sa web ay umaasa ng isang string para sa Method1 bilang isang parameter at ang string ay dapat na pinangalanang Param1, ang mga panuntunang ito ay tutukuyin sa paglalarawan ng serbisyo sa web.

Hindi lamang mga simpleng uri, kundi pati na rin ang mga bagay at koleksyon ng mga bagay ay maaaring maipasa bilang mga parameter. Ang paglalarawan ng isang bagay ay bumaba sa isang paglalarawan ng bawat bahagi ng bagay. Kung ang isang bagay ay binubuo ng ilang mga patlang, ang bawat patlang ay inilarawan, ang uri nito, pangalan (ano ang mga posibleng halaga). Ang mga field ay maaari ding maging kumplikadong uri, at iba pa hanggang sa ang paglalarawan ng mga uri ay magtatapos sa mga simple - string, boolean, numero, petsa... Gayunpaman, ang ilang partikular na uri ay maaaring maging simple, mahalaga na ang mga kliyente maaaring maunawaan kung anong mga halaga ang maaaring taglay nito.

Para sa mga kliyente, sapat na malaman ang url ng serbisyo sa web; ang wsdl ay palaging nasa malapit, kung saan makakakuha ka ng ideya ng mga pamamaraan at ang kanilang mga parameter na ibinibigay ng serbisyo sa web na ito.

Ano ang mga pakinabang ng lahat ng mga kampana at sipol na ito:

  • Sa karamihan ng mga system, awtomatikong nangyayari ang paglalarawan ng mga pamamaraan at uri. Yung. ang programmer sa server ay kailangan lamang na sabihin na ang pamamaraang ito ay maaaring tawagan sa pamamagitan ng isang serbisyo sa web, at ang paglalarawan ng wsdl ay awtomatikong bubuo.
  • Ang paglalarawan, na may malinaw na istraktura, ay nababasa ng sinumang kliyente ng sabon. Yung. anuman ang serbisyo sa web, mauunawaan ng kliyente kung anong data ang natatanggap ng serbisyo sa web. Gamit ang paglalarawang ito, ang kliyente ay maaaring bumuo ng sarili nitong panloob na istraktura ng mga klase ng object, ang tinatawag na. binding" at. Bilang resulta, ang programmer na gumagamit ng serbisyo sa web ay kailangang magsulat ng isang bagay tulad ng (pseudocode):

    NewUser:=TSoapUser.Create("Vasya","Pupkin","admin"); soap.AddUser(NewUser);

  • Awtomatikong pagpapatunay.

    • xml pagpapatunay. Ang xml ay dapat na maayos na nabuo. Di-wastong xml - isang error kaagad sa kliyente, hayaan siyang ayusin ito.
    • schema-validation. xml ay dapat magkaroon ng isang tiyak na istraktura. Ang xml ay hindi tumutugma sa schema - kaagad na isang error sa kliyente, hayaan siyang ayusin ito.
    • Ang pag-verify ng data ay isinasagawa ng soap server upang ang mga uri ng data at mga paghihigpit ay tumugma sa paglalarawan.
  • Ang pahintulot at pagpapatunay ay maaaring ipatupad gamit ang isang hiwalay na paraan. katutubo. o gamit ang http authorization.
  • Ang mga serbisyo sa web ay maaaring gumana pareho sa pamamagitan ng soap protocol at sa pamamagitan ng http, iyon ay, sa pamamagitan ng get requests. Iyon ay, kung ang mga parameter ay simpleng data (walang istraktura), maaari mo lamang tawagan ang karaniwang get www.site.com/users.asmx/GetUser?Name=Vasia o mag-post. Gayunpaman, ito ay hindi sa lahat ng dako at hindi palaging.
  • ... tingnan sa Wikipedia

Mayroon ding maraming mga kawalan:

  • Hindi makatwirang laki ng mensahe. Well, dito ang mismong kalikasan ng xml ay tulad na ang format ay kalabisan, mas maraming tag, mas walang silbi na impormasyon. Ang plus soap ay nagdaragdag ng redundancy nito. Para sa mga intranet system, ang isyu ng trapiko ay hindi gaanong talamak kaysa sa internet, kaya ang sabon para sa mga lokal na network ay higit na hinihiling, lalo na ang Sharepoint ay may isang soap web service kung saan maaari kang makipag-usap nang may tagumpay (at ilang mga limitasyon).
  • Ang awtomatikong pagbabago sa paglalarawan ng isang serbisyo sa web ay maaaring masira ang lahat ng mga kliyente. Well, ito ay tulad nito para sa anumang sistema, kung ang paatras na pagkakatugma sa mga lumang pamamaraan ay hindi suportado, ang lahat ay babagsak...
  • Hindi isang minus, ngunit isang sagabal. Ang lahat ng mga tawag sa pamamaraan ay dapat na atomic. Halimbawa, kapag nagtatrabaho sa isang database, maaari tayong magsimula ng isang transaksyon, magsagawa ng ilang query, pagkatapos ay mag-rollback o mag-commit. Walang transaksyon sa sabon. Isang kahilingan, isang sagot, tapos na ang usapan.
  • Ang pagharap sa paglalarawan ng kung ano ang nasa panig ng server (tama ba ang lahat ng inilarawan?) at kung ano ang nasa kliyente (ano ang inilarawan sa akin dito?) ay maaaring maging mahirap. Mayroong ilang mga beses na kailangan kong maunawaan ang panig ng kliyente at kumbinsihin ang programmer ng server na ang kanyang data ay inilarawan nang hindi tama, ngunit hindi niya maintindihan ang anumang bagay tungkol dito, dahil awtomatikong henerasyon at hindi siya dapat, ito ay isang bagay ng software . At ang error, natural, ay nasa code ng pamamaraan na hindi ito nakita ng programmer.
  • Ipinapakita ng pagsasanay na ang mga developer ng serbisyo sa web ay napakalayo sa mga taong gumagamit ng mga serbisyo sa web na ito. Bilang tugon sa anumang kahilingan (wasto mula sa labas), maaaring dumating ang isang hindi maintindihang error na "Error 5. Lahat ay masama". Ang lahat ay nakasalalay sa konsensya ng mga nag-develop :)
  • I'm sure wala pa rin akong naaalala...

Bilang halimbawa, mayroong isang bukas na serbisyo sa web belavia:

  • http://86.57.245.235/TimeTable/Service.asmx - entry point, mayroon ding text na paglalarawan ng mga pamamaraan para sa mga third-party na developer.
  • http://86.57.245.235/TimeTable/Service.asmx?WSDL - wsdl paglalarawan ng mga pamamaraan at uri ng natanggap at ibinalik na data.
  • http://86.57.245.235/TimeTable/Service.asmx?op=GetAirportsList - paglalarawan ng isang partikular na paraan na may halimbawa ng uri ng kahilingan sa xml at tugon ng xml.

Maaari kang manu-manong gumawa at magpadala ng kahilingan tulad ng:

POST /TimeTable/Service.asmx HTTP/1.1 Host: 86.57.245.235 Content-Type: text/xml; charset=utf-8 Haba ng Nilalaman: haba ng SOAPAction: "http://webservices.belavia.by/GetAirportsList" ru

darating ang sagot:

HTTP/1.1 200 OK Petsa: Mon, 30 Set 2013 00:06:44 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 4.0.30319 Cache-Control: pribado, max -age=0 Content-Uri: text/xml; charset=utf-8 Haba ng Nilalaman: 2940

PS Dati, ang serbisyo sa web ng Aeroflot ay binuksan, ngunit pagkatapos ng 1C na magdagdag ng suporta sa sabon sa 8ku, isang grupo ng mga 1C beta tester ang matagumpay na na-install ito. Ngayon ay may nagbago doon (hindi ko alam ang address, maaari mo itong hanapin kung interesado ka).
ZZY Disclaimer. Nagsalita siya sa pang-araw-araw na antas. Pwede kang sumipa.

Ano ang SOAP?

Ang SOAP ay nangangahulugang Simple Object Access Protocol. Umaasa ako na pagkatapos basahin ang artikulo ay maiiwan ka lamang na mag-iisip: "Ano ang kakaibang pangalan na ito?"

Ang SOAP sa kasalukuyang anyo nito ay isang paraan ng remote procedure call (RPC) sa isang network. (Oo, ginagamit din ito upang ilipat ang mga dokumento bilang XML, ngunit iiwan muna namin iyon sa ngayon.)

Alamin natin ito. Isipin na mayroon kang serbisyong nagbabalik ng stock quote para sa isang ibinigay na ticker (simbolo ng stock). Ipinapadala nito ang data sa website ng Nasdaq at bumubuo ng nais na resulta batay sa ibinalik na HTML. Susunod, upang payagan ang ibang mga developer na gamitin ito sa loob ng kanilang mga application, gumawa ka ng isang bahagi mula sa serbisyong ito na nakakahanap ng impormasyon tungkol sa mga quote sa pamamagitan ng Internet. Gumagana ito nang mahusay hanggang sa isang araw ay binago ng Nasdaq ang layout ng mga pahina nito. Kailangan mong muling isaalang-alang ang buong lohika ng bahagi at magpadala ng mga update sa lahat ng mga developer na gumagamit nito. At sila, sa turn, ay kailangang magpadala ng mga update sa lahat ng kanilang mga gumagamit. Kung mangyari ito sa higit pa o hindi gaanong pare-parehong batayan, maaari kang gumawa ng maraming mga kaaway sa iyong mga kapwa developer. At ang mga programmer, tulad ng alam mo, ay hindi dapat gawing trifle. Hindi mo nais na kumuha ng larawan ng iyong paboritong pusa mula sa shredder ng opisina bukas, hindi ba?

Ano ang gagawin? Tingnan natin... ang kailangan mo lang ay magbigay ng isang function na kukuha bilang input ng simbolo ng ticker (type string) at magbabalik ng stock quote (type float o double). Kaya't hindi ba mas madaling hayaan ang iyong mga developer na tawagan ang function na ito sa Internet kahit papaano? Mahusay! Balita din sa akin, may mga COM at Corba at Java na ginagawa ito sa loob ng maraming taon... kung ano ang totoo ay totoo, ngunit ang mga pamamaraan na ito ay hindi walang mga kapintasan. Ang malayuang COM configuration ay hindi mahalaga. Bilang karagdagan, kailangan mong magbukas ng napakaraming port sa firewall na hindi mo kayang humawak ng sapat na beer para sa isang administrator ng system. Oo, at kailangan mong kalimutan ang tungkol sa mga gumagamit ng lahat ng mga operating system maliban sa Windows. Ngunit ang mga gumagamit ng Linux ay minsan din interesado sa palitan.

Bagama't mukhang hindi mawawala ang lahat para sa mga gumagamit ng Linux kung gagamit sila ng DCOM, higit pa dito: http://www.idevresource.com/com/library/res/articles/comonlinux.asp.

Wala akong masasabi tungkol sa Corba at Java, kaya bilang isang ehersisyo, iniimbitahan ko ang mga mambabasa na hanapin ang mga kahinaan sa mga pamamaraang ito.

Ang SOAP ay isang pamantayan na nagbibigay-daan sa iyong ilarawan ang gayong malayuang tawag at ang form kung saan ibabalik ang resulta. Kaya kailangan mong i-host ang iyong function sa isang application na naa-access sa network at tumanggap ng mga tawag bilang mga SOAP packet. Pagkatapos ay i-validate mo ang input, patakbuhin ang iyong function, at ibalik ang resulta sa isang bagong SOAP packet. Maaaring tumakbo ang buong proseso sa HTTP, kaya hindi mo na kailangang magbukas ng grupo ng mga port sa iyong firewall. Simple lang ba talaga?

Tungkol saan ang artikulong ito?

Ito ang una sa isang serye ng mga artikulong isinusulat namin tungkol sa SOAP sa Agni Software. Sa artikulong ito susubukan kong bigyan ka ng ideya kung ano ang SOAP at kung paano magsulat ng isang application na nakikipag-ugnayan sa isang SOAP server.

Sabon at XML

Kung mukhang simple pa rin sa iyo ang SOAP, magdagdag tayo ng XML. Ngayon, sa halip na ang pangalan ng function at mga parameter, nakakakuha kami ng medyo kumplikadong XML na sobre, na parang idinisenyo upang lituhin ka. Ngunit huwag magmadali upang matakot. Higit pa riyan, at kailangan mong makita ang buong larawan para ma-appreciate ang pagiging kumplikado ng SOAP.
Kung hindi mo alam kung ano ang XML, basahin muna ang aking artikulo sa XML dito: http://www.agnisoft.com/white_papers/xml_delphi.asp.

Lahat ng SOAP packages ay nasa XML na format. Ano ang ibig sabihin nito? Tingnan natin. Tingnan ang function na ito (Pascal):
function na GetStockQuote(Simbolo: string): doble;
Mukhang mahusay, ngunit ang problema ay na ito ay Pascal. Ano ang gamit ng simpleng kahulugan na ito para sa isang developer ng Java? O para sa isang taong nagtatrabaho sa VB? Kailangan namin ng isang bagay na mauunawaan ng lahat, maging ang mga programmer ng VB. Kaya bigyan sila ng XML na naglalaman ng parehong impormasyon (mga parameter, mga halaga ng stock quote, atbp.). Gumawa ka ng SOAP package, na mahalagang tawag sa iyong function, na nakabalot sa XML upang maunawaan ito ng anumang application sa anumang platform. Ngayon tingnan natin kung ano ang hitsura ng aming SOAP call:
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"


xmlns:xsd="http://www.w3.org/1999/XMLSchema">


IBM

Informative, tama ba? Ang SOAP ay nagiging mas madali sa harap ng ating mga mata. Okay, jokes aside. Ngayon ay susubukan kong ipaliwanag sa iyo kung paano maunawaan ang tawag sa SOAP na ito.

Pag-decode ng tag Ang unang tag na pumukaw sa iyong mata ay

. Ang tag na ito ay ang panlabas na wrapper ng isang SOAP package, na naglalaman ng ilang deklarasyon ng namespace na hindi namin partikular na interesado, ngunit napakahalaga para sa anumang programming language o parser. Ang mga namespace ay tinukoy upang matiyak na ang mga kasunod na prefix gaya ng "SOAP-ENV:" o "xsd:" ay nauunawaan ng parser. Susunod na tag - . (Na-miss namin ang isang tag na hindi ipinapakita dito - . Wala ito sa partikular na halimbawang ito, ngunit kung gusto mong magbasa pa tungkol dito, tingnan ang detalye ng SOAP dito: http://www.w3.org/TR/SOAP/). Tag

talagang naglalaman ng SOAP na tawag. Ang susunod na tag sa listahan ay

. Ang pangalan ng tag, GetStockQuote, ay ang function na tinatawag. Sa SOAP terminolohiya, ito ay tinatawag na operasyon. Kaya ang GetStockQuote ay ang operasyon na dapat gawin. Ang ns1 ay ang namespace na tumuturo sa urn:xmethods-quotes sa aming kaso.

Isang tala sa mga namespace: Ginagawang posible ng namespace na maging kwalipikado ang isang XML tag. Halimbawa, hindi ka maaaring magkaroon ng dalawang variable na may parehong pangalan sa isang pamamaraan, ngunit kung sila ay nasa dalawang magkaibang pamamaraan, walang problema. Kaya, ang isang pamamaraan ay isang namespace, dahil ang lahat ng mga pangalan dito ay natatangi. Katulad nito, ang mga XML tag ay may kanilang saklaw sa loob ng mga namespace, kaya kung may namespace at isang tag name, maaari mo itong makilala nang kakaiba. Tutukuyin namin ang namespace bilang isang URI upang ibahin ang aming NS1 mula sa mga copycats. Sa halimbawa sa itaas, ang NS1 ay isang alias na tumuturo sa urn:xmethods-quotes.

Bigyang-pansin din ang katangian ng encodingStyle - tinutukoy ng katangiang ito kung paano naka-serialize ang SOAP na tawag. naglalaman ng mga parameter. Sa aming pinakasimpleng kaso, mayroon lang kaming isang parameter - tag . Pansinin ang linyang ito sa tabi ng tag:
xsi:type="xsd:string"
Ito ay halos kung paano tinukoy ang mga uri sa XML. (Pansinin kung gaano ako katalinong gumamit ng salitang "humigit-kumulang" kapag gumagawa ng generalization tungkol sa teknolohiya na maaaring magbago kapag nai-publish na ang artikulo.) Ano nga ba ang ibig sabihin nito: isang uri na tinukoy sa xsi namespace, na mapapansin mong tinukoy sa tag – xsd: string. At ito naman, ay string, na tinukoy sa xsd namespace, muli, tinukoy nang mas maaga. (Sigurado akong ang mga abogado ay kikiligin lamang sa lahat ng ito).

Bigyang-pansin din ang katangian ng encodingStyle - tinutukoy ng katangiang ito kung paano naka-serialize ang SOAP na tawag. "IBM" ay ipinahiwatig. Ito ang halaga ng parameter ng simbolo ng function na GetStockQuote.

Well, sa huli, tulad ng mga disenteng tao, isinara namin ang lahat ng mga tag.

Kaya nalaman namin ang SOAP packet na tumutukoy sa tawag sa SOAP server. At ang SOAP server, gamit ang XML parsers, ang pulang button at ang MIR space station, ay nagde-decode ng tawag na ito at tinutukoy na kailangan mo ng stock quote. Agad niyang nahanap ang tamang quote at ibinalik ito sa iyo sa form na ito:
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>


34.5


Pagkatapos buksan ang sobre ng SOAP, tanggalin ang mga ribbon at kaluskos ang wrapper, nalaman namin na ang presyo ng pagbabahagi ng IBM ay 34.5.

Karamihan sa mga komersyal na server ay magbabalik ng higit pang impormasyon, tulad ng sa anong pera at sa anong presyo ang huling stock ay binili. At ang presyo ng bahagi, marahil, ay magiging mas tumpak.

Sa ganitong paraan malalaman natin kung ano ang inaasahan ng SOAP server at kung ano ang ibabalik nito. Kaya PAANO mo ipapadala ang impormasyong ito? Maaari kang gumamit ng anumang transportasyon. Ang pinaka sakop ay HTTP. Hindi ko na idedetalye ang HTTP, para sa mga hindi nakakaalam, ito ang ginagamit ng iyong browser para makipag-ugnayan sa mga site na binibisita mo.

Ang kinakailangang kahilingan sa HTTP ay magiging ganito:
POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com

Haba ng Nilalaman: nnnn
SOAPAction: "Some-URI"

Ang packet ng kahilingan ng sabon dito... Ang tanging dapat tandaan ay ang header ng SOAPAction. Isinasaad ng header na ito ang layunin ng kahilingan at kinakailangan. Ang bawat SOAP server ay maaaring magkaroon ng walang limitasyong bilang ng mga function at maaaring gamitin ang SOAPAction header upang matukoy kung aling function ang tinatawag. Ang mga firewall at multiplexer ay maaari ding mag-filter ng nilalaman batay sa header na ito.

Ang tugon ng SOAP mula sa HTTP server ay magiging ganito:
HTTP/1.1 200 OK
Uri ng Nilalaman: text/xml; charset="utf-8"
Haba ng Nilalaman: nnnn

Soap Response packet dito... Bakit HTTP? Una, hindi na kailangang magbukas ng isang toneladang magkahiwalay na port ang mga administrator ng network para sa mga SOAP na tawag... madaling mahawakan ng web server ang mga tawag, dahil Karaniwang bukas ang Port 80 sa lahat para makatanggap ng mga papasok na kahilingan. Ang isa pang bentahe ay ang pagpapalawak ng mga web server gamit ang CGI, ISAPI at iba pang katutubong module. Ang pagpapalawak na ito ay nagbibigay-daan sa iyo na magsulat ng isang module na nagpoproseso ng mga kahilingan sa SOAP nang hindi naaapektuhan ang iba pang nilalaman ng web.

yun lang

Umaasa ako na ang artikulong ito ay nakatulong sa pagbibigay liwanag sa SOAP. Kung narito ka pa rin at gustong magbasa pa tungkol sa paksang ito, bisitahin ang website ng mga may-akda: http://www.agnisoft.com/soap

Sa pangkalahatan, ngayon ay may mga karaniwang XML data exchange protocol:

  • XML-RPC– ipinasa mo ang package at ipahiwatig kung aling paraan sa server ang gusto mong tawagan.
  • MAGpahinga- mayroong ilang mga bagay sa server. Ang bawat bagay ay nailalarawan sa pamamagitan ng ilang uri ng identifier. Ang bawat elemento ay may sariling url. Magagawa mo ang sumusunod sa anumang elemento: ipasok, tanggalin, i-update, piliin. Ipapadala mo lang ang nais na kahilingan sa server (halimbawa, ipasok ang ganito at ganoong elemento). Ang palitan ng kliyente-server ay batay sa alinman sa JSON o XML.

SOAP (service oriented architecture, isang set ng mga maluwag na pinagsamang serbisyo na nakikipag-ugnayan sa isa't isa) ay batay sa RPC. Ang pangunahing bentahe ng RPC ay ang maliit na bilang ng mga mapagkukunan ng network (mga entry point) at ang maraming mga pamamaraan na kasangkot. Sa kabila ng kalamangan na ito, ang RPC ay isang hindi napapanahong protocol na may ilang mga disadvantages:

  • Ang bisa ng isang XML-RPC na mensahe ay hindi ma-verify. Ang lumang protocol ay nilikha bago ang mga schema (paraan ng pagpapatunay ng data) ay na-standardize sa XML. Yung. Ang server ay tumatanggap ng mga kahilingan, dapat nitong tiyakin na ang mga kahilingan ay para dito at ang data ay pare-pareho. Sa XML-RPC, ang mga uri ng data ay idineklara para dito, ngunit ito ay isang pagsusuri sa uri ng data, at ang pagkakapare-pareho ng data ay hindi nasuri (na nakatanggap ka ng isang istraktura kasama ang lahat ng kinakailangang mga parameter).
  • Hindi ka makakagawa ng pinagsamang mga mensahe.
  • Hindi ka maaaring gumamit ng espasyo at oras (lumabas pagkatapos ng paglikha ng RPC).
  • Hindi mo maaaring palawakin ang mensahe, i.e. magdagdag ng karagdagang impormasyon.

Ang lahat ng mga pagkukulang na ito ay nalutas sa XML Schema. Ito ang pamantayan sa industriya para sa paglalarawan ng isang XML na dokumento. Yung. ito ay isang paraan upang magmodelo ng arbitrary na data. Ang isang XML schema ay maaaring maglarawan ng isang modelo (mga ugnayan sa pagitan ng mga elemento at mga katangian, at kanilang istraktura), mga uri ng data (nagpapakita ng mga uri ng data) at isang diksyunaryo (mga pangalan ng mga elemento at katangian).

Batay sa lahat ng mga pagkukulang ng XML-RPC, nilikha ang SOAP protocol.

SABON(Simle Object Access Protocol) - access protocol sa isang object (sa entry point). Ngayon ito ang pangunahing pamantayan sa industriya para sa pagbuo ng mga ipinamamahaging aplikasyon.

Kinakatawan nito ang mga extension sa XML-RPC na wika. Yung. ito ay binuo sa prinsipyo: 1 entry point at anumang mga pamamaraan. Ang protocol mismo sa mga tuntunin ng transportasyon (kung paano maglipat ng data) ay nagbibigay ng malawak na pagpipilian: SMTP, FTP, HTTP, MSMQ.

Pinagbabatayan ng SOAP ang pagpapatupad ng XML web services (XML web services). Ang disadvantage ng SOAP ay ang hirap matutunan.

Ang SOAP ay batay sa pagpapalitan ng mga mensahe sa pagitan ng isang kliyente at isang server (kasabay at asynchronously). Ang bawat mensahe ay nagdadala ng impormasyon tungkol sa data (kung anong data ang ipinadala at natanggap). Inilarawan nang maaga ng SOAP ang buong istraktura ng isang mensahe gamit ang mga XML schema: kung ano ang dapat na nasa mensahe, kung paano ito ipapadala. Ginagawa nitong posible, nang hindi nalalaman ang server, na maunawaan kung ano ang nangyayari doon, at pinapayagan ang server na suriin kung ang mensaheng ito ay para dito.

XML schema

Ang layunin ng isang schema ay ilarawan ang istruktura ng data, i.e. kung ano ang meron tayo. Ang lahat ng data ay nahahati sa simple at kumplikadong mga uri (scalar at istruktura). Ang isang simpleng uri (string, numero, boolean, petsa) ay hindi maglalaman ng anumang bagay sa loob. At ang isang istraktura (bagay) ay maaaring maglaman ng mga katangian.

Mga Pangunahing Operasyon ng SOAP

  • Hindi lamang simpleng pagpapalitan ng impormasyon ng client-server. Ngunit pati na rin ang awtomatikong pagkilala sa server at paghahanap para sa server na ito, i.e. maaaring walang alam ang kliyente tungkol sa server. Yung. unang hinahanap ng kliyente ang server, nakahanap ng mga angkop na serbisyo, nauunawaan kung anong mga pamamaraan ang naroroon, kung ano ang mayroon ang server, at tinawag ito.
  • Ini-publish ng server ang impormasyon nito (lokasyon, anong mga pamamaraan ang sinusuportahan nito) upang mahanap ng kliyente ang server na ito. Ang pag-publish ay nangyayari sa direktoryo ng UDDI.

istraktura ng mensahe ng SOAP:

  • SOAP Envelope - kasama dito ang buong mensahe. Binubuo ng isang header at isang katawan.
  • SOAP Header (header) - karagdagang impormasyon (pahintulot, halimbawa).
  • SOAP Body (katawan) - ang mismong mensahe.
  • Ang SOAP Fault (error) ay isang paraan ng pagpapadala ng error mula sa server patungo sa kliyente.

WSDL

WSDL(Web Services Description Language) - wika para sa paglalarawan ng mga serbisyo sa web. Ginamit sa SOAP. Ito ay isang uri ng dokumento na naglalarawan sa lahat: anong mga namespace ang ginamit, anong mga scheme ng data ang ginamit, anong mga uri ng mga mensahe ang inaasahan ng server mula sa kliyente, anong mga sobre ang nabibilang sa kung anong paraan, anong mga pamamaraan ang umiiral, kung anong address ang ipapadala, atbp . Sa totoo lang, ang WSDL ay isang serbisyo sa web. Sapat na para sa kliyente na pag-aralan ang mga nilalaman ng dokumentong ito ay alam na niya ang lahat tungkol sa server.

Ang anumang server ay dapat mag-publish ng WSDL.

Ang WSDL ay binubuo ng mga bloke:

  • Kahulugan ng serbisyo mismo, i.e. entry point, port ay ipinahiwatig.
  • Format ng mga pamamaraan. Ang entry point ay naka-link sa mga operasyon, i.e. anong mga pamamaraan ang sinusuportahan nito? Ang uri ng tawag at paraan ng paghahatid ay ipinahiwatig. Sa loob ng bawat pamamaraan mayroong isang paliwanag ng form kung saan ang data ay ipinadala - sa anyo ng SOAP.
  • Mga paraan ng pagbubuklod sa isang mensahe.
  • Paglalarawan ng mga mensahe mismo.

Tulad ng tinalakay sa nakaraang kabanata, ang mga serbisyo sa Web ay nakikipag-ugnayan sa mga kliyente at sa isa't isa sa pamamagitan ng pagpapadala ng mga mensahe sa XML. Ang mga tag ng pagpapatupad ng XML na ito, ang mga panuntunan para sa pag-format ng XML na dokumento, at ang pagkakasunud-sunod ng pagpapalit ng mga dokumento ay tinutukoy ng SOAP protocol. Ang SOAP protocol ay nilikha noong 1998 ng isang pangkat ng mga developer na pinamumunuan ni Dave Winer, na nagtrabaho sa Microsoft Corporation at Userland. Ang pangalan ng protocol - "Simple Object Access Protocol" - ay sumasalamin sa orihinal nitong layunin - upang ma-access ang mga pamamaraan ng mga malalayong bagay. Ang layunin ng protocol ay nagbago na; isa na itong protocol para sa anumang pakikipag-ugnayan sa pagitan ng mga serbisyo sa Web at mga bahagi ng maluwag na pinagsama-samang mga aplikasyon. Hindi na ito medyo simple, at wala itong sinasabi tungkol sa mga bagay. Iminumungkahi ng maraming developer na tawagan itong "Service Oriented Architecture Protocol", na iniiwan ang nakaraang pagdadaglat. Upang ihinto ang mga pagtatangka na ito, ang detalye ng SOAP 1.2 ay nagsasaad na ang salitang "SOAP" ay hindi na babaybayin sa anumang paraan.

Sa pagtatapos ng 1999, ang pagbuo ng protocol ay inilipat sa W3C consortium (http:// www.w3.org/).

Noong Mayo 2000, inilabas ng consortium ang bersyon nito ng SOAP 1.1. Ang isang mensaheng nakasulat gamit ang SOAP protocol ay naka-format bilang isang XML na dokumento na aktibong gumagamit ng mga namespace. Ang SOAP 1.1 XML na mga pangalan ng elemento ay tumutukoy sa namespace identifier http://schemas.xmlsoap.org/soap/envelope/.

Ang pangalawang draft ng SOAP 1.2 ay inilabas noong 2001, ang namespace nito noong panahong iyon ay tinatawag na http://www.w3.org/2001/06/soap-envelope.

Tandaan na ang namespace identifier, hindi ang 1.1 o 1.2 na numero, ang tumutukoy sa bersyon ng SOAP. Hindi isasaalang-alang ng server ang SOAP na mensahe at magbabalik ng mensahe ng error kung mapapansin nito

hindi pagkakatugma ng namespace.

Habang isinusulat ko ito, nananatiling gumagana ang SOAP 1.1. Ang Bersyon 1.2 ay hindi maaaring umalis sa yugto ng paghahanda, ngunit ginagamit na, halimbawa, sa SOAP::Lite, Apache SOAP 2.3, Apache Axis. Samakatuwid, sa kabanatang ito ay magbabalangkas ako ng bersyon 1.2, na binabanggit ang mga pagkakaiba nito mula sa bersyon 1.1.

Ang gumaganang detalye ng SOAP ay palaging naka-imbak sa http://www.w3.org/TR/SOAP/. Ang mga dokumentong matatagpuan sa address na ito ay papalitan ng mga bago kapag pinalitan ang gumaganang bersyon.

Ang draft ng SOAP ay patuloy na ina-update at nagbabago ang namespace identifier. Ang pinakabagong bersyon ng draft sa oras ng pagsulat ay matatagpuan sa http://www.w3.org/TR/soapl2-partl/, at ang namespace na ginamit nito ay http://www.w3.org/2002/06/soap - sobre. Tandaan na ang detalye ng SOAP 12 ay binubuo ng dalawang bahagi: bahagi 1 at bahagi2. Ang ikalawang bahagi ng detalye - ang application - ay naglalaman ng mga panuntunan para sa pagtatala ng mga kumplikadong uri ng data. Ang detalye ay may isa pang bahagi, partO - mga halimbawa ng mga mensaheng pinagsama-sama ayon sa mga patakaran ng SOAP 1.2.

istraktura ng mensahe ng SOAP

Tinutukoy ng detalye ang isang SOAP na mensahe bilang isang XML na dokumento na hindi naglalaman ng deklarasyon ng uri ng dokumento o mga tagubilin sa pagproseso. Tinatawag ang root element ng XML na dokumentong ito . Ang isang elemento ay maaaring magkaroon ng mga katangian na tumutukoy sa mga namespace,

at iba pang mga katangian na ibinigay ng mga prefix. Ang root element ay naglalaman ng isang opsyonal na elemento na naglalaman ng header ng mensahe, at isang kinakailangang elemento , kung saan ang mga nilalaman ng mensahe ay naitala. Bersyon 1.1 pinapayagan pagkatapos ng katawan upang isulat ang mga arbitrary na elemento, ang kanilang mga pangalan ay kailangang prefix. Ang Bersyon 1.2 ay nagbabawal sa pagsulat ng anuman pagkatapos ng elemento . Sa madaling salita, ang pangkalahatang istraktura ng isang SOAP na mensahe ay:

xmlns:env="http://www.w3.org/2002/06/soap-envelope">

< ! - Блоки заголовка ->

Elemento

, kung ito ay nasa mensahe, ay unang nakasulat sa katawan ng elemento . Bilang karagdagan sa mga katangian ng xmlns, maaari itong maglaman ng katangian ng aktor, na nagpapahiwatig ng URI address ng partikular na server ng SOAP kung saan nilalayon ang mensahe.

Ang katotohanan ay ang isang SOAP na mensahe ay maaaring dumaan sa ilang mga SOAP server o sa pamamagitan ng ilang mga application sa parehong server. Ang mga application na ito ay paunang pinoproseso ang mga bloke ng header ng mensahe at ipinadala ito sa isa't isa. Ang lahat ng mga server at/o application na ito ay tinatawag na mga SOAP node. Ang detalye ng SOAP ay hindi tumutukoy sa mga panuntunan para sa pagpasa ng mensahe sa pamamagitan ng isang hanay ng mga server. Para sa layuning ito, ang iba pang mga protocol ay binuo, halimbawa, Microsoft WS-Routing.

Ang katangian ng aktor ay tumutukoy sa target na SOAP node - ang isa na matatagpuan sa dulo ng chain at magpoproseso ng buong header. Ibig sabihin

Ang katangian ng aktor ay nagpapahiwatig na ang header ay ipoproseso ng unang server na tatanggap nito Ang katangian ng aktor ay maaaring lumabas sa magkahiwalay na mga bloke ng header, na nagpapahiwatig ng node na humahawak sa block na ito. Pagkatapos ng pagproseso, ang bloke ay tinanggal mula sa SOAP na mensahe.

Sa bersyon 1.2, ang katangian ng aktor ay pinalitan ng katangian ng tungkulin dahil sa bersyong ito ng SOAP, ang bawat node ay gumaganap ng isa o higit pang mga tungkulin. Kasalukuyang tinutukoy ng detalye ang tatlong tungkulin ng SOAP node.

Ang papel ng http://^^.w3.org/2002/06/soap-envelope/role/ultimateReceiver ay ginagampanan ng panghuling, target na node na magpoproseso ng header.

Ang papel na http://www.w3.org/2002/06/soap-envelope/role/next ay ginagampanan ng intermediate o target na node. Ang nasabing node ay maaaring maglaro ng iba, karagdagang mga tungkulin.

Ang papel na http://www.w3.org/2002/06/soap-envelope/role/none ay hindi dapat gampanan ng anumang SOAP node.

Ang mga ibinahagi na application, batay sa kanilang mga pangangailangan, ay maaaring magdagdag ng iba pang mga tungkulin sa mga tungkuling ito, halimbawa, magpakilala ng isang intermediate na server na nagbe-verify ng digital na lagda at tukuyin ang tungkuling ito para dito gamit ang ilang URI string.

Ang halaga ng katangian ng tungkulin ay maaaring anumang string ng URI na nagsasaad ng tungkulin ng node kung saan nilalayon ang header block na ito. Ang default na value para sa attribute na ito ay ang walang laman na value, iyon ay, isang pares lamang ng mga quote, o ang URI string http://\vw\v.w3.org/2002/06/soap-envelope/rale/ultimateReceiver.

Ang halaga ng katangian ng tungkulin ay nagpapahiwatig na ang bloke ay dapat iproseso ng isang node na gumaganap ng papel na tinukoy ng parehong string.

Isa pang katangian ng elemento

, na tinatawag na urnstUnderstand, ay kumukuha ng mga halaga o o 1. Ang default na halaga nito ay o. Kung ang mustunderstand attribute ay katumbas ng 1, ang SOAP node, kapag pinoproseso ang elemento, ay dapat isaalang-alang ang syntax na tinukoy sa schema ng dokumento, o hindi iproseso ang mensahe. Pinapataas nito ang katumpakan ng pagpoproseso ng mensahe.

Sa bersyon SOAP 1.2, sa halip na numero o, kailangan mong isulat ang salitang mali, at sa halip na numero 1, isulat ang salitang totoo.

Sa katawan ng header

Maaari kang maglagay ng mga arbitrary na elemento, na dating tinatawag na mga entry sa header. Sa bersyon 1.2 ang mga ito ay tinatawag na mga bloke ng header. Ang kanilang mga pangalan ay kinakailangang minarkahan ng mga prefix. Ang mga header block ay maaaring maglaman ng mga katangian ng tungkulin o aktor at dapat maunawaan. Malalapat lang ang kanilang aksyon sa block na ito. Nagbibigay-daan ito sa mga indibidwal na bloke ng header na maproseso ng mga intermediate na SOAP node, ang mga may papel na tumutugma sa tungkuling tinukoy ng katangian ng tungkulin. Ang listahan 3.1 ay nagpapakita ng isang halimbawa ng naturang bloke.

Listahan 3.1. Header na may isang bloke

xmlns:t="http://some.com/transaction" env:role=

"http://www.w3.org/2002/06/soap-envelope/role/ultimateReceiver" env:mustUnderstand="1">

Ang mga elementong naka-nest sa loob ng mga bloke ng header ay hindi na tinatawag na mga bloke. Hindi nila maaaring taglayin ang mga katangian ng papel, aktor, at dapat maunawaan.

Elemento dapat isulat kaagad pagkatapos ng elemento

, kung ito ay nasa mensahe, o una sa SOAP na mensahe kung ang header ay nawawala. Sa elemento Maaari kang mag-nest ng mga di-makatwirang elemento; Gayunpaman, ang isang elemento ay tinukoy na naglalaman ng isang mensahe ng error.

Mensahe ng error

Kung ang isang SOAP server, habang pinoproseso ang isang SOAP na mensahe na natanggap nito, ay napansin ang isang error, ito ay hihinto sa pagproseso at magpadala ng isang SOAP na mensahe sa kliyente, sa katawan kung saan ito ay magsusulat ng isang elemento na may mensahe ng error.

Sa mensaheng nakasulat sa katawan ng isang SOAP 1.1 na elemento,

Mayroong apat na bahagi na inilarawan ng mga sumusunod na subelement.

Error code - isang mensahe na nagsasaad ng uri ng error. Ito ay inilaan para sa isang programa na humahawak ng mga error.

Paglalarawan ng error - isang pandiwang paglalarawan ng uri ng pagkakamali na inilaan para sa isang tao.

Kung saan natagpuan ang error - ang URI ng server na nakapansin ng error. Kapaki-pakinabang kapag ang isang mensahe ay dumaan sa isang chain ng mga SOAP node upang linawin ang likas na katangian ng error. Ang mga intermediate na SOAP node ay kinakailangan upang maitala ang elementong ito ang target na SOAP server ay hindi kinakailangan na gawin ito.

Mga Detalye ng Error - ilarawan ang mga error na nakatagpo sa katawan mensahe, ngunit wala sa pamagat nito. Kung walang nakitang mga error sa pagpoproseso ng katawan, nawawala ang elementong ito.

Halimbawa:

xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

env:MustUnderstand Error Dapat Unawain ng SOAP

Binago ng SOAP version 1.2 ang nilalaman ng elemento Gaya ng inilarawan sa

namespace http://www.w3.org/2002/06/soap-envelope, kabilang dito ang dalawang kinakailangang elemento at tatlong opsyonal na elemento.

Mga kinakailangang elemento.

Error code . Naglalaman ito ng kinakailangang sub-element<:value>na may error code at opsyonal na sub-element , na naglalaman, muli, ang elemento na may nagpapaliwanag na error code at elemento , at pagkatapos ang lahat ay paulit-ulit na paulit-ulit.

Dahilan ng pagkakamali . Naglalaman ng opsyonal na xml attribute: lang, na nagsasaad ng wika ng mensahe (tingnan ang Kabanata D), at isang arbitrary na bilang ng mga nested na elemento na naglalarawan sa error.

Mga opsyonal na elemento.

? - ang URI ng intermediate SOAP node na napansin ang error.

? - ang papel ng SOAP node na napansin ang error.

? - paglalarawan ng error na napansin habang pinoproseso ang katawan mensahe, ngunit hindi ang headline.

Ang Listahan 3.2 ay nagpapakita ng isang mensahe ng error na naganap noong sinusubukang magsagawa ng isang pamamaraan. Ang error ay ang mga pangalan ng mga argumento ng pamamaraan ay naisulat nang hindi tama sa mensahe ng SOAP at hindi maintindihan ng pamamaraan ang mga ito.

Listahan 3.2. Mensahe ng error

xmlns:env="http://www.w3.org/2002/06/soap-envelope" xmlns:rpc=’http://www.w3.org/2002/06/soap-rpc’>

env:Sender

rpc:BadArgumentsc/env:Value>

Ptocessing ETror

xmlns:e="http://www.example.org/faults"> Hindi tugma ang №me 999

Mga uri ng pagkakamali

Ang listahan ng mga error code ay patuloy na nagbabago at lumalawak. Ang Bersyon 1.1 ay tumutukoy sa apat na uri ng mga error.

VersionMismatch - hindi nakikilala ang namespace. Maaaring luma na ito o maaaring maling spelling ang pangalan nito.

MustUnderstand - Ang isang header block na may markang mustUnderstand attribute na may value na 1 ay hindi sumusunod sa syntax nito gaya ng tinukoy sa schema ng dokumento.

Kliyente - ang XML na dokumento na naglalaman ng mensahe ay mali at sa kadahilanang ito ay hindi ito maproseso ng server. Dapat baguhin ng kliyente ang mensahe.

Server - hindi maproseso ng server ang wastong naitala na mensahe dahil sa mga panloob na dahilan nito.

Ang Bersyon 1.2 ay tumutukoy sa limang uri ng mga error.

VersionMismatch - hindi nakikilala ang namespace. Maaaring hindi na ito napapanahon, o maaaring maling spelling ang pangalan nito, o maaaring mayroong XML na pangalan ng elemento sa mensahe na hindi tinukoy sa namespace na iyon. Sinusulat ng server ang elemento sa header ng tugon , pag-enumerate ng mga nested na elemento wastong mga pangalan ng namespace na naiintindihan ng server. Ang tugon ng server ay ipinapakita sa Listahan 3.3.

MustUnderstand - Ang isang header block na minarkahan ng mustunderstand attribute na nakatakda sa true ay hindi sumusunod sa syntax nito gaya ng tinukoy sa schema ng dokumento. Isinulat ng server ang mga sumusunod na elemento sa header ng tugon: , na ang katangian ng qname ay naglalaman ng pangalan ng maling bloke. Ang Listahan 3.4 ay naglalaman ng isang halimbawa ng tugon na gagawin ng server kung ang header sa Listahan 3.1 ay mali ang spelling.

DataEncodingUnknown - ang mensahe ay naglalaman ng hindi maintindihang data, marahil ito ay isinulat sa isang hindi kilalang encoding.

Sender - ang XML na dokumento na naglalaman ng mensahe ay mali at sa kadahilanang ito ay hindi ito maproseso ng server. Dapat baguhin ng kliyente ang mensahe.

Receiver - hindi maproseso ng server ang wastong naitala na mensahe para sa sarili nitong panloob na mga kadahilanan, halimbawa, nawawala ang kinakailangang XML parser.

Maaaring magdagdag ang server ng ilan sa sarili nitong mga uri sa mga uri ng error na ito. Karaniwan

ang mga ito ay nagdedetalye ng mga karaniwang uri at mensahe tungkol sa mga ito na lumilitaw sa mga elemento , tulad ng ipinapakita sa itaas sa Listahan 3.2.

? Listahan 3.3. Ang tugon ng server na may mensahe ng error tulad ng VersionMismatch

xmlns:env="http://www.w3.org/2002/06/soap-envelope">

xmlns:upg="http://www.w3.org/2002/06/soap-upgrade">

xmlns:nsl="http://www.w3.org/2002/06/soap-envelope"/>

xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"/>

env:VersionMismatch

Hindi Pagtutugma ng Bersyon

ListongZ.4. Ang tugon ng server na may mensahe ng error tulad ng MustUnderstand

xmlns:t=’http://some.com/transaction’ />

env:MustUnderstand

Hindi naiintindihan ang isa o higit pang mga mandatoryong header

Panitikan:

Khabibullin I. Sh. Pagbuo ng mga serbisyo sa Web gamit ang Java. - St. Petersburg: BHV-Petersburg, 2003. - 400 p.: may sakit.