REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf ·...

63
1 REST in der Praxis Entwerfen von RESTful Applikationen

Transcript of REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf ·...

Page 1: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

1

REST in der PraxisEntwerfen von RESTful Applikationen

Page 2: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

2

AgendaAgenda

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 3: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

3

Über mich …Über mich …

• Gregor Roth, Dipl.-Ing. Nachrichtentechnik (FH), Di pl.-Wirtsch.-Ing. (FH)

• Software-Architekt bei der 1&1, dort im Bereich der Portal-Mailsysteme

• Langjährige Erfahrung im Bau großer, verteilter (Ja va) basierter

Anwendungssysteme in den Bereichen Finanzdienstleis tungen und

WebPortale/InternetProvider

• Maintainer der OpenSource Java Netzwerkbibliotheken

• xSocket (NIO-basierte socket client/server lib) und

• xLightweb (HTTP client/server lib)

Page 4: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

4

RESTREST

• REST (Representational State Transfer) ist kein neue s Netzwerkprotokoll

oder ähnliches, sondern ein Architekturstil

• Definiert in der Dissertation von Roy Fielding, einer der Hauptautoren der HTTP und URI

Spezifikation (RFC 2616, RFC 2369)

• REST erfindet nichts neues. Es beschreibt lediglich wie HTTP „richtig“ anzuwenden ist

• REST auf Basis HTTP wird oft als RESTful HTTP bezei chnet

• REST legt eine Reihe von Prinzipien fest:

• Resources and Resource Identifier

• Respresentation

• Hypermedia

• Unified Interface

• Statelessness

Page 5: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

5

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 6: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

6

server

/Folder/8/Folder/9

/Mailbox/e53fa2

client

GET /Mailbox/e53fa2/Folder/8 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1

Anatomie einer HTTP InteraktionAnatomie einer HTTP Interaktion

Method ResourceREQUEST

Page 7: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

7

server

/Folder/8/Folder/9

/Mailbox/e53fa2

client

GET /Mailbox/e53fa2/Folder/8 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1

Anatomie einer HTTP InteraktionAnatomie einer HTTP Interaktion

REQUEST

RESPONSE

HTTP/1.1 200 OKDate: Tue, 08 May 2007 16:41:58 GMTServer: Apache/1.3.6Content-Length: 339Content-Type: application/x-www-form-urlencoded

folderURI=http%3A%2F%2Flocalhost%2FMailbox%2Fe53fa2 %2FFolder%2F8&folderName=Freunde&folderType=User&mailURI=http%3A%2F%2Flocalhost%2FMailbox%2Fe53fa2%2 FMail%2F5&mailURI=http%3A%2F%2Flocalhost%2FMailbox%2Fe53fa2%2 FMail%2F6

Representation

Page 8: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

8

client

GET /Mailbox/e53fa2/Folder/8 /folderName HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1

Representation - Beispiel für das Filtern eines Einze l-attributesRepresentation - Beispiel für das Filtern eines Einze l-attributes

HTTP/1.1 200 OKDate: Tue, 08 May 2007 16:41:58 GMTServer: Apache/1.3.6Content-Length: 39Content-Type: application/x-www-form-urlencoded

folderName=Freunde

REQUEST

RESPONSE

server

/Folder/8/Folder/9

/Mailbox/e53fa2

angefordertes Attribut

Page 9: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

9

client

GET /Mailbox/e53fa2/Folder/8 /folderName,folderType HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1

Representation - Beispiel für das Filtern mehrerer AttributenRepresentation - Beispiel für das Filtern mehrerer Attributen

HTTP/1.1 200 OKDate: Tue, 08 May 2007 16:41:58 GMTServer: Apache/1.3.6Content-Length: 39Content-Type: application/x-www-form-urlencoded

folderName=Freunde&folderType=User

REQUEST

RESPONSE

server

/Folder/8/Folder/9

/Mailbox/e53fa2

angeforderte Attribute

Page 10: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

10

client

GET /Mailbox/e53fa2/Folder/8 ?attr=folderName&attr=folderType HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1

Representation - Beispiel für das Filtern mehrerer Attributen auf Basis eines QueryRepresentation - Beispiel für das Filtern mehrerer Attributen auf Basis eines Query

HTTP/1.1 200 OKDate: Tue, 08 May 2007 16:41:58 GMTServer: Apache/1.3.6Content-Length: 39Content-Type: application/x-www-form-urlencoded

folderName=Freunde&folderType=User

REQUEST

RESPONSE

server

/Folder/8/Folder/9

/Mailbox/e53fa2

angeforderte Attribute

Page 11: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

11

server

/Folder/8/Folder/9

/Mailbox/e53fa2

client

GET /Mailbox/e53fa2/Folder/8 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Accept: application/x-www-form-urlencoded

Representation – Encoding (form-urlencoded)Representation – Encoding (form-urlencoded)

REQUEST

RESPONSE

