restful tīmekļa risinājumi

38
RESTful tīmekļa risinājumi Krišs Rauhvargers, 21.01.2011.

Upload: kriss-rauhvargers

Post on 15-May-2015

5.747 views

Category:

Technology


0 download

DESCRIPTION

Viena no atvērto tīmekļa risinājumu pamatidejām, kas balstīta resursu korektā identificēšanā un HTTP protokola iespēju pilnvērtīgā izmantošanā.

TRANSCRIPT

Page 1: RESTful tīmekļa risinājumi

RESTful tīmekļa risinājumi

Krišs Rauhvargers,

21.01.2011.

Page 2: RESTful tīmekļa risinājumi

REST

• REST (angl: representational state transfer) – tīmekļa programmatūras arhitektūras pieeja,– identificē resursus un to reprezentācijas– nodrošina datoram saprotamas pārejas starp

reprezentācijām.

• Galvenais pielietojums - dalītu sistēmu izstrāde.

2 / 36

Page 3: RESTful tīmekļa risinājumi

Vai REST ir "modes lieta"?

• Termins šķietami iekļaujas SEO, SOA, AJAX, JSON (...) modes vārdu sarakstā

• Patiesībā REST tikai pilnvērtīgi izmanto tīmekļa pamatelementus: – URI protokolu– HTTP protokolu

• Terminu definē R.Fīldings (Roy Fielding) savā doktora disertācijā 2000. gadā

3 / 36

Page 4: RESTful tīmekļa risinājumi

4 / 37

TĪMEKĻA DARBĪBAS PAMATPRINCIPI

Page 5: RESTful tīmekļa risinājumi

Resursi tīmeklī

• Hipertelpa sastāv no resursiem, kurus savstarpēji saista hipersaites.

• Hipersaite viennozīmīgi definē citu saistītu resursu un norāda, kā tam piekļūt.

• Visbiežākais pielietojums: HTML dokuments, kurā ir saites uz citiem dokumentiem.

5 / 36

Page 6: RESTful tīmekļa risinājumi

Hipertelpa

www.delfi.lv

www.leta.lvZiņa1

Ziņa2Avots 1

www.foto.lv

Attēls 1

Serveris

Resurss

Hipersaite

Page 7: RESTful tīmekļa risinājumi

Saistīti resursi tīmekļa lapās

Resurss, URL:http://naivist.net/date/ 2010/09/06/

Resurss, URL:http://naivist.net/image/

2010_09_06.jpg

Resurss, URL:http://naivist.net/layout_images/skynet.gif

Lapas attēlošanai nepieciešamie resursi netiek ielādēti uzreiz!Saites uz diviem attēliem atrodas HTML dokumentā.

7 / 36

Page 8: RESTful tīmekļa risinājumi

Resursu identificēšana

• Katram resursam ir savs URI• URI: "ka tik būtu unikāls"

– urn:issn:1535-3614

• URL ir specifisks URI:– http://example.com/examples/best.htm– identificē resursu– norāda piekļuves veidu– hierarhiska struktūra, pamatā: UNIX failu

sistēmas struktūra8 / 36

Page 9: RESTful tīmekļa risinājumi

Piekļūšana resursam ar HTTP

• HTTP protokols ļauj piekļūt resursiem• Definē standarta darbības:

• paņemt (GET)• nosūtīt (POST)• izveidot (PUT)• dzēst (DELETE)

• Veidojas vienkārši "teikumi", izmantojot šo vārdnīcu:– lietvārds(resurss) + darbības vārds (GET/POST/...)

• GET /books/

• Vēlamo resursa reprezentāciju var mainīt, pievienojot parametrus– [resurss] + [darbība] + [reprezentācija]

• GET /books/?sort=title9 / 36

Page 10: RESTful tīmekļa risinājumi

Resursi dinamiski veidotā tīmeklī

• Publicējot statiskas HTML lapas, URL struktūra veidojas atbilstoši failu sistēmas struktūrai

• http://example.com/folder • http://example.com/folder/file1.htm• http://example.com/folder/file2.htm

• Ja saturu veido dinamiski, "reprezentācijas" var patiesībā būt dažādi resursitas pats resurss var iegūt dažādas reprezentācijas:

• http://example.com/my.cgi?module=users&id=1• http://example.com/my.cgi?module=lessons&id=505

