rest in peace @ codemotion 2011

207
REST in peace Licensed under CC license Rome, March 5th 2011

Upload: alessandro-nadalin

Post on 08-May-2015

3.783 views

Category:

Technology


2 download

DESCRIPTION

Presentation at the 2011 Codemotion (formerly known as the italian JavaDay) about RESTful architectures and caching with Edge Side Includes specification.

TRANSCRIPT

Page 1: REST in peace @ Codemotion 2011

RESTin peace

Licensed under CC license

Rome, March 5th 2011

Page 2: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Agenda

Rest in a nutshell

The uniform interface

Bad APIs

ESI + REST

ESI in a nutshell

Pros/Cons

Problems

Page 3: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Sorry for the ugly slide.

There will be others.Really sorry.

Page 4: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Let's go!

Page 5: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Let's go back!

Page 6: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

2000Fielding's dissertation:

REpresentational

State

Transfer

http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Page 7: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

REST in a nutshell:

Page 8: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

REST in a nutshell:

1. Client <> Server

Page 9: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

REST in a nutshell:

2. Stateless

Page 10: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Recover andfailoverparadise

Page 11: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

What about the user session?

Page 12: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Must die

Page 13: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

What about the user cookies?

Page 14: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Should die

Page 15: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Wondering why?

Page 16: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Wondering why?

Send a cookie via FTP.http://www.google.it/search?sourceid=chrome&client=ubuntu&channel=cs&ie=UTF-8&q=ftp+cookies

Andhttp://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm#sec_6_3_4_2

Page 17: REST in peace @ Codemotion 2011

3. Cacheable Licensed under CC license

Rome, March 5th 2011

REST in a nutshell:

Page 18: REST in peace @ Codemotion 2011

When dealing with safe methods,the response should be able to tell the client,

or whatever stands behind the request,how to cache it.

Licensed under CC licenseRome, March 5th 2011

REST in a nutshell:

Page 19: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

REST in a nutshell:

4. Layered system

Page 20: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

REST in a nutshell:

5. Uniform interface

Page 21: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Uniform interfacehierarchic resource identification

HTTP verbs to perform operations

manipulation through representation

HATEOAS

Page 22: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Richardson maturity model

hierarchic resource identification

HTTP verbs to perform operations

manipulation through representation

HATEOAS

Really well explained by Fowler: http://martinfowler.com/articles/richardsonMaturityModel.html#level0

Page 23: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Richardson maturity model

hierarchic resource identification

HTTP verbs to perform operations

HATEOAS

mess

Page 24: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Richardson maturity model

hierarchic resource identification

HTTP verbs to perform operations

HATEOAS

mess0.

Page 25: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

0Using HTTP

Page 26: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Without giving a f***

Page 27: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Richardson maturity model

hierarchic resource identification

HTTP verbs to perform operations

HATEOAS

mess0.1.

Page 28: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

1mytastyproduct.com/users

mytastyproduct.com/users/1/licenses/4

Page 29: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Richardson maturity model

hierarchic resource identification

HTTP verbs to perform operations

HATEOAS

mess0.1.2.

Page 30: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

2

Page 31: REST in peace @ Codemotion 2011

3.

Licensed under CC licenseRome, March 5th 2011

Richardson maturity model

hierarchic resource identification

HTTP verbs to perform operations

HATEOAS

mess0.1.2.

Page 32: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

3. GOD

http://www.slideshare.net/trilancer/why-hateoas-1547275

Page 33: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Hyperlinks

Page 34: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Hypermedia formats

http://amundsen.com/hypermedia/

Page 35: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Single entry point

Page 36: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Uniform interface is interesting.

Everyone seem to have its own RESTful "service".

But no one seem to entirely implement a uniform interface.

Page 37: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Uniform interface is interesting.

Everyone seem to have its own RESTful "service".

But no one seem to entirely implement a uniform interface.

That means... ...?

Page 38: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

