service-oriented architecture and web services · esimerkiksi integraatioarkkitehtuurista ja soasta...

47
41 Service-oriented architecture and Web services

Upload: others

Post on 16-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

41

Service-oriented architectureand Web services

42

Application integration

• Business-to-Consumer (B2C)– client is a human user

– e.g., Application <-> Web browser• interactions using HTTP/HTML

• Business-to-Business (B2B)– client is another application

– interactions e.g., using HTTP/XML, SMTP/XML, etc.

Internetiä on käytetty paljon B2C-tyyppiseen kommunikointiin, jolloin sovelluksen asiakas/käyttäjä on

ihminen. Käyttö voi tapahtua esimerkiksi selaimen avustuksella. Vaikkapa on-line kauppapaikat ovat

esimerkkejä B2C-kommunikoinnista. Internetiä hyödynnetään kuitenkin yhä enenevissä määrin myös

B2B-kommunikointiin. Tällöin sovellukset kommunikoivat keskenään. Jotta tämä olisi mahdollistaa,

täytyy asiakassovelluksen ja palvelusovelluksen käyttää ennalta sovittua kommunikointimekanismia.

B2B-integraatio voi olla tiivis perustuen olemassa oleviin RPC:tä (Remote Procedure Call) tukeviin

komponenttiteknologioihin (esim. CORBA, RMI, DCOM) tai löyhä perustuen yksinkertaisempiin

teknologioihin. Nämä löyhän integraation sallivat teknologiat ovat usein tekstipohjaisia, esimerkiksi

yksinkertainen nimi-arvo –pari, XML-pohjainen RPC tai SOAP (Simple Object Access Protocol)

viesti. Lisäksi niiden avulla voidaan minimoida palomuuriongelmia (kun käytetään sopivaa protokollaa

kuten HTTP). Tällä tosin on luonnollisesti myös kääntöpuolensa erityisesti tietoturvan näkökulmasta.

43

Needs for software integration

• Business point of view– constantly changing requirements– efficient utilization of information systems, e.g., cost-

effectiviness→security in information exchange

– etc.

• Software engineering point of view– contantly changing requirements– reuse aspect– needs for information exchange– efficiency– flexiblity– etc.

Ohjelmistojen integroinnille on tunnetusti tarvetta ja tämä tarve on yhä kasvamassa. Asiaa voidaan

tarkastella sekä ohjelmistoteknisestä näkökulmasta että liiketoiminnan näkökulmasta. Liiketoiminnan

asettamat vaatimukset ovat tyypillisesti korkean tason vaatimuksia, jotka tavalla tai toisella

tarkennetaan tai joista johdetaan teknisiä vaatimuksia. Vaikka linkki näiden välillä onkin, se ei aina ole

kovin selvä. Näin ollen vaikka vaatimukset saattaisivatkin ”kuulostaa” samanlaisilta, tarkoitetaan niillä

usein eri asioita. Esimerkiksi tehokkuudella liiketoiminnan näkökulmasta tyypillisesti tarkoitetaan

kustannustehokkuutta, kun taas ohjelmistoteknisestä näkökulmasta sillä tarkoitetaan esim.

suoritusaikaa. Näiden tulkintojen välillä on luonnollisesti kuitenkin yhteys. Vastaavasti ns.

”metavaatimus” eli kyky vastata muuttuviin vaatimuksiin tarkoittaa käytännössä eri asioita teknisesti ja

liiketoiminnan näkökulmasta.

44

Integration architectures, service-oriented architectures...

• Integration architecture– defines and describes a way to integrate

• software systems• components or parts of software• information needed and used by software systems

– not necessarily a ”service point of view”• Service-oriented architecture

– an example of integration architecture– Dr. Hao He, W3C Web Services Architecture Working Group:

Service Oriented Architecture is an architectural style whose goalis to achieve loose coupling among interactive software agents. A service is a unit of work done by a service provider to achievedesired end results for a service consumer.

– uses integration techniques• service coordination (possibly dynamically) from other services

Seuraavaksi tutustumme lyhyesti kolmeen eri termiin: interaktioarkkitehtuuri, palveluorientoitunut

arkkitehtuuri ja Web-palvelu. Interaktioarkkitehtuuri määrittelee ja kuvaa tavan liittää toisiinsa

ohjelmistoja, komponentteja, ohjelmistojen osia tai ohjelmistojen tarvitsemia/käyttämiä tietoja. Se ei

sinänsä siis edellytä mitään erityistä ”palvelunäkökulmaa”.

Palveluorientoitunut arkkitehtuuri (SOA) on puolestaan esimerkki interaktioarkkitehtuurista. Se on siis

yksi tapa toteuttaa integraatio. On myös sanottu, että SOA ei sinällään edellytä varsinaisten

integraatiotekniikoiden käyttämistä; varsinainen integraatioaspekti tulee esille vasta puhuttaessa

(monimutkaisemmista) palveluiden koordinoinnista. Palveluiden koordinoinnilla tarkoitetaan useiden

palveluiden kommunikointia koskevia esim. interaktioiden järjestystä koskevia sääntöjä. Sillä siis

tähdätään varsinaisten liiketoimintatransaktioiden määräämiseen yksinkertaisen point-to-point

kommunikoinnin sijaan. Palveluiden koordinointiin palaamme myöhemmin. Kyseisestä argumentista

voi tosin olla montaa mieltä, koska myös yksikertainen palveluiden välinen (point-to-point)

viestinvälitys toteuttaa löyhän integraation.

Dr. Hao Hen (W3C Web Services Architecture Working Group) esittämää määritelmää

palveluorientoituneesta arkkitehtuurista (SOA) pidetään yleisesti hyvänä – ja ehkä parhaana –

määritelmänä. Hen mukaan SOA on arkkitehtuurityyli, jonka tarkoituksena on saavuttaa sovellusten

välinen kommunikointi mahdollisimman löysin sidoksin. He määrittelee palvelun edelleen tehtävänä,

jonka palvelun tarjoaja tekee palvelun käyttäjän puolesta pyrkien saavuttamaan ko. tehtävältä

edellytetyt tulokset.

45

... and Web services

• One way to implement SOA– WSDL, SOAP– REST-like services– ebXML

• In practice – and in research – these terms get mixedevery now and then– people talk about integration architectures and service-

oriented architectures as they were the same thing– people talk about service-oriented architectures and Web

services as they were the same thing

Web-palvelut puolestaan tarjoavat tavan toteuttaa SOA. SOA ei sinällään ota kantaa miten

kommunikointi toteutetaan. Mikäli toteutus tehdään Web-palvelukonseptin avulla, tarkoitetaan

käytännössä WSDL-kielen käyttöä palvelun tietojen kuvaamiseksi ja SOAP-protokollaa varsinaisen

kommunikoinnin toteuttamiseksi. Tutustumme näihin kieliin tarkemmin myöhemmin.

Vaikka kyseisten kielten käytöstä ollaankin päästy käytännössä sopimukseen, on myös esitetty muita

erilaisia näkemyksiä Web-palveluista. Nk. REST-like -palvelut (tai ”RESTful-palvelut”) toteuttavat

kommunikoinnin SOAPia kevyemmin ja tehokkaammin. REST (REpresentational State Trasfer) on

alun perin Roy Fieldingin väitöskirjassaan esittämä arkkitehtuurityyli hypermediajärjestelmiä varten.

REST käyttää tyypillisesti HTTP-protokollaa (esim. GET ja POST operaatiot) ja se nojautuu

määrättyjen standardisemantiikan omaavien korkean tason rajapintaoperaatioiden käyttöön (add,

remove, set, get,…). Näin ollen resurssien tarjoamat palvelut tai operaatiot ovat ”ennalta määrättyjä”,

toisin kuin perinteisessä Web-palvelukonseptissa. Myös ebXML tarjoaa toisenlaisen,

liiketoimintaorientoituneemman näkökulman Web-palveluihin. Näihin molempiin palaamme

myöhemmin.

Näitä kolmea käsitettä (integraatioarkkitehtuuri, SOA ja Web-palvelut) käytetään käytännössä usein

hieman väärin. Esimerkiksi integraatioarkkitehtuurista ja SOAsta puhutaan lähes synonyymeinä. Sama

pätee (erityisesti!) SOAn ja Web-palveluiden kohdalla. Termien käytössä kannattaakin olla

väärinymmärrysten välttämiseksi huolellinen.

46

SOA - requirements and principles from software engineering point of

view• As loose dependencies among services as possible

– aim at minimizing the dependencies, esp. the artificial ones– only real dependencies– the ”unity of information” should be possible to be defined

inside one service, not among several services• independent services

• Late configuration and service binding– services are possibly searched at run-time– connections between services are formed dynamically at run-

time

SOAan ja sen toteuttamiseen liittyy joukko vaatimuksia ja periaatteista, joista seuraavaksi käymme läpi

tärkeimpiä.

SOA pyrkii ratkaisuun, jossa palveluiden välillä on mahdollisimman vähän riippuvuuksia. Jo

komponenttiteknologiat pyrkivät tähän aikoinaan, mutta eivät täysin kyenneet sitä toteuttamaan.

Riippuvuuksista osa – erityisesti nk. keinotekoiset riippuvuudet - on haitallisempia kuin toiset.

Keinotekoiset riippuvuudet ovat sellaisia, jotka eivät ole välttämättömiä ja jotka usein johtuvat esim.

valituista teknologiaratkaisuista. Erityisesti näiden keinotekoisten riippuvuuksien eliminoiminen on

tärkeää esimerkiksi ylläpidettävyyden, siirrettävyyden jne. kannalta. Lisäksi tiedon yhtenäisyys tulisi

kyetä määrittämään yhden palvelun sisällä, ei monen palvelun kesken. Tämä sallii riippuvuuksien

minimoinnin lisäksi myös palveluiden itsenäisyyden.