HTTP/1.1 200 OKDate: Tue, 08 May 2007 16:41:58 GMTServer: Apache/1.3.6Content-Length: 39Content-Type: application/x-www-form-urlencoded

mailURI=http%3A%2F%2Flocalhost%2FMailbox%2Fe53fa2%2 FMail%2F5&mailURI=http%3A%2F%2Flocalhost%2FMailbox%2Fe53fa2%2 FMail%2F6&folderName=Freunde&folderType=User

RequiredEncoding

RepresentationMetadata

Page 12: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

12

client

GET /Mailbox/e53fa2/Folder/8 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1Accept: application/json

Representation – Encoding (JSON)Representation – Encoding (JSON)

HTTP/1.1 200 OKDate: Tue, 08 May 2007 16:41:58 GMTServer: Apache/1.3.6Content-Length: 39Content-Type: application/json; charset=utf-8

{"folderURI":"http://localhost/Mailbox/e53fa2/Folde r/8","folderName":"Freunde", "folderType":"User“,"mailURI":["http://localhost/Mailbox/e53fa2/Mail/5" ,

"http://localhost/Mailbox/e53fa2/Mail/6"]}

REQUEST

RESPONSE

server

/Folder/8/Folder/9

/Mailbox/e53fa2

Page 13: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

13

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 14: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

14

/

/

/

server

Expired-based CachingExpired-based Caching

/

/

/

/

/

/ /

client proxy, …

GET /Mailbox/e443/ creationDate HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Accept: text/plain

Page 15: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

15

/

/

/

server

Expired-based CachingExpired-based Caching

/

/

/

/

/

/ /

HTTP/1.1 200 OKServer: Apache/1.3.6Content-Length: 76Cache-Control: public, max-age=84400Content-Type: text/plain

2009-05-15T06:11:10.658

client proxy, …

GET /Mailbox/e443/ creationDate HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Accept: text/plain

Page 16: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

16

/

/

/

server

/

/

/

/

/

/ /

client

Cache Hit

HTTP/1.1 200 OKServer: Apache/1.3.6Content-Length: 76Cache-Control: public, max-age=84277Content-Type: text/plainX-Cache: HIT from myserver

2009-05-15T06:11:10.658

Server-side CachingServer-side Caching

proxy, …

GET /Mailbox/e443/ creationDate HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Accept: text/plain

Page 17: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

17

/

/

/

/

/

/ /

HTTP/1.1 200 OKServer: Apache/1.3.6Content-Length: 76Cache-Control: public, max-age=84273Content-Type: text/plainX-Cache: HIT from myproxy

2009-05-15T06:11:10.658

Cache Hit

Intermediary-based cachingIntermediary-based caching

client proxy, …

/

/

/

server

GET /Mailbox/e443/ creationDate HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Accept: text/plain

Page 18: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

18

/

/

/

/

/

/ /

HTTP/1.1 200 OKServer: Apache/1.3.6Content-Length: 76Cache-Control: public, max-age=84101Content-Type: text/plainX-Cache: HIT from myclient

2009-05-15T06:11:10.658

Cache Hit

Client-side cachingClient-side caching

client proxy, …

/

/

/

server

GET /Mailbox/e443/ creationDate HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Accept: text/plain

Page 19: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

19

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 20: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

20

Addressierung ResourcenAddressierung Resourcen

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

• Ressourcen werden über deren URI(s) identifiziert.

• REST macht keinerlei Vorgaben bzgl. dem Aufbau von URIs. Der Server hat die

Freiheit die URI-Strukturen zu ändern, ohne dass Klienten angepasst werden muss. In

der Praxis werden jedoch oft – für debugging - bestimmte Patterns verwendet.

Page 21: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

21

„normale“ Ressource„normale“ Ressource

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

http://localhost/ Hotel /e334f

• Ressourcen werden über deren URI(s) identifiziert.

• REST macht keinerlei Vorgaben bzgl. dem Aufbau von URIs. Der Server hat die

Freiheit die URI-Strukturen zu ändern, ohne dass Klienten angepasst werden muss. In

der Praxis werden jedoch oft – für debugging - bestimmte Patterns verwendet.

Page 22: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

22

SubressourcenSubressourcen

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

http://localhost/ Hotel /e334f

http://localhost/ Hotel /e334f/Room /5

• Ressourcen werden über deren URI(s) identifiziert.

• REST macht keinerlei Vorgaben bzgl. dem Aufbau von URIs. Der Server hat die

Freiheit die URI-Strukturen zu ändern, ohne dass Klienten angepasst werden muss. In

der Praxis werden jedoch oft – für debugging - bestimmte Patterns verwendet.

Page 23: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

23

Adressierung von Objekt-SnapshotsAdressierung von Objekt-Snapshots

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

http://localhost/ Hotel /e334f

http://localhost/ Hotel /e334f/Reservation /2_v3http://localhost/ Hotel /e334f/Room /5