– abos gadījumos resurss ir "my.cgi", reprezentāciju nosaka padoto parametru vērtības

• Izstrādājot tīmekļa bāzētas datorsistēmas, saturs visbiežāk tiek radīts dinamiski! 10 / 36

Page 11: RESTful tīmekļa risinājumi

11 / 37

REST PIEEJAS PAMATI

Page 12: RESTful tīmekļa risinājumi

Resursu apzināšana

• REST pamatā ir pasaule, kas sastāv no pareizi identificētiem resursiem.– grāmatu katalogs ir resurss– grāmata ir resurss– grāmatas autors ir resurss– grāmatas cena ir resurss

• Resursi ir savā starpā saistīti– hierarhija– kolekcijas

• Resursam ir unikālas URL adreses, tās ir nemainīgas. 12 / 36

Page 13: RESTful tīmekļa risinājumi

Resursu hierarhijas

Grāmatu katalogs

(bookcatalog)

Grāmata(Winnie The Pooh, ID=1)

Autori

Cena(price)

Autors(Alan Milne)

/bookcatalog/WinnieThePooh/Price/bookcatalog/1/Price

13 / 36

Page 14: RESTful tīmekļa risinājumi

REST "teikumu" struktūra

• Projektējot REST sistēmas:– drīkst definēt pēc patikas daudz resursu

(lietvārdu),– jāiztiek ar standarta darbības vārdu kopu

• Darbības vārdi ir HTTP metodes:– GET: lasīt (rezultāts vienmēr vienāds)– DELETE: dzēst (neatgriezenisks)– PUT: mainīt (neatgriezenisks)– POST: izveidot (ne-drošs)

14 / 36

Page 15: RESTful tīmekļa risinājumi

Komandu pielietošana REST

• Piemēri– "Nolasīt grāmatas Vinnijs Pūks cenu"

• Grāmatas cena ir resurss, tai ir sava URL adrese• Izpildām HTTP komandu GET uz šo adresi

– "Pievienot katalogam grāmatu par Karlsonu"• Grāmatu katalogs ir resurss, tam ir sava URL

adrese• Izpildām HTTP komandu PUT (vai POST) uz šo

adresi

15 / 37

Page 16: RESTful tīmekļa risinājumi

Resursi paši definē savas saites

• "Cilvēks nav vientuļa sala"• Nolasot informāciju par resursu, tas sniedz arī ziņas par

saistītajiem resursiem