SOA pyrkii myös palveluiden myöhäiseen konfigurointiin ja palveluihin sidontaan. Tavoitteena on –

erityisesti Web-palvelukonseptissa – että palveluita on mahdollista etsiä dynaamisesti ajonaikana.

Tämä mahdollistaa palveluiden etsimisen juuri kyseiseen tilanteeseen, kontekstiin ja tarpeeseen. Tämä

puolestaan myös edellyttää, että löydettyihin (tai tiedettyihin) palveluihin voidaan muodostaa yhteydet

dynaamisesti ajonaikana. Myös myöhäinen konfigurointi ja sidonta osaltaan auttavat palveluiden

välisten sidontojen minimoinnissa. Toisaalta ne saattavat aiheuttaa tehokkuusongelmia ajonaikana.

47

SOA - requirements and principles from software engineering point of

view• Aiming at long living services

– potentially increases the amount of users…if the service is shown to be useful

– better possibilities for the users to develop ways to manageerror situations, interoperability problems etc.

• Independence from implementation methods and techniques– interfaces are important, not how the services have been

implemented (c.f. distributed systems)• High level of abstraction

– parties offer services at relatively high level of abstraction

Palveluiden tulisi lisäksi olla mahdollisimman pitkäikäisiä. Pitkä ikä lisää potentiaalisesti

käyttäjämäärää ja tunnettuutta....mikäli palvelu osoittautuu hyödylliseksi. Lyhytikäiset ja helposti/usein

ei-saatavilla olevat palvelut ovat ongelmallisia muiden palveluiden kannalta: ne edellyttävät

tarvittavien virheistätoipumismekanismien toteuttamista (esim. palvelun korvaaminen toisella

palvelulla), mikä vähintäänkin aiheuttaa tehokkuusongelmia. Pitkäikäiset palvelut puolestaan antavat

käyttäjille (asiakasohjelmat) mahdollisuuksia virheiden ja yhteistoiminnallisuusongelmien käsittelyyn.

SOAn ja Web-palveluidenkin yksi tärkeimmistä vaatimuksista on toteutusriippumattomuus.

Asiakasohjelman kannalta palvelun rajapinta on oleellinen, ei palvelun sisäinen toteutus (vrt.

hajautustekniikat). Palveluilla tulisi lisäksi olla melko korkea abstraktiotaso. Tällä hetkellä käydään

melko vilkkaasti keskustelua siitä, mikä on palvelun ja toisaalta komponentin (vrt. hajautustekniikat)

ero ja mikä on ”oikea abstraktiotaso” palveluille. Tähän ei ole olemassa yksiselitteistä vastausta, vaan

asia on riippuvainen kulloisestakin tilanteesta. ”REST-hengen” soveltamisessa palvelupohjaisiin

järjestelmiin pyritään (kuten aiemmin todettiin) erityisen korkean abstraktiotason palveluihin

edellyttämällä, että palvelun rajapinta tarjoaa ennalta määrätyn joukon (tai sen osajoukon)

semantiikaltaan tunnettuja operaatioita. Tällöin pyritään paitsi palveluiden myös itse interaktion

korkeaan abstraktiotasoon. Palveluiden ja komponenttien eroa mietittäessä asiaa kannattanee miettiä

(myös) asiakassovellusten näkökulmasta. Tällöin voidaan karkeasti sanoa, että komponentteja

tarkastellaan tyypillisesti niiden rakenteen kannalta, kun taas palveluita tarkastellaan niiden tarjoaman

toiminnallisuuden kannalta.

48

SOA - requirements and principles from software engineering point of

view• Autonomy– services are independent and their management is decentralized– in addition to establishing connections, the independent parties

may also negotiate and make agreements on the forms of communication… …dynamically

• Agile management of requirements– ability to react on changing and new requirements (”a meta requirement”)

• Statelessness– If a service needs to retail its state for a longer period of time, its availability

to other clients may be impeded– Managing state information can also hinder scalability

• Service composability– it should be possible to coordinate and assemble services to form composite

services

Yksi SOAn periaatteista on pyrkiä autonomisiin palveluihin. Tällä tarkoitetaan käytännössä sitä, että

osapuolet ovat itsenäisiä eivätkä ne ole keskitetysti hallittuja. Tältä osin palvelu-orientoituneet

systeemit – ja ehkä erityisesti Web-palvelut – eroavat hajautetuista järjestelmistä. Hajautettua hallintaa

korostaen Web-palveluita kutsutaan myös ei-keskitetyiksi. Autonomisuuteen liittyy myös se, että

yhteyksien muodostamisen lisäksi itsenäiset osapuolet mahdollisesti myös neuvottelevat ja tekevät

sopimuksia kommunikointia koskien, mieluiten dynaamisesti. Esimerkki ketteryydestä vaatimusten

hallinnassa on puolestaan kyky reagoida muuttuviin ja uusiin vaatimuksiin. Tällaista vaatimusta uusiin

vaatimuksiin reagoinnista ja niiden hallinnasta kutsutaan myös meta-vaatimukseksi.

Tilattomuus on myös nostettu usein esille tärkeänä SOA-suunnitteluperiaatteena. Tilattomuus liittyy

oleellisesti myös muihin periaatteisiin, erityisesti tavoitteeseen pyrkiä mahdollisimman löyhiin

sidontoihin. Tilattomuus tarkoittaa oleellisesti sitä, että asiakassovelluksilta tulisi edellyttää

mahdollisimman vähän etukäteistietoa palvelusta. Palvelukutsu ei esimerkiksi siis saisi riippua

palvelun tilasta ja mahdollisesta edellisestä palvelukutsusta. Lisäksi tilainformaation hallinta saattaa

haitata sekä palvelun saavutettavuutta että skaalautuvuutta.

Yhdeksi SOAn suunnitteluperiaatteeksi mainitaan usein myös palveluiden yhdistettävyys. Tämä

tarkoittaa sitä, että palveluita tulisi voida yhdistellä isommiksi palveluiksi, joille niinikään pätevät

kaikki SOAn mainitut SOAn vaatimukset ja periaatteet.

49

Service-Oriented Architecture (SOA)

Broker

Requestor Provider

Find

Bind

Describe,Publish

Dr. Hao He, W3C Web Services Architecture Working Group:Service Oriented Architecture is an architectural style whose goal is to achieve loose coupling among interactive software agents. A service is a unit of work done by a service provider to achieve desired end results for a service consumer.

Tämä yleiskuva palveluorientoituneesta arkkitehtuurista on yleisesti käytetty ja sitä kutsutaan toisinaan

myös Web-palvelun arkkitehtuuriksi. Sama perusarkkitehtuuri esiintyy useissa eri lähteissä, pienin

nimeämismuutoksin varustettuina. Lisäksi riippuvuudet voidaan usein nähdä kaksisuuntaisiksi. SOA ei

kuitenkaan ole sama asia – kuten edellä todettiin - kuin Web-palvelut; Web-palvelut ovat vain yksi

esimerkki SOA:n toteuttamisesta. SOA kuvaa toisin sanoen yleisen mallin eikä ole ainoastaan Web-

palveluita varten. Lisäksi tässä ”arkkitehtuurikuvassa” on ennen kaikkea kyse palvelukonseptiin

liittyvistä eri rooleista ja niiden riippuvuuksista. Seuraavaksi pureudumme kaavion eri osiin tarkemmin.

Esimerkkiskenaario:

1.) Palvelun tarjoaja (Provider) julkistaa palvelun (Publish)

2.) Asiakas (Requestor) etsii haluttua palvelua kutsuen rekisteripalvelua (Broker)

3.) Asiakas saa rekisteripalvelusta vastauksen, jossa kuvataan palvelu ja se miten sitä voidaan käyttää

4.) Asiakas kutsuu palvelua saadun kuvauksen perusteella

50

Provider

• Provides services– e.g., on-line hotel reservation

• Describes its service (in WSDL) based on the specification prepared by a service Broker– describe operation

• Registers its service with Broker– publish operation

• Requestor is be able to invoke a registeredoperation (with bind operation)

Palvelun tarjoajan tulee kuvata palvelu (describe operaatio) jollain yleisesti käytössä olevalla tavalla.

Käytännössä tämä tapa on Web Service Description Language (WSDL), jota käsitellään lisää

myöhemmin. Palvelun kuvaus välitetään rekisteriin (publish operaatio), josta asiakkaat voivat sitä

hakea. Asiakas voi myöhemmin käyttää palvelun tarjoamia (ja mahdollisesti julkaisemia) operaatioita

(bind operaatio).

51

Requestor• Looks for services (more precisely: asks a

Broker to look for services) and uses them• May also create a new service by integrating

services provided by Providers– e.g., a travel agency using on-line hotel reservation

and flight booking services

• Scenario:1) invokes Broker to get services of interest (find

operation)2) selects a service/services and then invokes the

corresponding Provider(s) (bind operation)

• Becomes a Provider if it registers itself withBroker

– hierarchy of services

Palvelun käyttäjä (Requestor) voi etsiä haluttuja palveluita rekisteristä antamalla sopivia

hakukriteerejä. Saatuaan rekisteriltä vastauksena hakuehtoihin sopivat palvelut, palvelun käyttäjä voi

ottaa yhteyttä valitsemaansa palveluun. Rekisteristä saadaan käytännössä palvelujen kuvaukset

(WSDL), jotka sisältävät kaiken tarvittavan tiedon: mitä operaatioita on tarjolla, mitä parametrejä ne

edellyttävät ja miten palveluun otetaan yhteyttä. On kuitenkin huomioitavaa, että tämä skenaario on

vain esimerkki. Palvelun käyttäjän ei luonnollisestikaan tarvitse etsiä palvelua rekisterissä mikäli sillä

on jo tarvittavat tiedot palvelun käyttämiseen.

Palvelun käyttäjä (Requestor) voi itse asiassa toimia myös palvelun tarjoajan roolissa (Provider):