• Ressourcen werden über deren URI(s) identifiziert.

• REST macht keinerlei Vorgaben bzgl. dem Aufbau von URIs. Der Server hat die

Freiheit die URI-Strukturen zu ändern, ohne dass Klienten angepasst werden muss. In

der Praxis werden jedoch oft – für debugging - bestimmte Patterns verwendet.

Page 24: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

24

„Schlechte“ URIs„Schlechte“ URIs

http://localhost/ CreditScoreService /check

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

http://localhost/ Hotel /e334f

http://localhost/ Hotel /e334f/Reservation /2_v3http://localhost/ Hotel /e334f/Room /5

• Ressourcen werden über deren URI(s) identifiziert.

• REST macht keinerlei Vorgaben bzgl. dem Aufbau von URIs. Der Server hat die

Freiheit die URI-Strukturen zu ändern, ohne dass Klienten angepasst werden muss. In

der Praxis werden jedoch oft – für debugging - bestimmte Patterns verwendet.

Page 25: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

25

„Schlechte“ URIs (II)„Schlechte“ URIs (II)

http://localhost/ CreditScoreService /check

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

http://localhost/ Hotel /e334f

http://localhost/ Hotel /e334f/Reservation /2_v3http://localhost/ Hotel /e334f/Room /5

• Ressourcen werden über deren URI(s) identifiziert.

• REST macht keinerlei Vorgaben bzgl. dem Aufbau von URIs. Der Server hat die

Freiheit die URI-Strukturen zu ändern, ohne dass Klienten angepasst werden muss. In

der Praxis werden jedoch oft – für debugging - bestimmte Patterns verwendet.

Page 26: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

26

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interface)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 27: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

27

{path=…/<name>}

<name>Resource{path=…/<name>}

<name>Resource

... state …... state …

«http method» GET«http method» PUT«http method» POST«http method» DELETE

«http method» GET«http method» PUT«http method» POST«http method» DELETE

RESTful HTTP - Uniform InterfaceRESTful HTTP - Uniform Interface

NoNo

- create a resource with server-side managed (auto generated) identifier

- create a sub-resource

- partial update of a resource

- partial update a resource if not modified (optimistic locking)

POST

YesNo

- create a resource with client-side managed identifier

- update a resource by replacing

- update a resource by replacing if not modified (optimistic locking)

PUT

YesNo- delete the resourceDELETE

YesYes

- retrieve a representation

- retrieve a representation if modified (cache validation request)

GET

Idem-potent

SafeUsageMethod

Page 28: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

28

SafetySafety

• Safety

• Ist definiert im HTTP RFC

• Eine Safe Methode führt nie zu einer Zustandsänderung einer Ressource

• Aus Sicht des Zustandes einer Ressource hat die Ausführung einer Safe Methode den

gleichen Effekt, als ob diese nie ausgeführt worden wäre

• GET ist Safe

• User-agents (Browser, HttpClient) und Intermediaries (Proxies, …) kennen das

Vokabular von HTTP und deren Bedeutung!

• Tritt beispielsweise ein Fehler beim GET-Aufruf auf, so kann ein HttpClient oder ein

Proxy automatisch den Aufruf wiederholen ohne das irgendwelche Seiteneffekte

auftreten. Dies setzt jedoch voraus, dass die Methode gemäß HTTP implementiert ist

GET /Hotel/e53fa2 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1

Page 29: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

29

SafetySafety

• Safety

• Ist definiert im HTTP RFC

• Eine Safe Methode führt nie zu einer Zustandsänderung einer Ressource

• Aus Sicht des Zustandes einer Ressource hat die Ausführung einer Safe Methode den

gleichen Effekt, als ob diese nie ausgeführt worden wäre

• GET ist Safe

• User-agents (Browser, HttpClient) und Intermediaries (Proxies, …) kennen das

Vokabular von HTTP und deren Bedeutung!

• Tritt beispielsweise ein Fehler beim GET-Aufruf auf, so kann ein HttpClient oder ein

Proxy automatisch den Aufruf wiederholen ohne das irgendwelche Seiteneffekte

auftreten. Dies setzt jedoch voraus, dass die Methode gemäß HTTP implementiert ist

GET /Hotel/e53fa2/Reservation/?operation=cancel HTTP/1.1Host: localhostUser-Agent: IgnorantHttpClient

GET /Hotel/e53fa2 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1

Page 30: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

30

GET /Hotel/e53fa2/Reservation/?operation=cancel HTTP/1.1Host: localhostUser-Agent: IgnorantHttpClient

SafetySafety

• Safety

• Ist definiert im HTTP RFC

• Eine Safe Methode führt nie zu einer Zustandsänderung einer Ressource

• Aus Sicht des Zustandes einer Ressource hat die Ausführung einer Safe Methode den

gleichen Effekt, als ob diese nie ausgeführt worden wäre

• GET ist Safe