GET /bookcatalog/{Title: "Bērnu grāmatas", Books: [

{Title: "Vinnijs Pūks", URL: { kind: "detail", value: "/bookcatalog/WinnieThePooh/"} },{Title: "Karlsons, kas dzīvo uz jumta", URL :{kind:"detail", value: "/bookcatalog/Carlsson/"}

]}16 / 36

Page 17: RESTful tīmekļa risinājumi

Resursi paši definē savas saites (2)

• GET /bookcatalog/WinnieThePooh/{Title: "Vinnijs Pūks", Description: "Jauka grāmata bērniem par...",

Price: "Ls 2.50" URL : {kind: "pricing", value: "/bookcatalog/WinnieThePooh/ price/"}}

• Klientprogramma, kas zina "pricing" un "details" saišu semantiku, var automātiski atklāt resursu struktūru

17 / 36

Page 18: RESTful tīmekļa risinājumi

Kas traucē domāt resursorientēti?

• Objektorientācija– OO pieeja ļauj definēt jaunus darbības vārdus. – Darbības vārdi aizstāj dažu resursu lietošanu.

• Slinkums apgūt tehnoloģijas– konstrukcija http://example.com/my.cgi?module=users&id=1 ļauj visus pieprasījumus apstrādāt vienā skriptā

– adresu "pārrakstīšana" ļautu to pārvērst par• http://example.com/users/1/

18 / 36

Page 19: RESTful tīmekļa risinājumi

19 / 37

REST DOMĀŠANAS "BRIEDUMA PAKĀPES"

Page 20: RESTful tīmekļa risinājumi

REST brieduma pakāpes

Pilnīgs REST

0. līmenis: XML ir universāla valoda

1. Resursi

2. HTTP darbības vārdu izmantošana

3. Hipersaišu izmantošana

Attēls:martinfowler.com/articles/richardsonMaturityModel.html 20 / 36

Page 21: RESTful tīmekļa risinājumi

0. pakāpe

• Sistēmu sadarbība tiek veikta, izmantojot vienotu piekļuves punktu

• Piekļuves punkts pieņem dažādas komandas un sniedz dažādas atbildes.

• Lietots XML-RPC un SOAP-WS

Klients Serveris

ShoppingServicePOST: getProductList("Books") >

< grāmatu saraksts

POST: PurchaseItem("Karlsons") > < pirkuma info

21 / 36

Page 22: RESTful tīmekļa risinājumi

0. pakāpes saruna (klients, 1. pieprasījums)POST /shoppingSevice HTTP/1.1<getProductList category="Books" />

(serveris, 1. atbilde)HTTP/1.1 200 OK<bookList>

<book title="Karlsons" /><book title="Vinnijs Pūks" />

</bookList>

(klients, 2. pieprasījums)POST /shoppingService HTTP/1.1<purchaseBook title="Karlsons" />

(serveris, 2.atbilde)HTTP/1.1 200 OK<cartContents>

<item category="Books" title="Karlsons" /></cartContents>

(serveris, 2.atbilde, variācija)HTTP/1.1 200 OK<shoppingError>

<failure>Item currently not available.</failure></shoppingError>

22 / 36

Page 23: RESTful tīmekļa risinājumi

1. pakāpe: resursi

• Katram resursam ir savs piekļuves punkts• Joprojām ir definēti daudzi darbības vārdi,

kam piekļūst ar vienu HTTP metodi• SEO mērķiem pietiek ar šī līmeņa uztveri

Klients Serveris

categories/BooksPOST: getList >

< grāmatu saraksts

POST: Purchase(1) > < pirkuma info

categories/Books/Karlsons

23 / 36

Page 24: RESTful tīmekļa risinājumi

1. pakāpes saruna (klients, 1. pieprasījums)POST /categories/Books/ HTTP/1.1<getList />

(serveris, 1. atbilde)HTTP/1.1 200 OK<bookList>

<book title="Karlsons" /><book title="Vinnijs Pūks" />

</bookList>

(klients, 2. pieprasījums)POST /categories/Books/Karlsons/ HTTP/1.1<purchaseBook amount="1" />

(serveris, 2.atbilde)HTTP/1.1 200 OK<cartContents>

<item category="Books" title="Karlsons" /></cartContents>

24 / 36

Page 25: RESTful tīmekļa risinājumi

2. pakāpe: HTTP darbības

• Katram resursam ir sava adrese• Tiek lietotas GET, POST komandas,

ievērojot to semantiku• Tiek lietoti HTTP kļūdu kodi

Klients Serveris

categories/BooksGet: ?status=instock

< grāmatu saraksts

POST: Purchase(1) > < pirkuma info

categories/Books/Karlsons

25 / 36

Page 26: RESTful tīmekļa risinājumi

2. pakāpes saruna (klients, 1. pieprasījums)GET /categories/Books/?status=instock HTTP/1.1<getProductList category="Books" />

(serveris, 1. atbilde)HTTP/1.1 200 OK<bookList>

<book title="Karlsons" resourceName="Karlsons" /><book title="Vinnijs Pūks" resourceName="WinnieThePooh"/>

</bookList>

(klients, 2. pieprasījums)POST /categories/Books/Karlsons/ HTTP/1.1<reservationRequest amount="1" />

(serveris, 2.atbilde)HTTP/1.1 200 OK<cartContents>

<item category="Books" title="Karlsons" /></cartContents>

(serveris, 2.atbilde, variācija)HTTP/1.1 409 Sold out<shoppingError>

<failure>Item currently not available.</failure></shoppingError>

26 / 36

Page 27: RESTful tīmekļa risinājumi

3. pakāpe: hipersaites

• Resursa reprezentācija satur saites uz citām būtiskām reprezentācijām.

• HATEOAS: Hypertext As The Engine Of Application State

• Pietiek ar vienu sākuma punktu, lai pārējos resursus varētu atklāt

• API ir viegli maināms, nesalaužot esošos klientus

27 / 36

Page 28: RESTful tīmekļa risinājumi

3. pakāpes saruna

(klients, 1. pieprasījums)GET /categories/Books/?status=instock HTTP/1.1

(serveris, 1. atbilde)HTTP/1.1 200 OK<bookList>

<book title="Karlsons"><link rel="describedby"

uri="/categories/Books/Karlsons" /><link rel="contents" uri="/categories/Books/Karlsons/editform/" />

</bookList>

(klients, 2. pieprasījums)GET /categories/Books/Karlsons/ HTTP/1.1

...28 / 36

Page 29: RESTful tīmekļa risinājumi

3. pakāpe: saišu formāti

• Mēdz lietot HTML valodā definēto LINK elementu:

• rel: saites veids no RFC (http://www.iana.org/assignments/link-relations/link-relations.xhtml) vai pašu definēts

• uri: saistītā ieraksta identifikators

• XLINK, XML dokumentu saitēšanas valoda (http://www.w3.org/TR/xlink11/)

• href: hipersaite uz saistīto dokumentu, • role: definē saistītā resursa lomu

29 / 36

Page 30: RESTful tīmekļa risinājumi

30 / 37

PRAKTISKI REST PIELIETOJUMI

Page 31: RESTful tīmekļa risinājumi

Valodas: Java

• JAX-RS specifikācija Java valodas papildināšanai, RESTful API automātiskai veidošanai– kodu papildina ar anotācijām, kur norāda,

• kādam resursam OO klase atbilst,• kurai HTTP metodei atbilst OO klases attiecīgā metode,• u.c.

– servera puses kods tiek ģenerēts

• Ir vairākas realizācijas, t.sk. Apache CXF, Jboss.

31 / 36

Page 32: RESTful tīmekļa risinājumi

Java platforma: piemērs

@Path("/helloworld")public class HelloWorldResource { @GET @Produces("text/plain") public String getMyMessage() {

return "Hello World"; }}• Atverot http://example.com/helloworld,

saņemsim metodē minēto tekstu.• Resursu identificēšana paliek izstrādātāja ziņā.

http://wikis.sun.com/display/Jersey/Overview+of+JAX-RS+1.0+Features 32 / 36

Page 33: RESTful tīmekļa risinājumi

Produkti: SharePoint 2010

• Microsoft SharePoint: "servera puses Access"– ļauj lietotājam definēt datu struktūras, – automātiski veido datu apstrādes formas.

• Līdz 2007. versijai piedāvā SOAP tīmekļa pakalpes

• 2010. versijā: RESTful serviss• Resursu (un saišu) aprakstīšanai - ATOM

standarts.33 / 36

Page 34: RESTful tīmekļa risinājumi

Produkti: SharePoint 2010

• Hierarhija:– SharePoint vietne (http://server/)

• Dokumentu bibliotēka (/SharedDocs)– Dokuments (/1)

» Dokumenta lauks ("Title")

• Katram hierarhijas līmenim var piekļūt caur vienotu servisu

POST http://server/_vti_bin/listsdata.svc/SharedDocs(1)/Title/

<Value="Newtitle" />

34 / 36

Page 35: RESTful tīmekļa risinājumi

35 / 37

NOSLĒGUMAM

Page 36: RESTful tīmekļa risinājumi

36 / 37

REST: par un pret

Par

• Virzība uz mašīnlasāmu tīmekli;

• Lieto visiem pieejamas tehnoloģijas;

• Viegli dokumentēt klientprogrammu izstrādātājiem;

• Piemērots pārmaiņām nākotnē.

Pret• Metadatu pievienošana rada

papildus datu plūsmu;• Papildus izstrāde resursu

unikālo URL nodrošināšanai;• Izstrādātājam patiešām

jāizprot sistēmas pamatjēdzieni;

• "Oficiāli" REST prasa lietot PUT un DELETE metodes, tās nav vienmēr pieejamas.

Page 37: RESTful tīmekļa risinājumi

Informācijas avoti iedvesmai

• Representational State Transfer (REST)– Fielding, R.– http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

• How I Explained REST to My Wife– Tomayko, R.; – http://tomayko.com/writings/rest-to-my-wife

• Richardson Maturity Model: steps toward the glory of REST– Fowler, M. ; – http://martinfowler.com/articles/richardsonMaturity Model.html

• The Maturity Heuristic– Richardson, L. – http://www.crummy.com/writing/speaking/2008-QCon/act3.html

37 / 36

Page 38: RESTful tīmekļa risinājumi

38 / 37

PALDIES PAR UZMANĪBU!

Krišs Rauhvargers,[email protected]