Veebiteenused ja SOAP Web Services Web Services SOAP WSDL Ühilduvus UDDI Kihiline arhitektuur masinsuhtluse jaoks erinevate süsteemide vahel Kolm põhistiili: RPC REST SOA (Service Oriented Architecture) suhtluse ühikuks on teade MEELIS ROOS 1 MEELIS ROOS 2 Service Oriented Architetcure SOAP Transport sõnumite edastamiseks: HTTP, SMTP, FTP, mistahes failiedastus, XML sõnumid SOAP Teenuse masinloetav kirjeldus WSDL, nimeteenused Teenuste avastamine tsentraliseeritud register teenuste kohta (UDDI, nimeteenused) ESB (Enterprise Service Bus) ja sündmustel põhinev SOA SOAP Simple Object Access Protocol "See, mis laseb Java ja.net komponentidel omavahel suhelda" XML struktuuriga päringud ja vastused Transporte on erinevaid HTTP, HTTPS, SMTP, XML DTD/Schema võib olla eraldi kokku lepitud või omakorda masinloetavalt publitseeritud XML tasemel kasutatakse nimeruume sisu elementide kirjeldamiseks SOAP enda XML struktuur fikseerib XML puu "tipmise osa", sealt seest viidatakse konkreetsetele nimeruumikirjeldustele alamtippude interpreteerimiseks MEELIS ROOS 3 MEELIS ROOS 4
XML nimeruumid probleem XML nimeruumid lahendus <?xml version="1.0" encoding="utf-8"?> <html> <body> Your text here </body> <body> <height>182 cm</height> <weight>83 kg</weight> </body> </html> <?xml version="1.0" encoding="utf-8"?> <html:html xmlns:html="http://www.w3.org/tr/xhtml1/"> <html:body> Your text here </html:body> <human:body xmlns:html="http://www.example.com/human/"> <human:height>182 cm</human:height> <human:weight>83 kg</human:weight> </human:body> </html:html> MEELIS ROOS 5 MEELIS ROOS 6 SOAP teade SOAP teate struktuur Ümbrik (envelope) identifitseerib XML teate SOAP-ina (kohustuslik) Päis (header) teate lisainfo (mittekohustuslik) Keha (body) päring või vastus ise, konkreetse nimeruumi XML (kohustuslik) Veateade (fault) keha sees vea puhul (mittekohustuslik) Manused (MIME kodeeringus HTTP puhul) <?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:fault> </soap:fault> </soap:envelope> MEELIS ROOS 7 MEELIS ROOS 8
SOAP näide (päringu ümbrik) SOAP näide (päringu jätk) <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns4="http://x-tee.riik.ee/xsd/xtee.xsd" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header> <ns4:asutus xsi:type="xsd:string">10239452</ns4:asutus> <ns4:andmekogu xsi:type="xsd:string">xtee</ns4:andmekogu> <ns4:isikukood xsi:type="xsd:string">ee30101010007</ns4:isikukood> <ns4:id xsi:type="xsd:string">9900d3c472326a112f048571</ns4:id> <ns4:nimi xsi:type="xsd:string">xtee.listproducers</ns4:nimi> <ns4:toimik xsi:type="xsd:string" /> </SOAP-ENV:Header> <SOAP-ENV:Body> <ns4:listproducers> <keha xsi:type="xsd:string" /> </ns4:listproducers> </SOAP-ENV:Body> </SOAP-ENV:Envelope> MEELIS ROOS 9 MEELIS ROOS 10 SOAP näide (vastuse ümbrik) SOAP näide (vastuse jätk) <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Body> <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns4="http://x-tee.riik.ee/xsd/xtee.xsd" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <ns4:listproducersresponse> <keha xsi:type="soap-enc:array" SOAP-ENC:arrayType="SOAP- ENC:Struct[1]" SOAP-ENC:offset="[0]"> <item> <name xsi:type="xsd:string">autoregister</name> <description xsi:type="xsd:string">eesti riiklik liiklusregister</description> </item> </keha> </ns4:listproducersresponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> MEELIS ROOS 11 MEELIS ROOS 12
SOAP adresseerimine WSDL Staatiline Lubab ainult jäika klient-server mudelit Näiteks hardcoded HTTP URL Dünaamiline Lubab objektide vahelist hajussuhtlust igas suunas WS-Addressing objektiviited WS jaoks EPR Endpoint Reference Teatega kaasa käiv metainfo (siht, saatja EPR, vastuse saaja EPR, vea saaja EPR, action, ID) XML-formaadis kirjeldus veebiteenuste kohta Kirjeldab porte (viise teenuseni jõudmiseks) ja teenuseid endid Mis operatsioone teenus pakub? Missugused on parameetrid ja tagastusväärtused? Mismoodi andmeid esitatakse? Mis aadressil ja protokolliga ligi pääseb? Mõnevõrra analoogne IDL-iga Ligipääsuks SOAP või tavaline HTTP ESB Enterprise Service Bus kah dünaamilisema suhtluse jaoks SOAP teate edastamine mitme sõlme vahel enne kohale jõudmist, vahepealsed actor id MEELIS ROOS 13 MEELIS ROOS 14 WSDL sisu SOAP ühilduvus Andetüübid Sageli kasutatakse XML Schema tüüpe nagu SOAP-iski Neist ehitatakse lihtsad teate tüübid Pordi tüüp kirjeldab operatsiooni nime ja seob sellega sisend-väljundi teatetüübid Sidumine (binding) määrab andmevahetuseks näiteks SOAP-i, HTTP, MIME Port seostab sidumise konkreetse URL-iga SOAP erinevad versioonid (1.1, 1.2) Kodeeringud rpc/encoded, rpc/literal, document/encoded, document/literal RPC stiil: SOAP kehaks on üks XML element päring nimega Dokumendistiil: päringu sisu on otse SOAP kehaks Encoded USE: iga element on tüübitud tüübiatribuudiga Literal USE: iga elemendi tüüp on tuletatav XML skeemist implitsiitselt WS-I (Web Service Interoperability) profiil, mis fikseerib hulga parameetreid MEELIS ROOS 15 MEELIS ROOS 16
SOAP rpc/encoded kodeering SOAP document/literal kodeering <soap:body soap:encodingstyle=""> <q1:getusername xmlns:q1="http://www.eherenow.com"> <Where xsi:type="xsd:string">string</where> </q1:getusername> <Where xmlns="http://www.eherenow.com">string</where> MEELIS ROOS 17 MEELIS ROOS 18 SOAP document/literal wrapped (MS) kodeering UDDI <GetUserName xmlns="http://www.eherenow.com"> <Where>string</Where> </GetUserName> Universal Description Discovery and Integration Veebiteenuste register, et kliendid ja serverid üksteist automaatselt leida suudaksid Teenuste registreerimine ja pärimine Juurdepääs SOAP protokolliga MEELIS ROOS 19 MEELIS ROOS 20