• User-agents (Browser, HttpClient) und Intermediaries (Proxies, …) kennen das

Vokabular von HTTP und deren Bedeutung!

• Tritt beispielsweise ein Fehler beim GET-Aufruf auf, so kann ein HttpClient oder ein

Proxy automatisch den Aufruf wiederholen ohne das irgendwelche Seiteneffekte

auftreten. Dies setzt jedoch voraus, dass die Methode gemäß HTTP implementiert ist

GET /Hotel/e53fa2 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1

Page 31: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

31

IdempotencyIdempotency

• Idempotency

• Der erfolgreiche Aufruf einer idempotenten Methode führt immer zum selben

Zustand der Ressource . Das Ergebnis einer erfolgreich aufgerufenen idempotenten

Methode ist unabhängig der Anzahl wie oft der Aufruf wiederholt wurde

• DELETE und PUT sind Idempotent

• Ein PUT speichert eine vollständige Ressource unter der angebenen URI. Ist bereits

eine Resource vorhanden, so wird diese ersetzt

• Schlägt der PUT oder DELETE Aufruf aus unbekannten Gründen fehl → Einfach

nochmals ausführen! keine Seiteneffekte bzw. der Letzte gewinnt!

• Clients, wie Apache HttpClient oder xLightweb HttpClient machen das automatisch

PUT /Hotel/e53fa2/Guest/455 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Content-Length: 134Content-Type: application/x-www-form-urlencoded

zip=30314&lastName=Gump&street=42+Plantation+Street &firstName=Forest&country=US&city=Baytown&state=LA

Page 32: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

32

POST vs. PUTPOST vs. PUT

• POST vs. PUT

• POST ist nicht Idempotent (und erst recht nicht Safe).

• Schlägt der POST Aufruf aus unbekannten Gründen fehl – im Sinne hat es funktioniert

oder nicht? - so darf der Request nicht einfach nochmals ausgeführt werden

• POST wird auch von Techologien wie SOAP verwendet, um die SOAP messages über

HTTP zu tunneln. Im Endeffekt reduzieren Techologien wie SOAP das Application-

Level Protokoll HTTP auf ein Transport-Level Protokoll.

• PUT dient als Factory Methode („client-side managed“ URI) und Replace

• POST dient als Factory Methode („server-side managed“ URI) und Partial Updates

POST /Hotel/e53fa2 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Content-Length: 28Content-Type: application/x-www-form-urlencoded

classification=Comfort&name=Astoria

Page 33: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

33

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 34: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

34

• Bei RPC-Technologien wie CORBA oder SOAP steht ein transparentes Programming

Language-Binding im Mittelpunkt.

• Netzwerkaspekte wie beispielsweise Skalierbarkeit oder Robustheit spielen zwar eine sehr

wichtige, aber eben nur noch zweite Rolle. Der Fokus liegt auf ein transparentes Objekt-

Mapping

Welcher Ansatz verfolgen SOAP, CORBA & Co.?Welcher Ansatz verfolgen SOAP, CORBA & Co.?

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

Page 35: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

35

• Bei RPC-Technologien wie CORBA oder SOAP steht ein transparentes Programming

Language-Binding im Mittelpunkt.

• Netzwerkaspekte wie beispielsweise Skalierbarkeit oder Robustheit spielen zwar eine sehr

wichtige, aber eben nur noch zweite Rolle. Der Fokus liegt auf ein transparentes Objekt-

Mapping

Die 8 Irrtümer des verteilten ComputingDie 8 Irrtümer des verteilten Computing

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

Page 36: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

36

• Bei RPC-Technologien wie CORBA oder SOAP steht ein transparentes Programming

Language-Binding im Mittelpunkt.

• Netzwerkaspekte wie beispielsweise Skalierbarkeit oder Robustheit spielen zwar eine sehr

wichtige, aber eben nur noch zweite Rolle. Der Fokus liegt auf ein transparentes Objekt-

Mapping

• Bei REST werden die Ressourcen aus Sicht der Netzwerkkommunikation entworfen. REST

definiert kein Programming Language-Binding. D.h. in der Regel ist ein zusätzlicher

Modellierungs- und Implementierungsschritt notwendig

• Die Ressourcen gruppieren sich als Remote-Facade um die eigentlichen Businessklassen

… und was macht REST?… und was macht REST?

* «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

Page 37: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

37

• Bei RPC-Technologien wie CORBA oder SOAP steht ein transparentes Programming

Language-Binding im Mittelpunkt.

• Netzwerkaspekte wie beispielsweise Skalierbarkeit oder Robustheit spielen zwar eine sehr

wichtige, aber eben nur noch zweite Rolle. Der Fokus liegt auf ein transparentes Objekt-

Mapping

• Bei REST werden die Ressourcen aus Sicht der Netzwerkkommunikation entworfen. REST

definiert kein Programming Language-Binding. D.h. in der Regel ist ein zusätzlicher