No RESTful

stuff

Page 39: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

But don't be too religious.

Page 40: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

But don't be too religious.Cookies stuff included.

REST gets raped everyday, get over it.

Page 41: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Counterorder

Page 42: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Let's be religious'bout that!

Page 43: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Just for a couple minutes :)

Page 44: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

API #fail

Page 45: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Page 46: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

flickr.com/people/{user-id}

Page 47: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

flickr.com/photos/{user-id}

Page 48: REST in peace @ Codemotion 2011

flickr.com/photos/{user-id}

Licensed under CC licenseRome, March 5th 2011

flickr.com/users/{user-id}/photos/

Page 49: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

flickr.photos.delete

Page 50: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

wow, a delete!

Page 51: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

POST

Page 52: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Is that even legal?

Page 53: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Page 54: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

GET /api.twitter.com/1/users/show.format

Page 55: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

GET /api.twitter.com/1/users/show.format

GET /api.twitter.com/1/users/HTTP Accept header:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Page 56: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

GET /api.twitter.com/1/users/search.format?query...

Page 57: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

GET /api.twitter.com/1/users/search.format?query...

GET /api.twitter.com/1/users?name=jack

Page 58: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Page 59: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Only JSON responses

Page 60: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

JSON is evil

Page 61: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

{ "date": "2011-01-01", "stock": "100", "price": "12"}

Page 62: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

The business evolves

Page 63: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

{ "date": "2011-01-01", "stock": "100", "price": [ {"currency": "EUR", "amount": "12"}, {"currency": "USD", "amount": "10"} ]}

Credits: http://twitter.com/#!/odracci

Page 64: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Yeah, client is broken

Page 65: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

No good

Page 66: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

BTW<xml...> <product...> <price currency="EUR">25</price> <price currency="USD">23</price> </product></xml>

Page 67: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Well, getting back to...

Page 68: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Page 69: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Create a new class

http://<server>:[<port>]/class/<database>/<class-name>

Page 70: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Response?

Page 71: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

HTTP/1.1 201 Created

Cache-Control: no-cache, no-store, max-age=0, must-revalidate

Pragma: no-cache

Date: Fri Feb 18 03:21:09 CET 2011

Content-Type: text/plain

Server: OrientDB Server v.0.9.24

Connection: Keep-Alive

Set-Cookie: OSESSIONID=OS12979956697985725150466358620636; Path=/; HttpOnly

CONTENT-LENGTH: 221

Page 72: REST in peace @ Codemotion 2011

CAN I HAZ HATEOAZ? Licensed under CC license

Rome, March 5th 2011

Page 73: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

HTTP 201 Created

Location /bla bla bla bla...

http://en.wikipedia.org/wiki/HTTP_location

Page 74: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

I am really ashamed of havingbothered you for 78 slides

to say how to perform a GET

Page 75: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

ESIin peace

Rome, March 5th 2011

Page 76: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Edge Side IncludesA de facto standard for bla bla bla...

Page 77: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Edge Side IncludesA de facto standard for bla bla bla...

Server side includes ( not SSI! ) usually handled by the architecture's ESI processor.

http://www.w3.org/TR/esi-langhttp://www.w3.org/TR/edge-arch

Page 78: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

<esi:include src="http://codemotion.it/talks/1" />

Include

Page 79: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

<esi:try> <esi:attempt> <esi:comment text="The REST talk"/> <esi:include src="http://codemotion.it/talks/1" /> </esi:attempt>

Try/Catch

Page 80: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

<esi:try> <esi:attempt> <esi:comment text="The REST talk"/> <esi:include src="http://codemotion.it/talks/1" /> </esi:attempt> <esi:except> <esi:comment text="fallback"/> <p>epic fail</p> </esi:except> </esi:try>

Fallback

Page 81: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Pitfalls

Page 82: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

PitfallsProcessor configuration

Page 83: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

PitfallsProcessor configuration