palvelun käyttäjä voi muodostaa uuden palvelun yhdistämällä muita palveluja ja rekisteröimällä tämän

uuden korkeatason tai monipuolisemman palvelun. Näin voidaan muodostaa hierarkisia palveluita.

52

Broker

• Registers service descriptions submitted byProviders (e.g., using UDDI)– publish operation

• Looks for services (i.e., executes a search) when asked– find operation– e.g., a travel search site for finding hotels according

to given preferences

• Defines the service description format and an API for registering and searching services

• It is actually also a Provider

Rekisteri (esimerkiksi UDDI rekisteri) sisältää joukon palvelujen julkaisemia kuvauksia. Se kategorisoi

kuvaukset, jotta niiden etsintä eri kriteerein olisi joustavaa. Palvelun julkaiseminen ja toisaalta

palvelujen etsiminen tapahtuu määriteltyjen operaatioiden avulla. Rekisterin tulee määritellä palvelun

kuvaus ja API täsmällisesti, koska niitä tulee voida käyttää muista sovelluksista käsin (ei siis tarkoitettu

ihmisten luettaviksi).

Myös rekisteri voidaan nähdä itse asiassa palvelun tarjoajana: sen tarjoama palvelu on palvelurekisteri,

jolta voidaan kysellä muita palveluja ja niiden yhteystietoja.

53

Selectively and briefly on recent history of software engineering…

• a simple thing in principle…but the component technologies themselves (RMI, (D)COM, CORBA,…) offer interesting features

• possibility to use components/subsystems as ”black boxes” (the interface is essential)

• the programmers need to handle the interoperability problems and configurationchallenges

Components and program distribution

• a “natural” way to think of and manage program concepts (classes, objects) and their relationships…and thus the program structures

OO paradigm

• an abstraction level for programmersThe developmentof programminglanguages

Ohjelmistuotannon välineiden ja ohjelmointikielten kehityksessä abstraktiotason nosto on aina

näytellyt merkittävää osaa, eikä ole mitään syytä olettaa tähän trendiin tulevan muutosta jatkossakaan.

Esimerkiksi ohjelmointikielten kehitys yleisesti on pyrkinyt tarjoamaan ohjelmoijille korkeamman ja

ohjelmoijaystävällisemmän abstraktiotason ohjelmien kirjoittamiseksi. Olioperustainen

ohjelmistokehitys (ja olioperustaiset ohjelmointikielet) tarjosivat/tarjoavat luonnollisen tavan ajatella

ohjelmien käsitteitä (luokat ja oliot) ja niiden suhteisiin perustuvaa ohjelmien rakennetta. Komponentit

ja hajautustekniikat edelleen tarjoavat korkeamman abstraktiotason oliokieliinkin verrattuna. Hajautus

on periaatteessa yksinkertainen asia…mutta eri komponenttiteknologioilla (RMI, (D)COM,

CORBA,…) on kiinnostavia ominaisuuksia. Ensinnäkin ne sallivat integroitavien

komponenttien/alisysteemien käsittelemisen ”mustana laatikkona” (rajapinta oleellinen).

Komponenttien yhteiskäyttöön ja niiden konfigurointiin liittyvät ongelmat on käytännössä jätetty

ohjelmoijien ratkottaviksi.

Mikä tulee siis olemaan seuraava abstraktiotason nosto? Jos se on SOA, niin miten se eroaa

periaatteellisella tasolla hajautustekniikoista?

54

What’s new in SOA then?• A pure software architecture point of view

– In principle, SOA is not very interesting and it does not seem to offer that much new… (c.f. component technologies)

– However,…• loose coupling can be implement in an interesting way using e.g.

Web service technologies – an agreement on Web service standars…more or less: WSDL, SOAP, and

possibly others (e.g. UDDI)

• not just for RPC– document-style communication

• one goal is to distribute not only the services but also theirmanagement

– decentralized applications

• SOA can be considered ”a step to the next abstraction level”– components -> services

Mitä uutta SOA tarjoaa olemassa oleviin ajattelutapoihin ja tekniikoihin verrattuna? Jos asiaa

tarkastellaan puhtaasti ohjelmistoarkkitehtuurisesta näkökulmasta, ei SOA periaatteessa vaikuta

kovinkaan kiinnostavalta eikä e näytä tarjoavan oleellisesti paljonkaan uutta (vrt. hajautusteknologiat).

Edellä mainitut SOAn periaatteet ja vaatimukset voidaan hyvin pitkälle katsoa samoiksi odotuksiksi ne,

joita hajautustekniikoilta aikoinaan odotettiin ja edellytettiinkin: korkea abstraktiotaso, toteutuskieli-

ja/tai alustariippumattomuus, autonomisuus, mahdollisimman löyhät sidonnat, tavoitteena itsenäiset ja

pitkäikäiset komponentit, ketteryys vaatimusten hallinnassa jne. Hajautustekniikat eivät kuitenkaan

kyenneet kovin hyvin vastaamaan näihin haasteisiin. SOAlta ja Web-palveluilta odotetaankin paljon

näiden haasteiden näkökulmasta. Esimerkiksi löyhät sidonnat voidaan toteuttaa mielenkiintoisesti Web-

palveluteknologioita hyödyntäen, joista käytännössä ollaan päästy sopimukseen (WSDL ja SOAP,

näihin palataan myöhemmin).

Lisäksi muitakin eroja tuntuu löytyvän. SOAa ja Web-palveluita ei ole tarkoitettu vain RPC-tyyppiseen

kommunikointiin. Lisäksi tavoitteena on paitsi ohjelmiston myös niiden hallinnan hajautus. SOA

voidaankin kuitenkin katsoa tietynlaiseksi ”hypyksi seuraavalle abstraktiotasolle” (komponentit ->

palvelut).

55

What’s new in then SOA?• A broader point of view

–brings the software engineering and business points of views closer to each other!• not that clear before (c.f. OO and component

technologies)• systems consist of service that have their own business

processes• business processes and their comprehension as well as

understanding the requirements are essential in the development of services

• care and attention is needed when talking about the concepts and terms: e.g. service and architecture fromsoftware engineering and business points of views

SOAa ei kuitenkaan kannata – eikä pidä – tarkastella vain puhtaasta ohjelmistotuotannollisesta

näkökulmasta. SOAn ehkäpä suurin uutuusarvo on siinä, että se tuo ohjelmistoteknistä ja

liiketoimintaorientoitunutta näkökulmaa lähemmäksi toisiaan, tai ainakin se mahdollistaisi tämän.

Tämä ei ole ollut yhtä selvästi näkyvissä ennen (vrt. olioperustaisuus tai hajautustekniikat). SOA

mahdollistaa ”palveluekosysteemit” (kuten niitä usein kutsutaan), jotka koostuvat palveluista, joilla

omat liiketoimintaprosessit. Tällöin liiketoimintaprosessien ja niiden vaatimusten ymmärtäminen

oleellista palveluiden toteuttamisessa. Osittain tämän vuoksi, kuten aiemmin mainittiin, oleellisena

erona komponenttiteknologioihin verrattuna on se, että komponentteja tarkastellaan yleensä niiden

rakenteen kannalta, kun taas palveluita tulisi tarkastella niiden tarjoaman toiminnallisuuden kannalta.

Käsitteiden kanssa on syytä kuitenkin olla huolellinen: esim. palvelu ja arkkitehtuuri tarkoittavat eri

asioita ohjelmistokehityksen ja liiketoiminnan näkökulmista. Myös esimerkiksi tehokkuudella ja

uudelleenkäytöllä on eri implikaatiot: ohjelmistotekniikan kannalta nämä termit ovat tuttuja, mutta

liiketoiminnan näkökulmasta näillä viitataan usein tehokkaaseen informaatiojärjestelmien

hyödyntämiseen ja esim. kustannus-hyötytehokkuus –analyyseihin.

56

SOA and Web services• Web services offer one way to implement SOA• SOA and Web services aim at automatically solving

problems related to interoperability, configuration etc.– an agreement on the standards partly enables this

• challenges: a whole range of ”standards”

– possible problems:• nobody really knows the code, what if there is a need to understand the

code…. • genericity/flexibility vs. automation

• A lot of tool support for building Web services and clientapplications– varying features– support for Web service languages and recommendations, and

their different versions varies

Kuten aiemmin todettiin, Web-palvelukonsepti tarjoaa yhden tavan toteuttaa SOA. Tämä tapa perustuu

”Web-palvelustandardien” käyttöön: palvelut kuvataan WSDL-kielen avulla ja kommunikointi

toteutetaan SOAPin avulla. Näihin kieliin palaamme myöhemmin. On kuitenkin todettava, että ”Web-

palvelustandardeihin” liittyy myös paljon ongelmia. Toisaalta nämä standardit kehittyvät jatkuvasti ja

toisaalta esimerkiksi palveluiden koordinointiin liittyen ei ”standardeista” olla aivan vielä päästy

vastaavaan yhteisymmärrykseen. Tosin juuri tällä hetkellä näyttää siltä, että tämäkin ongelma on

ratkeamassa. Sanaan ”standardi” kannattaakin yleisesti suhtautua varauksellisesti Web-palveluihin

liittyvistä teknologioista puhuttaessa: kyseessä saattaa olla lähinnä ehdotus eikä varsinaisesti standardi.

SOA ja Web-palvelut pyrkivät periaatteessa ratkaisemaan yhteentoimivuuteen, konfigurointiin jne.

liittyvät ongelmat automaattisesti ja vieläpä ajonaikana. Esimerkiksi mikäli kutsuttavaa palvelua ei ole

saatavilla tai yhteentoimivuusongelmia ilmenee, tulisi kutsuvan palvelun kyetä joko ratkomaan

yhteentoimivuusongelmat tai korvaamaan ko. palvelu toisella vastaavan toiminnallisuuden omaavalla