Modellierungs- und Implementierungsschritt notwendig

• Die Ressourcen gruppieren sich als Remote-Facade um die eigentlichen Businessklassen

Die Ressourcen-SichtDie Ressourcen-Sicht

* 1..** «entity»

Reservation«entity»

Reservationid {frozen}fromto

id {frozen}fromto

cancel()set……

cancel()set……

«entity»

Hotel«entity»

Hotelid {frozen}classificationname

id {frozen}classificationname

listOccupancy()set……

listOccupancy()set……

* «entity»

Room«entity»

Roomid {frozen}numbertypeprice

id {frozen}numbertypeprice

set……

set……

«entity»

Guest«entity»

Guestid {frozen}first namelast namestreetcitycountry

id {frozen}first namelast namestreetcitycountry

set……

set……

1..*

«control»

CreditScoreCheck«control»

CreditScoreCheck

creditScore(address)creditScore(address)

{path=…/Hotel/{id}}

HotelResource{path=…/Hotel/{id}}

HotelResourcename : Stringclassification : StringroomURI : String[*]

name : Stringclassification : StringroomURI : String[*]

«http method» GET«http method» PUT«http method» POST«http method» DELETE

«http method» GET«http method» PUT«http method» POST«http method» DELETE

{path=…/Hotel/{id}/Reservation/{id}}

ReservationResource{path=…/Hotel/{id}/Reservation/{id}}

ReservationResourcefrom : DateTimeto : DateTimeroomURI : StringguestURI : String[*]hotelURI : String

from : DateTimeto : DateTimeroomURI : StringguestURI : String[*]hotelURI : String

«http method» GET«http method» PUT«http method» POST«http method» DELETE

«http method» GET«http method» PUT«http method» POST«http method» DELETE

{path=…/Hotel/{id}/Room/{id}}

RoomResource{path=…/Hotel/{id}/Room/{id}}

RoomResourcetyp : Stringprice : FloatreservationURI : String[*]hotelURI : String

typ : Stringprice : FloatreservationURI : String[*]hotelURI : String

«http method» GET«http method» PUT«http method» POST«http method» DELETE

«http method» GET«http method» PUT«http method» POST«http method» DELETE

{path=…/Guest/{id}}

GuestResource{path=…/Guest/{id}}

GuestResourcename : Stringaddress : String

name : Stringaddress : String

«http method» GET«http method» PUT«http method» POST«http method» DELETE

«http method» GET«http method» PUT«http method» POST«http method» DELETE

{path=…/CreditScore/{id}}

CreditScoreResource{path=…/CreditScore/{id}}

CreditScoreResourcescorecard : Stringpoints : Integer

scorecard : Stringpoints : Integer

«http method» GET«http method» GET

{path=…/Hotel/{id}/OccupancyList/{id}}

OccupancyListResource{path=…/Hotel/{id}/OccupancyList/{id}}

OccupancyListResourceroomOccupancy : Occupancy[*]hotelURI : String

roomOccupancy : Occupancy[*]hotelURI : String

«http method» GET«http method» GET

OccupancyOccupancyroomURI : StringreservationURI : Stringroomnumber : Stringfrom : Stringto : Integer

roomURI : StringreservationURI : Stringroomnumber : Stringfrom : Stringto : Integer

Page 38: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

38

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 39: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

39

JAX-RSJAX-RS

ServletContainer

• JSR 311: JAX-RS: The Java API for RESTful Web Services

• „The existing standard APIs Servlet and JAX-WS Provider are too low-level“ (Paul Sandoz,

JSR 311 Spec lead)

• Die aktuelle Version 1.0 (Okt/2008) betrachtet nur die Serverseite

• Neben der Referenzimplementierung Jersey existieren eine Reihe von weiteren

Implementierungen wie z.B. JBoss RESTEasy oder Apache Wink

• Beispiel:

JAX-RS “Engine”servlet

RoomResource

HotelResource

…Resource

/Hotel

/Hotel/{id}/Room

/…

Hotel

Page 40: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

40

Implementierung einer Ressource mit Hilfe JAX-RSImplementierung einer Ressource mit Hilfe JAX-RS

@Path( "/Hotel" )public class HotelResource {

private final HotelDao hotelDao ;

public HotelResource(HotelDao hotelDao) {this . hotelDao = hotelDao;

}

@POST@Consumes("application/x-www-form-urlencoded" )public Response createHotel(@FormParam( "name" ) String name,

@FormParam("classification" ) String clf) throws IOException {Hotel hotel = hotelDao .createHotel(name, clf);return Response. created(URI. create("/Hotel/" + hotel.getId())).build();

}

@GET@Path( "/{id}" )@Produces( "application/json" )public Hotel getHotel(@PathParam( "id" ) String id) throws IOException, NotFoundException {

Hotel hotel = hotelDao .retrieveHotel(id);return hotel;

} }

Page 41: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

41