Implementation of fallbacks for handling errors

Page 84: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

PitfallsProcessor configuration

Implementation of fallbacks for handling errors

it relies on the processor, which gains importance, for creating any single response ( not really true :-) )

Page 85: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Pros

Page 86: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Pros

Performances

Page 87: REST in peace @ Codemotion 2011

Licensed under CC license

Effective gateway cacheRome, March 5th 2011

Pros

Page 88: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

ProsScalability

Page 89: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Which leads us to...

Page 90: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

REST+ESIin peace

Rome, March 5th 2011

Page 91: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

This is a response

Page 92: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

aggregating many resources

Page 93: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

So here's a resource.

Page 94: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

So here's a resource.

Or, better, its representation.

Page 95: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Five minutes cache

2 days cache

Page 96: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Let's write our own caching system

Page 97: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

because we need to cache different resources with different expiring intervals

odino@odino-phenom:~$ ab -n 1000 -c 10 http://127.0.0.1/tmp/esi.phpThis is ApacheBench, Version 2.3 <$Revision: 655654 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)Completed 100 requestsCompleted 200 requestsCompleted 300 requestsCompleted 400 requests

Page 98: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Hell no!

Page 99: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

USE ESIand HTTP

cache

Page 100: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Understanding the web cache

http://www.mnot.net/cache_docs/#WORK

HTTP cache

http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html

Page 101: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Without a single LoC

Page 102: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

ehm...

Page 103: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

With a few LoCs,

gotta admit

Page 104: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

TheArchitecture

Page 105: REST in peace @ Codemotion 2011

Application

Licensed under CC licenseRome, March 5th 2011

Database

Client

Reverse proxy / ESI processor

Page 106: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

No problems, uh?

Page 107: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Hell no!

Page 108: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

1. Complexity

Page 109: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

1. Complexity

Resolved by your needs

Page 110: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

2. Caching

Page 111: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

2. Caching

Resolved by the gateway cacheaka your reverse proxy

aka, most of the time, Varnish

Page 112: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

You know Varnish, don't you?