palvelulla. Tämä on kuitenkin vielä useissa tapauksissa kaukana käytännön toteutuksista siitä

huolimatta, että useista standardeista onkin päästy jo yksimielisyyteen. Automaattisuuteen liittyy myös

omat ongelmansa. Esimerkiksi muutosten tekeminen manuaalisesti voi olla vähintäänkin haasteellista.

Tällä hetkellä on olemassa runsaasti työkalutukea Web-palveluiden ja asiakassovellusten tekemiseksi ja

osin generoimiseksi. Esimerkiksi palvelun rajapintakuvaus (WSDL) voidaan generoida automaattisesti

palvelun rajapinnan (esim. Java) perusteella. Nämä työkalut kuitenkin poikkeavat toisistaan sekä

tarjottujen ominaisuuksien että toteutustapojen suhteen. Esimerkiksi samasta rajapinnasta (esim. Java)

eri työkalut generoivat erilaisia WSDL-kuvauksia. Lisäksi eri työkalujen tarjoama tuki eri Web-

palvelukielille, niiden eri versiolle ja eri suosituksille vaihtelee.

57

Defining Web services

• W3C puts it: ”programmatic interfaces made available for application to applicationcommunication are referred to as Web services”

• ...or more precisely:”A Web service is a collectionof functions packaged as a single entity and published to the network for use by otherapplications”-> a hierarcy of Web services: more complicatedones are aggregated from simpler ones

• or perhaps:“XML applications mapped to programs, objects, databases, or business functions”

Web-palveluille on esitetty lukuisia määritelmiä. Yksinkertaisimmillaan niiden on sanottu olevan

sovelluksia, joihin voidaan ottaa yhteys käyttäen standarditeknologioita (kuten XML ja HTTP). On

myös sanottu, että Web-palvelu on käytännössä sama asia kuin SOAP-protokollan käyttö (tästä lisää

myöhemmin). Nämä eivät kuitenkaan ole kovin hyviä määritelmiä, sillä ne ovat aivan liian laajoja.

W3C puolestaan määrittelee Web-palvelun (vapaasti käännettynä) joukkona ohjelmiin liittyviä

rajapintoina, jotka ovat käytettävissä sovellusten välisessä kommunikoinnissa. Tämäkin määritelmä on

melko yleinen.

Hieman tarkemmin määriteltynä Web-palvelun on sanottu olevan joukko funktioita, jotka on pakattu

yhdeksi kokonaisuudeksi ja julkaistu verkossa muiden sovellusten käytettäväksi. Tämä määritelmä on

jo selvästi parempi. Oleellista tässä on se, että näitä tarjottuja funktioita voidaan yhdistellä ja pakata

uusiksi palveluiksi. Se myös implikoi Web-palveluille hyvin oleellisen piirteen: Web-

palveluhierarkian. Toisin sanoen yksinkertaisimmista palveluista voidaan koostaa monimutkaisempia

palveluita. Toinen oleellinen asia tässä määritelmässä on palveluiden julkaiseminen. Jotta Web-palvelu

olisi aidosti vapaasti etsittävissä ja käytettävissä, edellyttää se, että palveluiden käyttäjät voivat etsiä

palveluita jostain yleisesti tunnetusta ”markkinapaikasta”.

Viimeinen määritelmä kuvaa Web-palvelut XML-sovelluksina, jotka on sidottu joihinkin ohjelmiin,

tietokantoihin tai liiketoimintafunktioihin. Web-palveluissa käytetään XML-pohjaisia kieliä, mutta

palveluiden kutsuminen XML-sovelluksiksi voi olla myös harhaanjohtavaa. Tässä määritelmässä

oleellista on se, että itse palvelun toiminnallisuus voi mitä vain ja se on voitu toteuttaa millä tahansa

halutulla tavalla. Palvelun käyttöä varten tulee kuitenkin toteuttaa käytettäviä standardeja ymmärtävä ja

käsittelevä interaktiota tukeva kerros. Web-palvelukonseptin voidaan ajatella olevan myös mekanismi

back-end systeemien paketoimiseksi (wrapping). Tällaisia back-end systeemejä voivat olla vaikkapa

tietokanta, legacy-systeemi jne.

Käyttäessään Web-palvelua ohjelma lähettää pyynnön/kyselyn XML-muodossa ja yleensä myös

vastaanottaa vastauksen niin ikään XML-muodossa. Jotta kommunikaatio olisi mahdollista, täytyy

viestien formaatista ja käytettävän palvelun rajapinnasta sopia. Tämän lisäksi tulee sopia siitä

mekanismista, joka määrittelee miten Web-palveluja tulee julkistaa ja miten niitä voidaan etsiä.

58

A vision of Web services

• Software will be assembledfrom a web of services

• Building applications just-in-time

• Discovering and coordinating services on the Web dynamically

• From distributed systems to de-centralized applications

PDA

PC Mobile phone

Web-palveluiden alkuperäisen ja tavoiteltavan vision mukaisesti palveluja tulisi voida etsiä ja niitä

tulisi voida käyttää dynaamisesti. Tietyn palvelun käyttöön sitominen tulisi siis olla ajonaikainen

(dynaaminen) toimenpide, ei staattinen. Sovelluksia tulisi voida muodostaa olemassa olevia palveluita

hyödyntäen aina kulloisenkin tarpeen mukaisesti. Nämä yhdessä edellyttävät lisäksi sen, että

palveluiden koordinoinnin tulisi myös olla dynaamista.

Ehkäpä yksi oleellisimmista näkökulmista on, että Web-paveluiden myötä siirryttäisiin hajautetuista

järjestelmistä ei-keskitettyihin järjestelmiin. Tämä merkitsisi sitä, että tarjolla olisi verkko erilaisia

(hallinnan näkökulmasta itsenäisiä ja tasavertaisia) palveluita, joita mikä tahansa sovellus voi käyttää ja

mahdollisesti yhdistellä uusiksi palveluiksi.

Nämä edellä esitetyt visiot ovat luonnollisesti vielä kaukana todellisuudesta. Esimerkiksi

tietoturvakysymykset ja käyttöoikeudet asettavat reunaehtoja ja vaatimukia, joita ei vielä yleisellä

tasolla olla täysin ratkaistu. Yksittäisiä ratkaisuja ja ratkaisuehdotuksia on esitetty, mutta yhtenäistä

periaatetta ja käytäntöjä ei vielä ole. Näin ongelmiin palaamme myöhemmin.

59

Layers of Web services

Transport(HTTP, SMTP, FTP, JMS, IIOP, etc.)

SOAP and its extensions (for realibility, transactions etc.), WSDL, UDDI

Util

ityse

rvic

es

(sec

urit

y, tr

ansa

ctio

ns, Q

oS, e

tc.)

Collaboration services(orchestration, choreographies)

Application services

Kalvolla esitetyn kuvan alimpana kerroksena ovat viestinvälitysprotokollat. Vaikka Web-palveluita

usein sanotaan käyttävän HTTP:tä – ja näin käytännössä hyvin usein onkin – itse Web-

palvelukonseptia ei ole sidottu tiettyyn viestinvälitysprotokollaan. Yhtä hyvin käytössä voisi olla

esimerkiksi SMTP tai FTP. Kuvan seuraavan kerroksen muodostavat Web-palvelustandardit SOAP,

WSDL ja UDDI. Näistä ensimmäistä käytetään kommunikointiin sovellusten kesken. WSDL-kieltä

puolestaan käytetään kuvaamaan tarjottu Web-palvelu (tarjotut funktiot ja yhteydenottotapa). UDDI on

yksi tapa toteuttaa palveluiden ”markkinapaikka” (rekisteri), mutta muitakin vaihtoehtoja on olemassa.

Palvelun ”mainostaminen markkinapaikassa” ei palvelun pystytyksen kannalta toki ole välttämätöntä.

Mikäli asiakaskunta tietää miten palveluun saa yhteyden ja miten sitä voidaan kutsua, on se tarpeetonta.

Näin on usein esimerkiksi kun Web-palvelukonseptia käytetään rajoitetussa ympäristössä kuten

yrityksessä. Tällöin mikäli käyttö tapahtuu palomuurien sisäpuolella, ei kommunikoinnin

turvallisuuden takaamiseen tarvitse kiinnittää välttämättä huomiota.

Palveluverkosto (esimerkiksi toisiaan käyttävät palvelut) edellyttää palvelujen koordinointia.

Koordinointipalvelut on esitetty kuvassa kolmantena kerroksena (collaboration services). Esimerkiksi

sekvenssi yksittäisten palvelujen suorittamista operaatiosta voidaan haluta koostaa yhdeksi

liiketoimintatransaktioksi. Palveluiden yhdistämiseen käytetään nk. orkestointi- ja koreografiakieliä.

Näistä orkestrointi tarkoittaa palveluiden yhdistämistä yhdestä tietystä liiketoimintaprosessia

suorittavasta näkökulmasta, kun taas palvelukoreografia sallii useita samanaikaisia ja tasavertaisia

näkymiä liiketoimintaprosessiin. Näihin palataan vielä myöhemmin. Lopuksi kuvan ylimpänä

kerroksena ovat itse Web-palvelut.

Kuvan kaikkia eri kerroksia koskee ja tukee joukko muita hyödyllisiä palveluja (utility services). Jotkin

käytetyt ratkaisut koskevat kaikkia kerroksia ja voivat siten vaikuttaa käytettäviin formaatteihin,

protokolliin ja API-määrittelyihin tai vaikkapa vaikuttaa niiden valintaan. Turvallisuusaspektit ovat

esimerkiksi hyvin tärkeitä Web-palvelujen kannalta (erityisesti liiketoimintakriittiset palvelut). Vaikka

SOAP ei tällä hetkellä suoranaisesti tuekaan turvallista viestinvälitystä, on tämä puute huomioitu ja sen

