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? ” 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
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 Web-palvelu Viestintä 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ä
Osa 2... web-palveluiden kuvaus WSDL:llä
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 runko Palvelutoteutus
2. Web-palvelun käyttöönotto Asiakas sovellus WSDL työkalu tynkä 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).
Osa 3... EchoApplication-palvelun WSDL-kuvaus
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> </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"/> echoText-palvelukutsun input ja output- viestien osat
EchoApplication... types-elementti <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"> <element name="echoedText" type="xsd:string"/> </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!
Osa 4... Web-palveluiden viestintä SOAP:lla
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-lähettäjä SOAP-vastaanottaja 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
Osa 5... WS-määritysten käyttö web-palveluissa
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 WS-I:n määritykset 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