Page 113: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Without varnishConcurrency Level: 10Time taken for tests: 1.467 secondsComplete requests: 1000Failed requests: 0Write errors: 0Total transferred: 5476471 bytesHTML transferred: 5285280 bytesRequests per second: 681.69 [#/sec] (mean)Time per request: 14.670 [ms] (mean)Time per request: 1.467 [ms] (mean, across all concurrent requests)Transfer rate: 3645.73 [Kbytes/sec] received

Page 114: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

With varnishConcurrency Level: 10Time taken for tests: 0.179 secondsComplete requests: 1000Failed requests: 0Write errors: 0Total transferred: 5479938 bytesHTML transferred: 5288556 bytesRequests per second: 5587.65 [#/sec] (mean)Time per request: 1.790 [ms] (mean)Time per request: 0.179 [ms] (mean, across all concurrent requests)Transfer rate: 29902.34 [Kbytes/sec] received

Page 115: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

AWESOME

huh?

Page 116: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

NO.

Page 117: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Where's my HATEOAS, again?

Page 118: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

<esi:environment> <esi:request_header name="Accept" value="text/vnd.odino.xhtml"/></esi:environment>

Defining a requestheader in ESI

Page 119: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

<esi:environment> <esi:request_header name="Accept" value="text/vnd.odino.xhtml"/></esi:environment>

Defining a requestheader in ESI

Content Negotiation

Page 120: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Awful support

Page 121: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Application

Reverse proxy

Client

?

Page 122: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Application

Reverse proxy

Client

ESI processor

Page 123: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Some freaking crazy people built a webserver

Page 124: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

in PHP

Page 125: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

with the RAD framework

Symfony2

http://symfony-reloaded.org/

https://github.com/pminnieur/ServerBundle

Page 126: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

That means you should be able to write your own reverse proxy acting as an ESI processor.

I mean, if they were able to write a webserver...

Page 127: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

in PHP

Page 128: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

you have no excuses

Page 129: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

But please

Page 130: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Make it support all the ESI stuff

Page 131: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Not like Varnish

http://www.varnish-cache.org/trac/wiki/ESIfeatures

Page 132: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Extendedcontent

negotiation

Page 133: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

text/vnd.xhtml+xml;profile=esi

Chapter 8: http://www.rfc-editor.org/rfc/rfc3236.txt

Page 134: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

text/vnd.xhtml+xml;profile=esi

<head> ....</head><body> <esi ... /></body>

Response to the proc

Page 135: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Profile is used because the browserwon't render such this kind of formats:

Page 136: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

text/vnd.xhesiml+xml

Page 137: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

text/vnd.xhesiml+xml

<div> ....</div><span> <esi ... /></span>

Response for fragments

Page 138: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Application

Reverse proxy

Client

ESI processor

Supportingall the ESIspecificationhttp://www.w3.org/TR/esi-lang

Page 139: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Overhead?

Page 140: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Is that a problem?

Page 141: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Application

Reverse proxy

Client

ESI processor

Supportingall the ESIspecificationhttp://www.w3.org/TR/esi-lang

Page 142: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Varnish is therefor a reason

Page 143: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Because at that

Page 144: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Varnish ROCKS!

Page 145: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Ready to include a resource with our custom hypermedia

format

<esi:environment> <esi:request_header name="Accept" value="text/vnd.blablabla"/></esi:environment>

Page 146: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

But don't screw everything forgetting the remaining parts of HATEOAS, likehypermedia relations.http://www.slideshare.net/adorepump/hateoas-the-confusing-bit-from-resthttp://tech.groups.yahoo.com/group/rest-discuss/message/17011

Page 147: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

So, with a

Page 148: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Layered

Page 149: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Cacheable

Page 150: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Stateless

Page 151: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Driven by

Page 152: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Uniform interface

Page 153: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

andhypermedia

Page 154: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

architecture

Page 155: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Oh dear

Page 156: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Richardsonmaturity

modellevel 3

Page 157: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Again...

Page 158: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Pros

Performances

Page 159: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

ProsScalability

Page 160: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Pros

Durability

Page 161: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Where to RESTin peace

Rome, March 5th 2011

Page 162: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

anywebservice

Page 163: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

machineto

machine

Page 164: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Be the next AtomPub

http://bitworking.org/projects/atom/rfc5023.html

Page 165: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Actually...

Page 166: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Page 167: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

"REST is software design on the scale of decades: every detail is intended to promote software longevity and independent evolution. Many of the constraints are directly

opposed to short-term efficiency. Unfortunately, people are fairly good at short-term design, and usually awful at long-term design. "

Roy Fielding

Page 168: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Put a bit of REST

everywhere

Page 169: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

http://articles.sfgate.com/2011-02-20/opinion/28613184_1_news-network-cable-and-satellite-website

http://tech.groups.yahoo.com/group/rest-discuss/message/17370

+2.500%traffic

Page 170: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Rules of good design

Page 171: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

No need to be religious

Page 172: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

This talk sucksin peace

Rome, March 5th 2011

Page 173: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

1

Page 174: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Agile developmentvs

REST

Page 175: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Agile developmentvs

REST

mmmmmmmmmmmm................

http://www.odino.org/288/restful-and-agile-love-hate-love

Page 176: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

2

Page 177: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Browserssuck

Page 178: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

HTTP authenticationhttp://www.odino.org/238/mockups-of-web-authentication-the-rest-rescue

Page 179: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

3

Page 180: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

HTML5

Page 181: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Everybody loves it

Page 182: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

I HATEHTML5

Page 183: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Original specification:

"support for PUT and DELETE verbs"

Page 184: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

People went insane

Page 185: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Current status?

Page 186: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Removed

Page 187: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

There are nouse cases

Page 188: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

They said

Page 189: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

http://www.w3.org/TR/2010/WD-html5-diff-20101019/#changes-2010-06-24

Page 190: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Then people got mad

Page 191: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

A disclaimerin peace

Rome, March 5th 2011

Page 192: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

JSONdoes not suck. At all.

http://www.slideshare.net/Wombert/xml-versus-the-new-kids-on-the-block-phpbnl11-20110129

Page 193: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Varnishdoes not suck. At all.

Page 194: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

HTML5does not suck. At all.

http://www.html5rocks.com/

Page 195: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

OrientDBrocks

Ask Luca Garulli, he might be in this room

http://www.orientechnologies.com/

Page 196: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Everything is a tradeoff

Page 197: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Hints?

Page 198: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

David Zuelkeknows best

Page 199: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Design HTTP interfacesand RESTful webservices

http://www.slideshare.net/Wombert/designing-http-interfaces-and-restful-web-services-phpbnl11-20110128

Page 200: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

Othersknow best

Page 201: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

300 RESTful boring slides :)http://www.slideshare.net/guilhermecaelum/rest-in-practice

REST as the DBMS of the webhttp://www.slideshare.net/dnene/rest-representational-state-transfer-explained

Page 202: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

amazon.it

Page 203: REST in peace @ Codemotion 2011

Thanks!

Alessandro Nadalinodino.org

Page 204: REST in peace @ Codemotion 2011
Page 205: REST in peace @ Codemotion 2011

Licensed under CC licenseRome, March 5th 2011

@_odino_

#codemotion

Page 206: REST in peace @ Codemotion 2011

12 - 14 May, Verona

Page 207: REST in peace @ Codemotion 2011

Creditshttp://www.flickr.com/photos/larachris/16564077/sizes/o/in/photostream/

http://www.flickr.com/photos/ashatenbroeke/4367373081/sizes/z/in/photostream/http://www.flickr.com/photos/yourdon/3140270189/sizes/l/in/photostream/http://www.flickr.com/photos/jox1989/4964706072/sizes/l/in/photostream/http://www.flickr.com/photos/brainfg/168506259/sizes/o/in/photostream/

http://www.flickr.com/photos/norte_it/3897091546/sizes/o/in/photostream/http://www.zdnet.com/blog/service-oriented/soap-versus-rest-a-matter-of-style/3568

http://www.flickr.com/photos/turtlemom_nancy/2046347762/sizes/l/in/photostream/http://www.flickr.com/photos/juanpg/3333385784/sizes/z/in/photostream/http://www.flickr.com/photos/congvo/301678287/sizes/l/in/photostream/

http://www.flickr.com/photos/ihasb33r/2573196546/sizes/z/in/photostream/http://www.flickr.com/photos/martin_heigan/4544138976/sizes/o/in/photostream/

http://www.flickr.com/photos/cknara/4195099999/sizes/o/in/photostream/http://www.flickr.com/photos/1080p/3076529265/sizes/l/in/photostream/

http://www.flickr.com/photos/adamrice/280300202/sizes/l/in/photostream/http://www.flickr.com/photos/tomer_a/541411897/sizes/o/in/photostream/http://www.flickr.com/photos/subpra/4514008262/sizes/l/in/photostream/

http://www.flickr.com/photos/lippincott/2539720043/sizes/l/in/photostream/http://www.flickr.com/photos/rawryder/5086090931/sizes/l/in/photostream/http://www.flickr.com/photos/robboudon/5312731161/sizes/l/in/photostream/

http://www.flickr.com/photos/bc-burnslibrary/4158243488/sizes/o/in/photostream/http://www.flickr.com/photos/13606325@N08/2416993706/sizes/o/in/photostream/

http://www.flickr.com/photos/neothezion/5135841069/sizes/l/in/photostream/http://www.flickr.com/photos/planetschwa/2494067809/http://www.flickr.com/photos/thomasthomas/258931782/