korjaamiseksi on esitetty ehdotuksia SOAP-laajennoksiksi ja esim. digitaalisten allekirjoitusten

liittämiseksi SOAP viesteihin (SOAP Security Extensions: Digital Signature). Toisaalta turvallisuus

alimmalla tasolla voi tarkoittaa vaikkapa SSL:n tai TLS:n käyttöä. Palvelun laadun huomioiminen

(Quality of Service, QoS) puolestaan painottaa vastinaikojen, hinnan, transaktioiden ja muita

liiketoimintainteraktioissa oleellisia asioita.

60

Usage examples of Web services• Software migration and platform integration

– wrapping legacy systems to act like a Web service– ”agreement on disagreement”

• Agile business processes– flexible integration– business collaborations and agreements– e.g., streamlining business operations, invoicing, shipping

operations etc.

• Service registries and searching– searching goods or services according to given requirements

(e.g., best price)– coordinating travel tickets or hotel reservations for a given date

• RPCs– location transparency!

• And many, many more…

Web-palvelut voivat käytännössä olla mitä tahansa. Paketoimalla vanha legacy-systeemi Web-

palveluksi sovitaan käytännössä erimielisyydestä: legacy-systeemien logiikka tai toteutusta ei tarvitse

muuttaa ja ne voivat olla hyvinkin eri tavoin toteutettuja.

Erilaiset ketterät liiketomintaprosessit ovat myös potentiaalisia Web-palvelukonseptin käyttökohteita.

Esimerkiksi liiketoimintaoperaatiot (laskutus, tilaukset jne.) voidaan tarjota Web-palveluina.

Liiketoimintasopimuksien ja liiketoimintaprosessien määritykset ovat erityisesti painotettuja

RosettaNet ja ebXML –kosepteissa, jotka ovat tietyssä mielessä vaihtoehtoisia näkökulmia Web-

palveluihin. Näihin palataan myöhemmin.

Yksi palvelun muoto voi olla vaikkapa muiden palveluiden etsintään tarkoitettu rekisteri. Rekisteristä

voidaan etsiä palveluita annetuin kriteerein (esim. halvin matka). Palvelu voi myös hyödyntää muita

palveluita. Esimerkiksi matkanjärjestämispalvelu voi käyttää hyväkseen sekä palvelua, jonka avulla

voidaan etsiä halvimmat lennot kohteeseen annetulla aikavälillä, että palvelua, joka etsii sopivimman

hotellin (annettujen kriteerien mukaisesti) matkakohteessa.

Web-palveluja käytetään – tietyssä mielessä vastoin sen alkuperäistä käyttötarkoitusta ja visiota –

etäkutsujen toteuttamiseen. Se onkin tällä hetkellä yleisin käyttömuoto. Tämä voidaan tehdä siten, että

kutsun muoto on kutsuttavan ohjelman sijainnista riippumaton eli se ei siis näy kutsun muodosta

(location transparency). Etäkutsujen toteuttamiseen on kuitenkin jo olemassa useita eri menetelmiä.

61

Web services - a silver bullet orreinventing the wheel?

• A silver bullet? No– Web services provides rather a new layer, not a replacement for

existing computing infrastructure– Web services play an important role as a tool for bridging technology

domains– bridging is based on standard formats

• Reinventing the wheel? No– Web services are not language nor platform dependent like DCOM,

RMI etc.– Web services are dynamic and disconnected; connections are

transient and temporary– Web service infrastructure assumes that parties can be connected

without prior knowledge of each other, i.e., any client can bind to anypublished service (as long as the service description and security requirements are followed)

– From distributed applications to de-centralized applications

Web-palvelu ei tarjoa mitään mullistavan uutta. Web-palvelua voidaan ajatella ylimääräisenä

kerroksena, joka mahdollistaa sovellusten välisen interaktion. Se ei korvaa eikä sen ole tarkoitus

korvata olemassa olevia tekniikoita (esim. hajautustekniikat) eikä olemassa olevia ohjelmistoja. Koska

kyseessä on kevyt XML-pohjainen integrointi käyttäen yleisesti hyväksyttyjä standardeja, antaa Web-

palvelukonsepti mahdollisuuden silloittaa eri teknologioita. Esimerkiksi palvelu voi olla toteutettu

.NET ympäristössä kun taas sen asiakas voi J2EE-toteutus.

Web-palvelu ei kuitenkaan ole myöskään pyörän uudelleen keksimistä. Web-palveluissa ei ole kyse

niinkään hajautusteknologiasta (kuten CORBA, DCOM, RMI) vaan siinä pyritään ei-keskitettyyn

järjestelmään (ainakin periaatteessa). Lisäksi Web-palvelut eivät ole ohjelmointikieli- tai

alustariippuvaisia kuten esimerkiksi RMI ja DCOM. Edelleen voidaan sanoa, että yhteydet on

tarkoitettu transienteiksi: palveluihin kytkeydytään dynaamisesti aina tarpeen mukaan. Palvelun

käyttäjän ei tarvitse tietää palvelun toteutuksen yksityiskohtia vaan sille riittää ainoastaan palvelun

kuvaus. Web-palveluissa on myös oleellista se, että palvelun käyttäjän ja palvelun välillä ei tarvitse olla

ennalta määriteltyä sopimusta (tämä on kuitenkin mahdollista ebXML-konseptissa) vaan periaatteessa

mikä sovellus tahansa voi käyttää julkaistua palvelua, edellyttäen että palvelun kuvausta ja mahdollisia

turvallisuusvaatimuksia noudatetaan. Tämä luonnollisesti pätee annetussa ympäristössä: mikäli

kyseessä on esimerkiksi yrityksen sisäisessä verkossa tarjottu palvelu, voi palvelua käyttää vain

sovellukset, joiden on mahdollista ottaa palveluun yhteys.

62

Formats and APIs• Web Service Description Language (WSDL)

– a format for describing a Web service interface, data, message types, interactions patterns, and protocol mappings

• Simple Object Access Protocol (SOAP)– a message format for invoking a Web service

– binds the WSDL description

Edellä esitetty Provider-Requestor-Broker -roolijako kuvaa erilaiset Web-palvelujen käsitteet ja

konseptit. Se ei vielä ota kantaa siihen, mitkä ovat käytetyt formaatit ja APIt. Tosin myös siitä on

päästy yleisesti yhteisymmärrykseen. Palvelujen kuvaukset ja viestinvälitys suoritetaan käyttäen

WSDL ja SOAP -formaatteja (alunperin IBM:n ja Microsoftin ym. yhteisenä ehdotuksena). SOAP ja

WSDL ovatkin jo vakiinnuttaneet asemansa. Palvelurekisteri voidaan toteuttaa esimerkiksi UDDI-

rekisterinä, mutta sen rinnalle on tullut muitakin kandidaattiteknologioita pääosin UDDI:n tietynlaisen

rajoittuneisuuden vuoksi.

WSDL ja SOAP -spesifikaatioit kehittyvät edelleen: uuden versiot seuraavat toisiaan ja niihin liittyviä

muita suosituksia ja ehdotuksia (W3C) tehdään jatkuvasti. Eri versioiden käyttö luonnollisestikin johtaa

yhteentoimivuusongelmiin. Lisäksi nämä spesifikaatiot sisältävät optionaalisia sääntöjä ja kaikki

toteutukset eivät välttämättä toteuta samoja optionaalisia piirteitä. Tämä saattaa myös aiheuttaa

yhteentoimivuusongelmia, vaikka eri osapuolet käyttäisivätkin samoja versioita. Web Service

Interoperability (WS-I) yhteisö pyrkiikin pureutumaan näihin ongelmiin antamalla suosituksia näiden

spesifikaatioiden käyttötavoista ja niiden eri versioiden yhteiskäytöstä. Vaikka tavoite onkin varsin

hyvä, on tehtävä silti varsin haasteellinen. WS-I yhteisön roolia käsitellään tällä kurssilla myöhemmin.

63

Simple Object Access Protocol(SOAP)

64

SOAP• As XML-RPC, used for representing cross-platform method

invocations in XML• Supports multiple transport protocols: HTTP (most commonly

used), SMTP etc.• The ”object” in the acronym is a bit misleading

– object references are missing from SOAP

• Looses clearly to binary RPC in performance– generating and parsing XML-based data takes time

• Current W3C recommendation is SOAP 1.2 (1st edition published 2003, 2nd edition published 2007), although version 1.1. is also still used

• Extensibility– features can be added as layered extensions– e.g., proposals for extending SOAP to carry digital signature

information have been made

SOAPin uusin versio 1.2 on vuodelta 2003. Sitä voidaan käyttää esim. tyypilliseen (yksisuuntaiseen)

pyyntö-vaste –kommunikointiin, jolloin pyyntöä varten otetun HTTP-yhteyden aikana palautetaan

myös vaste. Sitä voidaan käyttää myös kaksisuuntaiseen pyyntö-vaste –kommunikointiin (esim. HTTP-

palvelin molemmissa päissä). SOAPia voidaan käyttää etäkutsujen merkkaamiseen (vrt. XML-RPC),

mutta sen käyttö ei suinkaan rajoitu siihen. Verrattuna binäärisiin formaatteihin SOAP on melko

tehoton. Tämä johtuu suurelta osin SOAPin XML-pohjaisuudesta: XML:n käsittely (jäsentäminen,

generointi) on melko hidasta.

SOAP on riippumaton kuljetusprotokollasta. Yleisimmin käytössä on HTTP, mutta erimerkiksi SMTP

tai FTP käyvät myös. Esimerkiksi asynkroninen viestinvälitys (esim. käyttämällä sopivia

viestinvälitysprotokollia kuten SMTP) on toteutettavissa SOAPin avulla. SOAPin

käyttömahdollisuudet eivät rajoitu pyyntö-vaste –kommunikointiin. Se voi toimia yhteisenä

