380 likes | 525 Vues
Johdatus web-palveluihin. Marko Sormunen SerAPI-projekti, HIS-yksikkö Tietotekniikkakeskus Kuopion yliopisto Marko.Sormunen@uku.fi. Osa 1... web-palvelut paperilla. Web-palvelut... mitä ne ovat?.
E N D
Johdatus web-palveluihin Marko Sormunen SerAPI-projekti, HIS-yksikkö Tietotekniikkakeskus Kuopion yliopisto Marko.Sormunen@uku.fi
Web-palvelut... mitä ne ovat? • ” A Web service is a software application identified by a URI [RFC 2396], whose interfaces and bindings are capable of being defined, described, and discovered as XML artifacts. A Web service supports direct interactions with other software agents using XML based messages exchanged via Internet-based protocols. A collection of EndPoints.” • ” Web services are loosely coupled software components delivered over Internet standard technologies” • ”A self-contained, modular application that can be described, published, located, and invoked over the Web. Platform-neutral and based on open standards, Web Services can be combined with each other in different ways to create business processes that enable you to interact with customers, employees, and suppliers. ”
Web-palvelut... mitä niillä tehdään? • Nykyisten käytössä olevien sovellusten standardi liittäminen muihin sovelluksiin • Uusien sovellusten rakentaminen palvelu-arkkitehtuurin suuntaisesti • Sovellusten välinen liikennöinti HTTP:n yli • Kansainvälinen toiminta yhteistoiminnallisuuden edistämiseksi • yhteiset standardit • tärkeimmät organisaatiot: WS-I, W3C ja OASIS • Yhdistävä tekijä Java- ja Microsoft-maailman välillä • myös Open Source / Unix / Linux –tekijät mukana (Perl, Python, PHP)
Web-palvelut... perusstandardit • HTTP (Hypertext Transfer Protocol) • viestien siirtoprotokolla TCP/IP:n päällä • v1.1 vuonna 1999 • XML • liittymien ja viestien kuvauskieli • v1.0 vuonna 1996 • SOAP (Simple Object Access Protocol) • viestintä web-palveluiden välillä • v1.2 vuonna 2003 • WSDL (Web Services Description Language) • web-palveluiden liittymien kuvaus • v1.2 vuonna 2003
Web-palvelut... ongelmakohdat • Standardit pyrkivät edelleen mahdollisimman vapaaseen liittymien kuvaamiseen XML:n avulla useita yhtä hyviä keinoja kuvata samaa toiminnallisuutta turhan monimutkaiset standardit vaikeasti toteutettavia, ongelmia yhteentoimivuudessa vaikea tukea sovelluskehittimissä monimuotoisuuden takia käytännössä vaikeita opiskella • Hyödyntämiskohteiden epäselvyydet • Liiketoimintaprosessien mallintaminen web-palveluihin vaikeaa • HTTP-liikenteestä johtuvat rajoitteet kutsumekanismeissa
Web-palvelut... kehitys? • Web Services Interoperability (WS-I) pyrkii ottamaan ”takapakkia” standardeissa • tärkein tavoite ei ole toiminnallisuuden monimuotoisuus vaan yhteentoimivuuden parantaminen • vain kaksi tapaa julkaista rajapinta-tyylisiä web-palveluita • best practises –tyyppisiä määrityksiä • WS-I Basic Profile -määritys • miten luoda ja julkistaa yhteentoimivia web-palveluita käyttäen SOAP:pia, WSDL:ää ja HTTP:tä
Web-palvelut... lisää kehitystä? • WS-I Attachments Profile –määritys • miten soveltaa SOAP Attachments –määritystä liitetiedostojen lähettämiseen • WS-I Security Basic Profile -määritys • miten soveltaa SOAP-viestien allekirjoitus ja salaus WS-Security ja WS-Encryption -standardeja • Tulevaisuudessa toivottavasti ”WS-I Business Process Profile”
Web-palvelut... standardeja • W3C:n tai OASIS:n määrittelemiä • WS-I pyrkii tarkentamaan valmiiden standardien toteutustapoja • BPEL • Business Process Execution Language • yhden liiketoimintaprosessin kuvaus alusta loppuun • pohjana Microsoftin ja IBM:n määritykset • WS-Security ja WS-Encryption • SOAP-sanomien allekirjoitus • SOAP-sanomien tai niiden osien salaaminen • useita mahdollisuuksia esim. allekirjoituksen esittämiseen • WS-I Security Basic Profile –määritys tarkentaa näiden käyttöä
Web-palvelut... muita määrityksiä • UDDI (Universal Description, Discovery and Integration) • Hakemistopalvelu web-palveluille, mahdollisuutena dynaaminen web-palveluiden käyttö • ei juurikaan käytetty • WS-Addressing • Web-palveluiden päätepisteiden kuvaus • WS-Reliability • SOAP-viestien luotettava toimittaminen • muut WS-määritykset • Lista jatkuu aika pitkälti • vaikea ennustaa, mitkä näistä jäävät oikeasti elämään • osittain päällekkäisiä määrityksiä • parhaiten tuntuvat ”menestyvän” määritykset joissa mukana useampia isoista pelaajista (IBM, Microsoft) • määritysten omistussuhteet joskus epäselvät
Web-palvelut... kaavakuva XML WS-määritykset WSDL Rajapinnan kuvaus Viestintä Web-palvelu SOAP HTTP HTTPS MIME
Web-palvelut... miksi ne kelpaavat • Pääperiaate: ”Ihan sama millä web-palvelun toteutus on tehty” • WSDL/SOAP –toiminnallisuus on hyvä myyntikeino IDE-kehittäjille • SOAP-liikennöinti on tavallaan ”puolueeton vyöhyke” Microsoftin ja Java/Open Source –maailmojen välillä • XML tarjoaa mahdollisuuden lisätä yksinkertaisten palveluviestien päälle monimutkaisia rakenteita ilman että viestin tietosisältö muuttuu • HTTP-pohjainen liikennemalli on jo de facto –standardi Internetissä
WSDL... mikä se on • WSDL-dokumentti on itsenäinen XML-dokumentti joka kuvaa web-palvelun rajapinnat, SOAP-viestien tietosisältöä ja palvelun sijainnin • voi sisältää esimerkiksi myös dokumentaatiota rajapinnasta • ei sisällä rajapintoihin liittymätöntä tietoa, kuten SOAP-viestien • Standardi tapa julkistaa web-palvelu • WSDL voidaan generoida automaattisesti olemassa olevasta toteutuksesta • WSDL:n formaatti ei ole tehty ihmisille vaan automaattisille työkaluille vaikeasti ymmärrettävä mutta erittäin monipuolinen
WSDL... mitä sillä voi tehdä • WSDL-kieli itsessään vain kuvaa abstraktia tiedonsiirtorajapintaa WSDL-dokumentin kuvaamat rajapinnat eivät välttämättä ole Remote Procedure Call (RPC)-tyyppisiä WSDL voi esimerkiksi vain kuvata tietyn muotoisen XML-dokumentin joka siirretään kahden päätepisteen välillä tarvitaan tietyn muotoinen WSDL-dokumentti, joka voidaan tulkita esitävän RPC-tyyppistä rajapintaa • Yleensä WSDL kuvaa kuitenkin RPC-tyyppistä rajapintaa, joka voidaan myös esittää perinteisillä ohjelmointikielillä • WSDL-dokumentin avulla voidaan tarvittaessa validoida SOAP-sanomat
WSDL... käyttötavat • Kolme peruskäyttötapaa: • 1. luodaan runko web-palvelun toteutukselle WSDL-dokumentista • 2. otetaan ulkoinen web-palvelu käyttöön WSDL:n avulla luomalla tynkä jota asiakassovellus voi käyttää palvelun kutsumiseen • 3. web-palvelua kuvaava WSDL-dokumentti generoidaan jostakin valmiista sovelluksesta tai sen komponentista • Kaikki voidaan tehdä automaattisesti työkaluilla, joita löytyy sovelluskehittimistä • uusimmissa työkaluissa WS-I Basic Profile –yhteensopivuus • HUOM! WSDL:n, tyngän tai rungon käyttö ei ole pakollista, SOAP-sanomat voi tehdä myös ”käsin” ja lähettää ne itse HTTP:n avulla
WSDL... käyttötavat • Kaksi WSDL-tyyliä määritelty kutsurajapinta-tyylisille web-palveluille - document ja RPC • kummatkin tuottavat perus-web-palvelu -käytössä täsmälleen samanlaisia SOAP-sanomia • Microsoft käyttää oletuksena document-tyyliä, mutta tukee myös RPC-tyyliä • Java-puolella yleensä RPC-tyyli käytössä oletuksena • Kummatkin tyylit ovat yleensä hyvin tuettuja SOAP-välineissä • RPC-tyylin tarjoamia mahdollisuuksia SOAP-viestintään voidaan ajatella document-tyylin mahdollisuuksien ”osajoukkona” RPC-tyyliset WSDL-dokumentit ovat hieman yksinkertaisempia
1. Web-palvelun rungon luominen WSDL työkalu Palvelutoteutus runko
2. Web-palvelun käyttöönotto Asiakas sovellus työkalu tynkä WSDL Palvelutoteutus
3. WSDL-dokumentin generointi Palvelutoteutus työkalu WSDL
WSDL:n osat (elementit) karkeasti • schema (0-n kappaletta) • jokaisen SOAP-viestien osien tietosisällön kuvaus XML-scheman avulla • message (2-n kappaletta) • jokaisen SOAP-viestin osien luettelo • portType (yleensä 1 kappale) • jokaisen SOAP-palvelukutsun viestit (parametri-viesti, paluu-viesti, virheilmoitus-viestit) • binding (yleensä 1 kappale) • SOAP-palvelukutsujen ja esim. liitetiedostojen sitominen HTTP tms. siirtoprotokollaan • service (1 kappale) • web-palvelun yhteydet ulkomaailmaan, esim. sen HTTP-osoite. Yleensä vain yksi yhteys on edustettuna (HTTP).
EchoApplication –web-palvelun kuvaus • EchoApplication sisältää yhden palvelukutsun (echoText) • parametrinä string-tyyppinen teksti • paluuarvona string-tyyppinen teksti • WSDL on document/literal -tyylinen • WS-I Basic Profile 1.1 –yhteensopivuus on tarkistettu • Toimivuus: • Oracle JDeveloper 10g: Web Service Stub/Skeleton Generator • Delphi 7: WSDL Importer • .NET Framework 1.1 SDK: WSDL.EXE • Apache Axis 1.2: WSDL2Java
EchoApplication... WSDL-dokumentti <?xml version="1.0" encoding="UTF-8"?> <definitions targetNamespace="urn:serapi:SOAPExample" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:impl="urn:serapi:SOAPExample" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <types>...</types> <message>...<message> <portType>...</portType> <binding>...</binding> <service>...</service> </definitions> WSDL-dokumentin osien nimialue Web-palvelun nimialue
EchoApplication... service-elementti <service name=“EchoService"> <port binding="impl:EchoBinding" name=“EchoApplication"> <wsdlsoap:address location="http://localhost/EchoService/services/EchoApplication"/> </port> </service> Web-palvelun nimi Web-palvelun käyttämä HTTP-sidonta (binding) Web-palvelun osoite URL:ina
EchoApplication... binding-elementti <binding name="helloWorldBinding" type="impl:EchoOperations"> <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name=“echoText"> <wsdlsoap:operation soapAction="urn:serapi:SOAPExample#EchoText"/> <input> <wsdlsoap:body use="literal"/> </input> <output> <wsdlsoap:body use="literal"/> </output> </operation> </binding> HTTP-sidonnan palvelukutsut (portType) Palvelukutsujen sidontatyyli echoText-palveluKutsun sidonta
EchoApplication... portType-elementti <portType name=“EchoOperations"> <operation name=“echoText"> <input message="impl:echoTextRq"/> <output message="impl:echoTextRsp"/> </operation> </portType> echoText-palvelukutsun SOAP-viestit (input ja output)
EchoApplication... message-elementti <message name=“echoTextRq"> <part element="impl:echoText" name="parameters"/> </message> <message name=“echoTextRsp"> <part element="impl:echoTextResponse" name="parameters"/> </message> echoText-palvelukutsun input ja output- viestien osat
EchoApplication... types-elementti <types> <schema elementFormDefault="qualified“ targetNamespace="urn:serapi:SOAPExample“ xmlns="http://www.w3.org/2001/XMLSchema"> <element name=“echoText"> <complexType> <sequence> <element name="text" type="xsd:string"/> </sequence> </complexType> </element> <element name=“echoTextResponse"> <complexType> <sequence> <element name="echoedText" type="xsd:string"/> </sequence> </complexType> </element> </schema> </types> echoText-palvelukutsun parametrit (input-viestin sisältö). HUOM! Elementin nimen on oltava echoText! echoText-palvelukutsun paluuarvot (output-viestin sisältö). HUOM! Elementin nimen on oltava echoTextResponse!
SOAP-sanoman osa-elementit • Header ei ole pakollinen • sisältää metatietoa viestistä • Body sisältää itse sanoman tietosisällön, esim. • kutsuttava web-palvelukutsu ja sille annettavat parametrit • muu XML-dokumentti Envelope Header Body
SOAP-viestinvälitys Asiakas Palvelutoteutus Aputyökalu palvelun löytämiseen tynkä runko SOAP-vastaanottaja SOAP-lähettäjä HTTP / HTTPS
SOAP-esimerkki... echoText-kutsu <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/“ xmlns:xsd="http://www.w3.org/2001/XMLSchema“ xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"> <soapenv:Body> <echoText xmlns="urn:serapi:SOAPExample"> <text>Jeejee</text> </echoText> </soapenv:Body> </soapenv:Envelope> Body-elementti Web-palvelukutsu parametri
SOAP-esimerkki... echoTextResponse-vastaus <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/“ xmlns:xsd="http://www.w3.org/2001/XMLSchema“ xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"> <soapenv:Body> <echoTextResponse xmlns="urn:serapi:SOAPExample"> <echoedText>Palvelu vastaa: Jeejee</echoedText> </echoedTextResponse> </soapenv:Body> </soapenv:Envelope> Vastaus
Esimerkki: Aikaleiman lisääminen <?xml version = '1.0' encoding = 'UTF-8'?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsu:Creation>2004-11-25T15:16:14+0200</wsu:Creation> </wsu:Timestamp> </soapenv:Header> <soapenv:Body> <echoTextResponse xmlns="urn:serapi:SOAPExample"> <echoedText>Palvelu vastaa:Jeejee</echoedText> </echoedTextResponse> </soapenv:Body> </soapenv:Envelope> Header-elementti Aikaleima (SOAP-vastauksen luontipäivämäärä)
WS-määritykset... käyttö • SOAP-sanoman tietosisältö ei muutu • Body-elementti säilyy (yleensä) muuttumattomana • Body-osio voidaan salata WS-Encryptionilla • Vastaanottaja ei välttämättä hyödynnä esim. aikaleimaa mutta se ei haittaa SOAP-sanoman ymmärtämistä
Linkkejä • W3C:n standardit SOAP - http://www.w3.org/TR/soap/ WSDL - http://www.w3.org/TR/wsdl12 • WS-I:n määritykset WS-I Basic Profile - http://www.ws-i.org/Profiles/BasicProfile-1.1.html WS-I Attachments Profile - http://www.ws-i.org/Profiles/AttachmentsProfile-1.0.html WS-I Basic Security Profile - http://www.ws-i.org/Profiles/BasicSecurityProfile-1.0.html