REST an idealistic model or a realistic solution? 17.10.2006 Jari Aarniala jari.aarniala@cs.helsinki.fi
Johdanto Representational State Transfer, eli REST Arkkitehtuurinen tyyli hajautetuille (hypermedia)järjestelmille Tunnetuin esimerkki REST-periaatteita seuraavasta järjestelmästä: World Wide Web, ~1990 Termi REST Roy Fieldingin väitöskirjasta, v. 2000 Buzzword - herättänyt suurta mielenkiintoa viime aikoina 2
REST:in periaatteet Ei sidottu tiettyyn protokollaan, eikä webiin; kommunikaation tietomuoto on myös vapaa Tosin tunnetuimmat REST-pohjaiset järjestelmät käyttävät HTTP:tä ja XML:ää Käsitteitä: resurssit, operaatiot ja sisältötyypit Asettaa vaatimuksia käytettävälle protokollalle 3
Resurssiperustaisuus RESTiin pohjautuvat järjestelmät mallinnetaan resursseina Yksillölliset tunnisteet (esim. URL) Resursseja voi olla järjestelmässä rajaton määrä Järjestelmälle on määritetty rajattu joukko operaatioita (esim. GET, POST) Operaatiot eivät siis ole resurssikohtaisia Järjestelmän tietotyypit on myös rajattu (esim. HTML, XML) Rajattujen operaatioiden ja tietotyyppien johdosta kaikki resurssit voivat periaatteessa jakaa saman rajapinnan ulkomaailmaan 4
Resurssit, operaatiot ja sisältötyypit 5
Esimerkkejä operaatioiden vastaavuuksista HTTP: GET, PUT, POST, DELETE CRUD: READ, UPDATE, CREATE, DELETE SQL: SELECT, UPDATE, INSERT, DELETE... 6
RESTin protokollavaatimukset Client-server -malli Tilattomuus (stateless) Kaikki tarvittava tieto kulkee pyyntöjen mukana Sessionhallinta keksien avulla rikkoo siis RESTin periaatteita Mahdollisuus välimuistin käyttöön (cacheable) Webin välimuistipalvelimet Kaikkea ei voi tallentaa välimuistiin palvelu kontrolloi Rakentuu kerroksista (layered) Palvelimen ja asiakkaan välille voidaan lisätä palomuureja, välityspalvelimia yms 7
Esimerkki REST-pohjaisen palvelun rajapinnasta HTTP-pohjainen esimerkki Tyypillinen CRUD-palvelu: tuotetietokanta RPC vs. REST RPC: GET tiedon hakuun, POST muokkaamiseen URL:n mukana kulkee tieto siitä, mikä operaatio halutaan suorittaa REST: hyödynnetään muitakin HTTP:n metodeja, jotka kuvaavat operaatioita paremmin 8
Esimerkki, RPC-tyyliä mukaillen # create a product POST /product/create # show details for product #1 GET /product/read/1 # update details for product #1 POST /product/update/1 # remove the product #1 POST /product/delete/1 9
Esimerkki, REST-tyyliä mukaillen # create a product POST /product # show details for product #1 GET /product/1 # update details for product #1 PUT /product/1 # remove the product #1 DELETE /product/1 10
RESTin hyödyt World Wide Webin suosio osoittaa, että RESTin yksinkertainen tyyli toimii ja skaalautuu hyvin Tästä ei tietenkään voida tehdä universaaleja johtopäätöksiä sen toimivuudesta Kannattajia RESTillä ainakin löytyy: "Compared with other styles of web services, REST is easy to implement and has many highly desirable architectural properties: scalability, performance, security, reliability, and extensibility" from Implementing REST Web Services: Best Practices and Guidelines 11
RESTin hyödyt Yleisimmin viitataan RESTin yksinkertaisuuteen Palveluiden rajapinnat ovat selkeitä, helppokäyttöisiä yms Monet RESTin väitetyt hyödyt liittyvät suorituskykyyn... Protokollan tilattomuus parantaa skaalautuvuutta Asiakas ei sidottu tiettyyn palvelininstanssiin -> klusterointi Välimuistin käyttö Pyyntöjen tietomuoto vapaasti määritettävissä -> pysyvät kompakteina?...toiset väitetyt hyödyt taas vaikuttavat kaukaa haetuilta Esim. universal client application Vrt. Web-selain 12
Toisaalta... RESTiin liittyy jonkinlainen 'tee-se-itse' -henki Standardien puute toisaalta yksinkertaistaa asioita, mutta toisaalta joudutaan tekemään paljon ad-hoc -ratkaisuja Määrittelyvapauden johdosta varsinaisia REST-työkaluja ei juuri ole 13
REST käytännössä REST-käsitteen käyttöön liittyy paljon väärinymmärryksiä: Esim. HTTP ja XML -pohjainen palvelu ei ole automaattisesti RESTin periaatteiden mukainen RESTin periaatteita seuraava järjestelmä voi yhtä hyvin käyttää vaikkapa binääriprotokollaa REST on tällä hetkellä muotia: Flickr, Del.icio.us Mainostavat web service -rajapintojensa olevan RESTpohjaisia, mutta käytännössä näin ei ole, esim: Flickr ei käytä HTTP-virhekoodeja kunnolla Del.icio.us käyttää GET-metodia myös pyynnöissä, jotka poistavat tietoa 14
Case study: Amazon S3 Amazon Simple Storage Service, eli Amazon S3 on esimerkki web servicestä, joka tarjoaa oikean RESTrajapinnan Palvelun idea: nopea ja luotettava online-tietovarasto esim. varmuuskopiointiin Maksullinen; hinnoittelu siirto- ja tallennusmäärien mukaan Tarjolla myös SOAP-pohjainen rajapinta, mutta RESTpohjainen on suositumpi 15
Amazon S3 Käsittehierarkia: Service -> Bucket > Object Palvelun käyttäjällä on Service-resurssin alla Bucketresursseja (vrt. hakemisto) URL: http://[bucketname].s3.amazonaws.com/ Kukin Bucket voi sisältää rajattomasti Object-resursseja (vrt. tiedosto), joiden koko voi olla 1 tavusta 5 gigatavuun URL: http://[bucketname].s3.amazonaws.com/[objectname] 16
Amazon S3 Rajapinta käyttää standardeja HTTP-operaatioita GET, PUT, DELETE ja HEAD Samat operaatiot toimivat eri tavalla eri resursseissa: GET + Service: palauttaa listan käyttäjän bucketeista GET + Bucket: palauttaa listan bucketin olioista GET + Object: palauttaa olion sisällön HEAD + Object: palauttaa olion metatiedot, muttei sisältöä PUT + Bucket: luo uuden bucketin PUT + Object: luo uuden olion DELETE + Bucket: poistaa bucketin, jos se on tyhjä DELETE + Object: poistaa olion 17
REST ja enterprise-ohjelmistojen maailma Kuten edellä on nähty, RESTin periaatteet sopivat hyvin yhteen esim. perinteisten CRUD-tietokantasovellusten kanssa ns. sweet spot? Taipuuko REST monimutkaisempiin sovelluksiin? Esimerkkejä on ainakin vaikea löytää... S3:kin rajapinta on pohjimmiltaan erittäin yksinkertainen RESTin vajaavaisuudet Esim. Asynkroniset pyynnöt, pyyntöjen reititys... RESTille on esitelty laajennoksia: esim. ARRESTED Loppujen lopuksi, RESTin vetovoima on sen yksinkertaisuudessa 18
Yhteenveto Right tool for the right job! REST-pohjainen web-palvelu voi tavoittaa helposti suuren käyttäjäjoukon...... mutta toisaalta REST tuskin sopii laajojen enterprisesovellusten mallintamiseen 19