kutsuformaattina, jonka avulla voidaan esim. integroida heterogeenisia komponenttiteknologioita

(CORBA, DCOM etc.) käyttäviä järjestelmiä. Se soveltuu myös hyvin Internetiä hyödyntäviin (löyhästi

kytkettyihin) B2B- ja B2C-sovelluksiin. Lisäksi SOAPin arvo kevyenä protokollana on erityisen tärkeä

pienille laitteille, joissa saattaa olla vain yksinkertainen HTTP-ympäristö ja XML-jäsennin, sillä niihin

ei voi sisällyttää laajoja runtime-osia. SOAPin yksi tärkeistä eduista on sen laajennettavuus. SOAPin

ns. header-osa mahdollistaa sen. Sen avulla voidaan esimerkiksi viestiin liittää sovellusriippumatonta

informaatiota. SOAPin nimen ”Object” on harhaanjohtava, koska SOAPissa ei ole objektiviittauksia.

Tähän ja muihin SOAPin puutteisiin palataan niin ikään myöhemmin.

65

SOAP concepts• An envelope defines a framework for a SOAP message

– both application-specific and application-independent informationcan be included in the envelope

– contains a required Body and an optional Header

• Header (optional) includes application-independentinformation– extension mechanism– used e.g. for passing directives or contextual information

related to the processing of the message

• Body (mandatory) includes application-specific information– it contains the main end-to-end information

• e.g., request/invocation and the parameters needed

SOAPin pääosat ovat kirjekuori (envelope), otsikko (header) ja runko (body). Kirjekuori määrittelee

kehyksen SOAP-viestille. Se sisältää otsikko- ja runko-osat. Otsikko ei SOAP-viesteissä ole

pakollinen, mutta mikäli sitä käytetään, on sen oltava alussa ennen runko-osaa.

SOAPin otsikko-osa (header) mahdollistaa laajennettavuuden. Sen avulla voidaan esimerkiksi viestiin

liittää sovellusriippumatonta informaatiota. Tällaista informaatiota on esimerkiksi turvalliseen

viestinvälitykseen liittyvät asiat ja erilainen ohjausinformaatio viestin käsittelemiseksi.

SOAP kirjekuoren pakollisessa runko-osassa välitetään varsinainen sovellusspesifi tieto. Esimerkiksi

pyyntö-vastaus –kommunikoinnin tapauksessa siinä välitetään varsinainen pyyntö (esim.

operaatiokutsu) ja vastaus. Myös virheilmoitukset merkataan runko-osaan.

66

SOAP envelope (mandatory)

Header (optional)

Body (mandatory)

Header Entry

Header Entry

.......

Body Entry

Body Entry

.......

SOAP message structure:

<env:Envelopexmlns:env=“http://www.w3.org/2003/05/soap-envelope”>

<env:Header><!-- optional header blocks go here -->

</env:Header><env:Body>

<!-- requests/responses --><!-- or Fault elements go here -->

<env:Body><env:Envelope>

SOAP-viestin juurielementti on Envelope. Sen alielementteinä ovat mahdollinen Header ja pakollinen

Body. SOAP-viestin rakenne on varsin yksinkertainen. Viestin monimutkaisuus muodostuu Header ja

Body osien sisäisestä rakenteesta.

SOAP spesifikaatio sisältää paljon optionaalisia sääntöjä. Tämä voi aiheuttaa ongelmia käytännössä:

kaksi SOAP toteutusta eivät välttämättä toteuta kaikkia (tai samoja) optionaalisia piirteitä, mikä

puolestaan voi aiheuttaa kommunikointiongelmia.

67

SOAP envelope

• A namespace identifying the SOAP version usedis given in Envelope element– SOAP 1.2: http://www.w3.org/2003/05/soap-

envelope– SOAP 1.1:

http://schemas.xmlsoap.org/soap/envelope• e.g.

<env:Envelopexmlns:env="http://www.w3.org/2003/05/soap-envelope">

Envelope-elementillä on nimiavuuruusmääre, joka spesifioi käytettävän SOAP version. Esimerkiksi

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">

kertoo, että kyseessä on SOAP 1.2 versio. Lisäksi siinä voidaan antaa muita nimiavaruusmäärityksiä.

Käytettävä prefiksi (tässä env) voidaan luonnollisesti valita vapaasti. SOAPin eri versioiden käyttö

saattaa aiheuttaa ongelmia. Esimerkiksi SOAP 1.2:a tukeva prosessori generoi virheen

(VersionMismatch) kun sille annetaan SOAP 1.1 kirjekuori sille ominaisine

nimiavaruusmäärityksineen.

68

encodingStyle attribute• encodingStyle attribute is used to define encoding rules

used to serialize parts of a SOAP message, i.e., to prescribe how to encode application-specific data (esp. concerning RPCs) in XML– SOAP 1.2 Part 2 section 3 defines example SOAP

encoding rules. Usage of this encoding scheme can bemarked as env:encodingStyle=”http://www.w3.org/2003/05/soap-encoding”

• using this encoding scheme is optional, also other encodingschemes can be used

– may appear in specific parts of the header or the body in SOAP 1.2 or anywhere (also in envelope element) in SOAP 1.1

RPC:n toteuttamiseksi palvelun käyttäjän (Requestor) ja palvelun tarjoajan (Provider) tulee sopia

mekanismista, jolla metodikutsu (erit. ohjelmien määrittelemät ja käyttämät tietotyypit) koodataan

XML:ksi ja toisaalta miten se dekoodataan. Attribuuttia encodingStyle voidaan käyttää tämän

sopimuksen määrittelemiseen. Toisin sanoen attribuuttia encodingStyle käytetään määrittelemään

sarjallistamissääntöjen koodaus. Esimerkki (SOAP 1.2 Part 0: Primer):

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" >

<env:Header>….</env:Header>

<env:Body>

<m:chargeReservation env:encodingStyle="http://www.w3.org/2003/05/soap-encoding“

xmlns:m="http://travelcompany.example.org/">

<m:reservation xmlns:m="http://travelcompany.example.org/reservation">

...

</env:Body>

</env:Envelope>

Tässä esimerkissä encodingStyle attribuutin arvo http://www.w3.org/2003/05/soap-encoding kertoo,

että changeReservation rakenteen sarjallistamisessa on käytetty SOAPin määrittelemiä (SOAP Part 2

section 3) koodaussääntöjä. Vaikka SOAP spesifioikin nämä säännöt, niiden käyttö on optionaalista ja

sovellukset voivat käyttää muitakin koodaussääntöjä sovellusspesifin datan koodaamiseksi SOAP-

viestiin. encodingStyle-attribuuttia voidaan käyttää SOAP 1.2 versiossa sekä otsikko- että runko-osissa,

mutta SOAP 1.1 sallii sen käytön kaikkialla myös Envelope-elementissä.

69

SOAP intermediaries• A SOAP message can travel through multiple intermediaries

before arriving to the final destination (message path)• Useful for placing additional processing components on

intermediaries without modifying the applications on the sender and ultimate destination ends

• A SOAP node can be the initial SOAP sender, an ultimate SOAP receiver, or a SOAP intermediary

InitialSender

FinalDestination

Intermediary 1:http://xmlkurssi.fi/i1

Intermediary 2:http://xmlkurssi.fi/i2

SOAP message path

SOAP-viesti voi kulkea viestin lähettäjältä vastaanottajalle useamman välittäjän kautta. Välittäjien

käyttö onkin kätevä tapa välittää sama viesti useammalle taholle. Se myös antaa välittäjille

mahdollisuuden käsitellä viestiä annettujen sääntöjen mukaisesti. Välittäjien käyttö Web-

palvelukonseptissa on hyödyllistä: välittäjät voivat tarjota lisätoiminnallisuutta ja lisäarvopalveluita.

Välittäjät yleisemminkin mahdollistavat lisäprosessoinnin SOAP-pohjaisessa viestivälityksessä

edellyttämättä viestin lähettäjän ja vastaanottajan modifiointeja.

SOAP-viestin käsittelijöitä, joita siis voivat olla viestin lähettäjä, välittäjät ja vastaanottaja, kutsutaan

SOAP-solmuksi (SOAP node).

70

Intermediary types• Message path

– SOAP does not specify how a message path is determined and followed

– message senders may or may not be aware of intermediaries in the message path

• Forwarding intermediaries– process the message according to the SOAP processing model– SOAP header blocks targeted at the SOAP intermediary MUST

be removed from the SOAP message prior to forwarding• Active intermediaries

– process the message according to the SOAP processing model– may undertake processing not described by header blocks in

the incoming message– the potential set of services provided by an active intermediary

includes, but is not limited to: logging, security, content modification and tracing

Viestipolku kulkee viestin lähettäjältä välittäjien kautta viestin vastaanottajille. SOAP spesifikaatio ei

ota kantaa siihen miten viestipolku määritellään ja miten viestit välitetään eteenpäin. Spesifikaatio

kuitenkin määrittelee miten välittäjänä toimivan SOAP-solmun tulee käyttäytyä (käsitellä viesti)

vastaanottaessaan SOAP-viestin. Viestin lähettäjä voi olla tietoinen viestipolun välittäjistä, mutta näin

välttämättä aina ole.

Välittäjiä on kahdenlaisia: passiivisia (forwarding intermediaries) ja aktiivisia (active intermediaries).

Passiiviset välittäjät prosessoivat viestin SOAPin sääntöjen mukaisesti (tärkeimmät asiat esitellään

seuraavaksi) ja poistaa viestistä – tai tarkemmin sanottuna otsikosta - jo käsittelemänsä osat ennen

viestin välittämistä eteenpäin. Aktiivinen välittäjä puolestaan sääntöjen mukaisen prosessoinnin lisäksi

saattaa tarjota lisäpalveluita, joita ei ole määritelty viestissä. Tällaisia lisäarvopalveluita voivat olla