Manuelle Erzeugung eines ResponseManuelle Erzeugung eines Response

@Path( "/Hotel" )public class HotelResource {

private final HotelDao hotelDao ;

public HotelResource(HotelDao hotelDao) {this . hotelDao = hotelDao;

}

@POST@Consumes("application/x-www-form-urlencoded" )public Response createHotel(@FormParam( "name" ) String name,

@FormParam("classification" ) String clf) throws IOException {Hotel hotel = hotelDao .createHotel(name, clf);return Response. created(URI. create("/Hotel/" + hotel.getId())).build();

}

@GET@Path( "/{id}" )@Produces( "application/json" )public Hotel getHotel(@PathParam( "id" ) String id) throws IOException, NotFoundException {

Hotel hotel = hotelDao .retrieveHotel(id);return hotel;

} }

HTTP/1.1 201 CreatedServer: xLightweb/2.6Content-Length: 0Location: http://localhost/hotel/e53fa2

Page 42: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

42

Nutzung des AutomappingsNutzung des Automappings

@Path( "/Hotel" )public class HotelResource {

private final HotelDao hotelDao ;

public HotelResource(HotelDao hotelDao) {this . hotelDao = hotelDao;

}

@POST@Consumes("application/x-www-form-urlencoded" )public Response createHotel(@FormParam( "name" ) String name,

@FormParam("classification" ) String clf) throws IOException {Hotel hotel = hotelDao .createHotel(name, clf);return Response. created(URI. create("/Hotel/" + hotel.getId())).build();

}

@GET@Path( "/{id}" )@Produces( "application/json" )public Hotel getHotel(@PathParam( "id" ) String id) throws IOException, NotFoundException {

Hotel hotel = hotelDao .retrieveHotel(id);return hotel;

} }

Anhand der Kombination MimeType der Rückgabe, und des zurückgegebenen Objektes wird automatisch ein bestimmter JAX-RS MessageBodyWriter verwendet

Page 43: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

43

Beispiel einer einfachen Provider-ImplementierungBeispiel einer einfachen Provider-Implementierung

@Provider@Produces( "application/json" )@Comsumes("application/json" )public class JSONLibBasedProvider implements MessageBodyWriter<Object>,

MessageBodyReader<Object> {

// writer methodspublic boolean isWriteable(Class<?> type, Type genericType, Annota tion[] annotations,

MediaType mediaType) {return (mediaType.getType().equalsIgnoreCase("application" ) &&

mediaType.getSubtype().equalsIgnoreCase("json"));}

public void writeTo(Object bean, Class<?> type, Type genericType , Annotation[] annotations,MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebAp plicationException {

String serialized = JSONObject.fromObject(bean).toS tring();Writer writer = new OutputStreamWriter(entityStream, "ISO-8859-1" );writer.write(serialized);writer.close();

}

// reader methods// …

}

Page 44: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

44

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 45: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

45

POST /Mailsubmission/ HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1Content-Type: application/x-www-form-urlencoded

delaySec= 600&mail= Message-ID%3A+%3C49A658D7.506454%40united.domain%3E %0D% 0ADate%3A+Thu %2C+26+Feb+2009+09%3A55%3A60+%2B0100%0D%0AFrom%3A+rest-rock s%40gmx.com%0D%0AX-Mozilla-Draft-Info%3A+internal%2 Fdraft%3B+vcard%3D0%3B +receipt%3D0%3B+uuencode%3D0%0D%0AUser-Agent%3A+Thu nderbird+2.0.0.19+%28W indows%2F20081209%29%0D%0ATo%3A+all%40xlightweb.org %0D%0ASubject%3A+hi+all%0D%0A%0D%0AHi%2C%0D%0Athis+is+another+test+mail%0 D%0A

clientserver

Non-CRUD - asynchrone Operation Non-CRUD - asynchrone Operation

Page 46: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

46

POST /Mailsubmission/ HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Content-Type: application/x-www-form-urlencoded

delaySec= 600&mail= Message-ID%3A+%3C49A658D7.506454%40united.domain%3E %0D% 0ADate%3A+Thu %2C+26+Feb+2009+09%3A55%3A60+%2B0100%0D%0AFrom%3A+rest-rock s%40gmx.com%0D%0AX-Mozilla-Draft-Info%3A+internal%2 Fdraft%3B+vcard%3D0%3B +receipt%3D0%3B+uuencode%3D0%0D%0AUser-Agent%3A+Thu nderbird+2.0.0.19+%28W indows%2F20081209%29%0D%0ATo%3A+all%40xlightweb.org %0D%0ASubject%3A+hi+all%0D%0A%0D%0AHi%2C%0D%0Athis+is+another+test+mail%0 D%0A

clientserver

/Mailsubmission/2

Non-CRUD - asynchrone Operation (II)Non-CRUD - asynchrone Operation (II)

Page 47: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

47

POST /Mailsubmission/ HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Content-Type: application/x-www-form-urlencoded