esimerkiksi turvallisuuspalvelut, sisällön muuttaminen ja jäljitys.

71

SOAP Header• Intended for adding features and functionalities

– security, process flow, routing, and other QoS attributes

• If occurs in the envelope, it must be the firstimmediate child of the envelope

• Header entries (elements) may have the followingattributes: encodingStyle, role, mustUnderstand, and relay– role attribute: defines who must process the header entry

(intermediary destination)– mustUnderstand attribute: defines whether the header entry is

required or optional for the recipient (defined by role attribute) to beprocessed

• required: mustUnderstand=”true”– relay: indicates whether a SOAP header entry targeted at a SOAP

receiver needs to be passed forward if not processed

Otsikko tarjoaa käytännössä SOAPin laajennosmekanismin. Otsikko-osassa voidaan antaa

sovellusriippumatonta tietoa liittyen turvalliseen viestin välitykseen, viestin käsittelyn ohjaamiseen tai

vaikkapa erilaisiin laatuattribuutteihin. Mikäli otsikko-osa annetaan, tulee sen olla ensimmäinen

Envelope-elementin alielementti. Otsikon osissa eli Header-elementin alielementeissä voidaan käyttää

seuraavia attribuutteja:

encodingStyle (käsitelty edellä)

role: määrittelee SOAP-solmut, joiden tulee prosessoida viesti

mustUnderstand: määrittelee tuleeko viestin käsittelevän SOAP-solmun prosessoida kyseinen

otsikon osa. Mikäli prosessointia edellytetään, annetaan attribuutin arvoksi true. Attribuutti

mustUnderstand suo käytännössä sovelluksille, jotka käyttävät vanhempaa spesifikaatiota,

mahdollisuuden ”epäonnistua tyylikkäästi” kun saavat viestin, jota ne eivät ymmärrä.

relay: määrittelee tuleeko SOAP-viestin vastaanottajan (SOAP-solmu) välittää ko. otsikon osan

tieto eteenpäin mikäli se ei ole käsitellyt tätä otsikon osaa. Tiedon eteenpäin välittäminen

tarkoittaa, että vastaava otsikon osa generoidaan eteenpäin välitettävään viestiin. Myös relay-

attribuutti saa boolean-arvot true tai false. Mikäli relay-attribuutti puuttuu, on käyttäytyminen

sama kuin jos sen arvoksi olisi annettu false.

Huom. SOAP version 1.1 attribuutti actor on käytännössä sama kuin SOAP 1.2 version attribuutti role.

Lisäksi attribuuttia relay ei ole käytössä SOAP 1.1 versiossa.

72

SOAP roles• http://www.w3.org/2003/05/soap-envelope/role/next

– targets a header entry at whichever processor receives it– all SOAP processing nodes must support the special role

"next", which makes it possible to target a header block at the next processor in a message path.

– each SOAP node MUST act on this role• http://www.w3.org/2003/05/soap-envelope/role/none

– SOAP nodes MUST NOT act on this role• http://www.w3.org/2003/05/soap-

envelope/role/ultimateReceiver– the ultimate receiver MUST act on this role– indicates that a header block is targeted at the ultimate

SOAP receiver in a message path

SOAPin otsikon elementeissä käytettävä role-attribuutti, joka määrittelee minkä SOAP-solmujen tulee

prosessoida ko. otsinkon osa, voi saada kolmenlaisia arvoja:

next: vastaanottavan viestin käsittelijän (SOAP-solmu) viestipolulla tulee prosessoida ko.

otsikon osa

none: minkään viestin vastaanottavan SOAP-solmun ei tule käsitellä ko. otsikon osaa

ultimateReceiver: ainoastaan viestin varsinaisen vastaanottajan tulee käsitellä ko. otsikon osa.

Tämä on myös oletusarvo/oletuskäyttäytyminen mikäli attribuuttia role ei ole annettu.

Esimerkki (SOAP version 1.2 Part 0: Primer):

<?xml version='1.0' ?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">

<env:Header>

<m:reservation xmlns:m="http://travelcompany.example.org/reservation“

env:role="http://www.w3.org/2003/05/soap-envelope/role/next"

env:mustUnderstand="true">

<m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</m:reference>

<m:dateAndTime>2001-11-29T13:20:00.000-05:00</m:dateAndTime>

</m:reservation>

<n:passenger xmlns:n="http://mycompany.example.com/employees“

env:role="http://www.w3.org/2003/05/soap-envelope/role/next"

env:mustUnderstand="true">

<n:name>Åke Jógvan Øyvind</n:name>

</n:passenger>

</env:Header>

<env:Body>

...

</env:Body>

</env:Envelope>

73

SOAP body• Contains application-specific data, e.g., requests and

responses

• SOAP Fault– Used to carry error information, Fault element contains

• mandatory Code element: A local name of the code, includes fault codes

– subelements Value ja Subcode

• mandatory Reason element: A human readable explanation of the fault

• optional Node element: Intended to provide information about which SOAP node on the SOAP message path caused the fault to happen

• optional Role element: Identifies the role the node was operating in at the point the fault occurred

• optional Detail element: Intended for carrying application specific error information related to the SOAP Body

SOAP-viestin runko-osa sisältää sovellusspesifistä dataa. Siihen merkataan esimerkiksi pyyntö-vaste –

kommunikoinnin pyyntöosat ja vastaavasti vastausosat. Samoin virheilmoituksen välitetään runko-

osassa. Runko-osa on aina pakollinen SOAP-viestissä.

Virheet voidaan merkata SOAP-viestiin spesifikaation määrittelemällä tavalla käyttäen Fault-

elementtiä. Fault-elementti sisältää (tai voi sisältää) seuraavat alielementit:

Code: Tämä pakollinen elementti sisältää virhekoodin. Se sisältää puolestaan pakollisen Value-

elementin ja optionaalisen Subcode-elementin. SOAP spesifikaatio määrittelee sisällön

elementille Value. Spesifikaatio määrittelee pienen joukon virhekoodeja korkean tason SOAP-

virheille. Nämä virhekoodit esitellään seuraavaksi.

Reason: Tämä pakollinen elementti sisältää virheen kuvauksen.

Node: Tämän optionaalisen elementin avulla voidaan identifioida se SOAP-solmu, joka aiheutti

virheen. Tämä solmu yksilöidään URI:n avulla

Role: Tämä optionaalinen elementti identifioi viestiä operoivan SOAP-solmun roolin virheen

tapahtuessa.

Detail: Tätä optionaalista elementtiä voidaan käyttää kuljettamaan sovellusspesifistä virhedataa.

Tällä elementillä voi olla attribuutteja ja alielementtejä.

Esimerkki onnistuneesta pyyntö-vaste -kommunikoinnista:

SOAP pyyntö (request):

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" >

<env:Body>

<m:GetPrice

env:encodingStyle="http://www.w3.org/2003/05/soap-encoding”

xmlns:m="http://example.org/2001/06/quotes">

<symbol>DIS</symbol>

</m:GetPrice>

</env:Body>

</env:Envelope>

SOAP vastaus (response):

<env:Envelope xmlns:env=" http://www.w3.org/2003/05/soap-envelope">

<env:Body>

<m:GetPriceResponse env:encodingStyle=”http://www.w3.org/2001/09/soap-encoding”

xmlns:m="http://example.org/2001/06/quotes">

<Price>34.5</Price>

</m:GetPriceResponse>

</env:Body>

</env:Envelope>

74

Fault codes (Value subelement of Code element):

A header/body block targeted at the current SOAP node is scoped with a data encoding that the current node does not support

DataEncodingUnknown

The message could not be processed, e.g., a problem with the server

Server

The message was incorrectly formed or containedincorrect information

Client

An element with mustUnderstand=”1” was notunderstood

MustUnderstand

An invalid namespace found for the SOAP envelope element

VersionMismatch

DescriptionFault codes

Esimerkki (W3C, SOAP 1.1, Part 1): virhekoodi (Code-elementti) kertoo, että kyse on versio-

ongelmasta. Otsikon Upgrade-lohko indikoi, että SOAP-solmu tukee sekä SOAP versiota 1.2 että

versiota 1.1 mutta preferoi versiota 1.2.

<?xml version="1.0" ?>

<env:Envelope xmlns:env=”http://www.w3.org/2003/05/soap-envelope”

xmlns:xml="http://www.w3.org/XML/1998/namespace">

<env:Header>

<env:Upgrade>

<env:SupportedEnvelope qname="ns1:Envelope“

xmlns:ns1="http://www.w3.org/2003/05/soap-envelope"/>

<env:SupportedEnvelope qname="ns2:Envelope"

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

</env:Upgrade>

</env:Header>

<env:Body>

<env:Fault>

<env:Code>

<env:Value>env:VersionMismatch</env:Value>

</env:Code>

<env:Reason>

<env:Text xml:lang="en">Version Mismatch</env:Text>

</env:Reason>

</env:Fault>

</env:Body>

</env:Envelope>

75

SOAP HTTP binding• Message exchange patterns (MEPs): patterns that describe

distributed communication– e.g. Request-Respond and Respond

• HTTP request-respond MEP: the client identifies the server via a URI, connects to it using the underlying TCP/IP network, issues a HTTP request message (e.g., usingPOST) and receives a HTTP response message over the same TCP connection

• HTTP bindings with SOAP– allows the exchange of SOAP messages either as payload of a

HTTP POST request and response, or as a SOAP message in the response to a HTTP GET.

• HTTP binding with the SOAP Respond MEP (i.e., non-SOAP message acting as a request followed by a SOAP message acting as a response ) is restricted to the HTTP GET method

• HTTP binding with the SOAP Request-Response MEP is restricted to the HTTP POST method

HTTP kommunikoi käyttäen TCP/IP-protokollaa. Asiakas identifioi palvelimen URI:n avaulla, ottaa

siihen yhteyden sekä lähettää HTTP kutsun (esimerkki: W3Schools,

http://www.w3schools.com/soap/soap_httpbinding.asp):

POST /item HTTP/1.1

Host: 189.123.345.239

Content-Type: text/plain

Content-Length: 200

Palvelin prosessoi kutsun ja lähettää vastauksen saman TCP-yhteyden aikana:

200 OK

Content-Type: text/plain

Content-Length: 200

SOAP voidaan sitoa useampaan protokollaan, mutta yleisin käytännössä on HTTP. SOAP spesifikaatio

määrittelee HTTP-sidonnan. Siinä SOAP pyyntö-vaste kommunikointi perustuu HTTP POST metodin

käyttöön, kun taas yksinkertainen SOAP vaste (pyyntö tapahtuu muuten kuin SOAPia käyttäen) on

sidottu HTTP GET metodin käyttöön.

76

Which MEP to use

• SOAP 1.2 Part 2 provides quidance when to userequest-respond and when respond MEPs

• SOAP respond, use when– an application is assured that the message

exchange is for the purposes of information retrieval (safe!)

– information resource is "untouched" as a result of the interaction

• SOAP request-respond, use when– information resource is manipulated– using HTTP POST

SOAP 1.2 spesifikaation osa 2 (Part 0) antaa ohjeistusta sille, milloin eri viestinvälitysmalleja (MEPs)

kannattaa käyttää. Ne ovat luonnollisesti vain suosituksia, vaikkakin suositus on annettu melko

vahvaan sävyyn.

SOAP Respond viestinvälitysmallia tulisi käyttää silloin, kun kommunikoinnin kohdetta ei ole

tarkoitus muuttaa interaktion toimesta. Se on tiedon hakemista varten. HTTP spesifikaatio kuvaa

tällaisia yhteyksiä turvallisiksi.

SOAP Request-Respond viestinvälitysmallia tulee käyttää silloin, kun on tarvetta informaatiolähteen

manipuloimiseen. Kannattaa huomata, että HTTP POST sidonta käy siis kaikissa tapauksissa.

77

Using HTTP GET and HTTP POST for SOAP MEPs

• Using HTTP GET– HTTP Accept header is used to indicate the

preferred representation of the resource being requested, e.g. “application/soap+xml”

• Using HTTP POST– HTTP Content-type header must be

"application/soap+xml“• charset parameter can take either value “utf-8” or “utf-16”

– the combination of HTTP POST and Host headers represents URI of the resource

Esimerkki 1. HTTP GET (SOAP 1.2, Part 0: Primer)

Pyyntö ei ole SOAP-muotoinen. Sen header-osa voi näyttää esimerkiksi alla esitetyn kaltaiselta.

Accept-kentän ”application/soap+xml” indikoi kutsuttavan resurssin suositeltavan esitystavan.

Esimerkiksi selaimen ollessa kyseessä se voisi olla ”text/html”.

GET /travelcompany.example.org/reservations?code=FT35ZBQ

HTTP/1.1 Host: travelcompany.example.org

Accept: text/html;q=0.5, application/soap+xml

...

b) Edellä esitetyn pyynnön vastaus SOAP-viestinä voi näyttää seuraavalta:

HTTP/1.1 200 OK

Content-Type: application/soap+xml; charset="utf-8"

Content-Length: nnnn

<?xml version='1.0' ?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">

<env:Header>

<m:reservation xmlns:m="http://travelcompany.example.org/reservation"

...

Esimerkki 2. HTTP POST

pyyntö: Tässä HTTP Content-Type kentän arvon tulee aina olla ”application/soap+xml”. Sen

optionaalinen charset-parametri voi saada joko arvon ”utf-8” tai ”utf-16”. Itse kutsuttavan resurssin

URI muodostuu POST ja Host kenttien arvoista. Näin ollen alla olevassa esimerkissä URI on

travelcompany.example.org/Reservations

POST /Reservations HTTP/1.1

Host: travelcompany.example.org

Content-Type: application/soap+xml; charset="utf-8"

Content-Length: nnnn

<?xml version='1.0' ?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" >

<env:Header>

...

b) vastaus

HTTP/1.1 200 OK

Content-Type: application/soap+xml; charset="utf-8“

Content-Length: nnnn

<?xml version='1.0' ?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" >

<env:Header>

78

HTTP respond codes• 2xx (successful)• 3xx (redirection)• 4xx (client error)• 5xx (server error)• Example status codes of errors

– 401: the request requires HTTP authentication– 404: the requested resource is not available– 405: the peer HTTP server does not support the requested HTTP

method at the given request URI – 500: an error inside the HTTP server which prevented it form

fulfilling the request– 503: the HTTP server is temporarily overoaded, and unable to

handle the request

HTTP vastauskoodeista voidaan päätellä onnistuiko asiakkaan lähettämän viestin vastaanottaminen,

ymmärtäminen ja onko se hyväksytty (2xx -alkuiset arvot) ja toisaalta mikä oli mahdollisen virheen

syy. Esimerkiksi palvelinpään prosessointiongelmasta johtuva virhe voitaisiin ilmoittaa seuraavalla

tavalla:

HTTP/1.1 500 Internal Server Error

Content-Type: application/soap+xml; charset="utf-8"

Content-Length: nnnn

<?xml version='1.0' ?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body>

<env:Fault>

<env:Code>

....

79

SOAP architecture

SOAP package, request

SOAP package, response

Proxy SOAP Listener

HTTP server

XML parserXML parser

Clientapplication

nativecall

Applicationobject

so called ”SOAP engine”

SOAP Listener ottaa vastaan SOAP-paketteina saapuvia viestejä ja välittää ne edelleen itse palvelulle

käännettyään ne ko. palvelun natiivikielelle (esim. Java). Asiakassovelluksen (client application)

tarvitsee ainoastaan tietää palvelun osoite sekä palvelun ymmärtämän/ymmärtämien viestin/viestien

muoto/muodot. Kun palvelu on prosessoinut viestin ja muodostanut mahdollisen vastauksen, se tulee

niin ikään muuttaa SOAP viestiksi ja välittää asiakkaalle.

Web-palveluissa palvelun käyttäjä (Requestor) kutsuu (bind operaatio) valittua palvelua (Provider)

lähettämällä SOAP-viestin. Yksinkertainen proxy jäsentää palvelun kuvauksen, joka annetaan WSDL-

muodossa; WSDL kuvaus kertoo miten kyseistä palvelua kutsutaan. WSDL-kuvauksia onkin verrattu

IDL-kuvauksiin: WSDL on Web-palveluille sitä mitä IDL:t ovat CORBAlle. Koska WSDL on

ohjelmallisesti luettavaa ja se sisältää tarvittavat tiedot, voidaan siitä itse asiassa generoida asiakaspään

(client) stub koodia, joka toimii proxynä. WSDL-kuvausta voidaan hyödyntää myös palvelinpäässä:

siitä voidaan myös generoida koodia, jonka palvelinsovelluksen toteuttaja voi sopivasti laajentaa.

WSDL-kieleen perehdymme seuraavaksi.

80

Some challenges• Security

– some solutions usable with SOAP exist• agreements on using them are needed between parties

– transport level security: SOAP over HTTP/S– SOAP message level security

• WS-Security

• QoS policies– reliability

• Distributed transactions– no support for combining invocations to a distributed transactions

• Complex message exchanges• ...many of the above mentioned inadequacies are the ”cost of

simplicity”. However, most of them are under development at W3C and OASIS.

Kun kyse on kommunikoinnista Internetiä hyödyntäen, nousee joissain tapauksissa (erityisesti

liiketoiminnan kannalta kriittisissä sovelluksissa) tietoturva oleelliseksi. Tähän liittyviä asioita ovat

autentikointi, tiedon salaus, digitaaliset allekirjoitukset jne. SOAP itsessään ei tarjoa tukea näiden

toteuttamiseksi. On kuitenkin esitetty ehdotuksia esimerkiksi siitä, miten digitaaliset allekirjoitukset

voitaisiin liittää SOAP-viesteihin. SOAPin laajennettavuus (header) mahdollistaa tämän. Web-

palveluissa tämä voidaan hoitaa eri kerroksessa (kts. Layers of Web Services) eri tavoin. SOAP-

viesteissä voidaan digitaalisten allekirjoitusten lisäksi antaa esimerkiksi WS-Security specifikaation

(http://www-106.ibm.com/developerworks/webservices/library/ws-secure/) mukaisia lisäyksiä

autentikoinnin, koskemattomuuden ja luottamuksellisuuden varmistamiseksi. Lisäksi SOAPin pohjalta

on kehitetty ebXML Message Service, jota käytetään ebXML-konseptissa. Tämän ja turvalliseen

viestinvälitykseen palataan myöhemmin.

Web-palveluiden kannalta eri laatuattribuutit (vasteajat, hinta ja muut liiketoiminnan kannalta oleelliset

vaatimukset), kuten luotettavuus, ovat myös tärkeitä. SOAP ei itsessään tue myöskään näiden

merkkausta. Yksi oleellinen asia Web-palveluiden kannalta on myös transaktioiden hallinta: sekvenssi

yksittäisten palvelujen suorittamista operaatiosta halutaan koostaa yhdeksi liiketoimintatransaktioksi.

Transaktioiden hallinta on niin ikään avoin kysymys SOAPin kannalta. Tämä kysymys onkin jätetty

seuraavan kerroksen eli palveluiden koordinoinnista huolehtivan kerroksen ratkaistavaksi. Toisaalta

tukea transaktioille voidaan tarjota myös SOAP-laajennosten kautta (WS-Transactions). Sen lisäksi

SOAPin laajennettavuus mahdollistaa myös tuen mm. turvalliselle viestinvälitykselle (WS-Security),

reititykselle (WS-Routing) ja monimutkaisemmalle viestinvälitykselle (WS-Coordination).