delaySec= 600&mail= Message-ID%3A+%3C49A658D7.506454%40united.domain%3E %0D% 0ADate%3A+Thu %2C+26+Feb+2009+09%3A55%3A60+%2B0100%0D%0AFrom%3A+rest-rock s%40gmx.com%0D%0AX-Mozilla-Draft-Info%3A+internal%2 Fdraft%3B+vcard%3D0%3B +receipt%3D0%3B+uuencode%3D0%0D%0AUser-Agent%3A+Thu nderbird+2.0.0.19+%28W indows%2F20081209%29%0D%0ATo%3A+all%40xlightweb.org %0D%0ASubject%3A+hi+all%0D%0A%0D%0AHi%2C%0D%0Athis+is+another+test+mail%0 D%0A

HTTP/1.1 202 AcceptedServer: Apache/1.3.6Content-Length: 0Location: http://localhost/Mailsubmission/2

clientserver

/Mailsubmission/2

Non-CRUD - asynchrone Operation (III)Non-CRUD - asynchrone Operation (III)

Page 48: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

48

clientserver

/Mailsubmission/2

Abfragen des VersendestatusAbfragen des Versendestatus

GET /Mailsubmission/2 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Accept: application/x-www-form-urlencoded

Page 49: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

49

HTTP/1.1 200 OKServer: Apache/1.3.6Content-Length: 14Content-Type: application/x-www-form-urlencoded

state=pending&remainingTimeSec=412

clientserver

/Mailsubmission/2

Abfragen des Versendestatus (II)Abfragen des Versendestatus (II)

GET /Mailsubmission/2 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1 Accept: application/x-www-form-urlencoded

Page 50: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

50

GET /CreditScore/ ?zip=30314&lastName=Gump&street=42+Plantation+Stree t&firstName=Forest&country=US&city=Baytown&state=LA.. . HTTP/1.1

Host: localhostUser-Agent: xLightweb/2.6.1 Accept: application/x-www-form-urlencoded

clientserver

Non-CRUD - synchrone GET OperationNon-CRUD - synchrone GET Operation

Spam

Score

Credit Score

Page 51: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

51

clientserver

Non-CRUD - synchrone GET Operation (II)Non-CRUD - synchrone GET Operation (II)

Spam

Score

Credit Score

HTTP/1.1 200 OKServer: Apache/1.3.6Content-Length: 30Cache-Control: public, max-age=60Content-Type: application/x-www-form-urlencoded

scorecard=Excellent&points=92

GET /CreditScore/ ?zip=30314&lastName=Gump&street=42+Plantation+Stree t&firstName=Forest&country=US&city=Baytown&state=LA.. . HTTP/1.1

Host: localhostUser-Agent: xLightweb/2.6.1 Accept: application/x-www-form-urlencoded

Page 52: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

52

clientserver

Non-CRUD - synchrone GET Operation (II)Non-CRUD - synchrone GET Operation (II)

Spam

Score

Credit Score

HTTP/1.1 200 OKServer: Apache/1.3.6Content-Length: 30Cache-Control: public, max-age=60Content-Type: application/x-www-form-urlencoded

scorecard=Excellent&points=92

GET /CreditScore/ ?zip=30314&lastName=Gump&street=42+Plantation+Stree t&firstName=Forest&country=US&city=Baytown&state=LA.. . HTTP/1.1

Host: localhostUser-Agent: xLightweb/2.6.1 Accept: application/x-www-form-urlencoded

Max Length URL!

Internet Explorer ~2 kbyteApache 2.2 8190 bytes (default-Einste llung)

Page 53: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

53

clientserver

Non-CRUD - synchrone POST OperationNon-CRUD - synchrone POST Operation

Spam

Score

Credit Score

POST /CreditScore/ HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1Content-Type: text/x-vcard

BEGIN:VCARDVERSION:2.1N:Gump;Forest;;;;FN:Forest GumpADR;HOME:;;42 Plantation St.;Baytown;LA;30314;USLABEL;HOME;ENCODING=QUOTED-PRINTABLE:42 Plantation St.=0D=0A30314 Baytown=0D=0ALA USEND:VCARD

HTTP/1.1 201 CREATEDServer: Apache/1.3.6Content-Length: 0Location: http://localhost/CreditScore/l00000001

Page 54: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

54

clientserver

Non-CRUD - synchrone POST Operation (II)Non-CRUD - synchrone POST Operation (II)

Spam

Score

Credit Score

GET /CreditScore/l00000001 HTTP/1.1Host: localhostUser-Agent: xLightweb/2.6.1Accept: application/x-www-form-urlencoded

HTTP/1.1 200 OKServer: Apache/1.3.6Content-Length: 30Cache-Control: public, max-age=60Content-Type: application/x-www-form-urlencoded

scorecard=Excellent&points=92

Page 55: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

55

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 56: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

56

StatelessnessStatelessness

• REST Interaktionen sind stateless

• Ein Request enthält alle für die Prozessierung notwendigen Informationen

• Requests können damit isoliert, auch von intermediaries (proxies, …), behandelt werden

LBRESTfulServices

«stateless»

RESTfulServices

«stateless»

clientSystem-System

Interface

«transport-level»

„Rich“Application

Page 57: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

57

Scale-upScale-up

• REST Interaktionen sind stateless

• Ein Request enthält alle für die Prozessierung notwendigen Informationen

• Requests können damit isoliert, auch von intermediaries (proxies, …), behandelt werden

LBRESTfulServices

«stateless»

RESTfulServices

«stateless»

clientSystem-System

Interface

«transport-level»

RESTfulServices

«stateless»

„Rich“Application

Page 58: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

58

Application stateApplication state

• REST Interaktionen sind stateless

• Ein Request enthält alle für die Prozessierung notwendigen Informationen

• Requests können damit isoliert, auch von intermediaries (proxies, …), behandelt werden

• Der Client ist verantwortlich für den application state

//

App.Session

LBRESTfulServices

«stateless»

RESTfulServices

«stateless»

clientSystem-System

Interface

«transport-level»

RESTfulServices

«stateless»

„Rich“Application

Page 59: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

59

Application stateApplication state

• REST Interaktionen sind stateless

• Ein Request enthält alle für die Prozessierung notwendigen Informationen

• Requests können damit isoliert, auch von intermediaries (proxies, …), behandelt werden

• Der Client ist verantwortlich für den application state, der Service für den resource state

resourcestate

//

App.Session

LBRESTfulServices

«stateless»

RESTfulServices

«stateless»

clientSystem-System

Interface

«transport-level»

RESTfulServices

«stateless»

„Rich“Application

Page 60: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

60

resourcestate

//

App.Session

CachingCaching

• REST Interaktionen sind stateless

• Ein Request enthält alle für die Prozessierung notwendigen Informationen

• Requests können damit isoliert, auch von intermediaries (proxies, …), behandelt werden

• Der Client ist verantwortlich für den application state, der Service für den resource state

• Optimierung: Caches

- client-seitig, intermediary, server-seitig

- local, remote

LBRESTfulServices

«stateless»

RESTfulServices

«stateless»

clientSystem-System

Interface

«transport-level»

//Cache

//Cache

//Cache

RESTfulServices

«stateless»

//Cache

CachingProxy

//Cache

„Rich“Application

Page 61: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

61

Einordnung

Anatomie einer HTTP Interaktion

HTTP Caching

Adressierung von Ressourcen

Die Operationen auf eine Ressource (Uniform Interfa ce)

Modellierung von Ressourcen

JAX-RS

Implementierung von Non-CRUD Operation

Stateful vs. Stateless

Zusammenfassung

Page 62: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

62

• RESTful HTTP ermöglicht sehr einfache Kommunikation sschnittstellen

• Minimale Infrastrukturvoraussetzungen

• Alles Service werden nach der gleichen Art und Weise aufgerufen

• Ermöglicht eine echte, sprach-/technologieübergreifende Interoperabilität

• RESTful HTTP ermöglicht eine effiziente Implementie rung hoch

skalierbarer WEB-Anwendungen

• Die Remote-Schnittstelle, die Ressourcen, berücksichtigt vom Kern auf Netzwerkaspekte.

• RESTful HTTP ermöglicht im Gegensatz zu WebService-Architekturen wie z.B. SOAP eine

sehr effiziente Nutzung der WEB-Infrastruktur (Caching,…)

• Die Berücksichtigung von Safety/Idempotency ermöglicht robuste Netzwerk-Schnittstellen

• Setzt keine komplexe und aufwendige Middleware-Infrastrukturen voraus

• Definiert einen Architekturstil für WEB-Applikationen. Beispielsweise spielen dort verteilte

atomic (2-Phase Commit) Transaktionen echte keine Rolle

ZusammenfassungZusammenfassung

Page 63: REST in der Praxis - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/REST_in_der_Praxis.pdf · Anatomie einer HTTP Interaktion HTTP Caching Adressierung von Ressourcen Die Operationen

63

• Roy Fielding – Architectural Styles and the Design of Network-

based Software Architectures(http://www.ics.uci.edu/~fielding/pubs/dissertation/ top.htm )

• Stefan Tilkov – REST und HTTP(http://www.dpunkt.de/buecher/3078.html )

• Steve Vinoski – REST Eye for the SOA Guy (http://steve.vinoski.net/pdf/IEEE-REST_Eye_for_the_ SOA_Guy.pdf )

• Gregor Roth – RESTful HTTP in practice(http://www.infoq.com/articles/designing-restful-htt p-apps-roth )

• Gregor Roth – Server load balancing architectures(http://www.javaworld.com/javaworld/jw-10-2008/jw-10 -load-balancing-1.html )

LiteraturLiteratur