REST in peace @ Osidays 2011 India 11-21-2011
-
Upload
alessandro-nadalin -
Category
Technology
-
view
1.917 -
download
3
description
Transcript of REST in peace @ Osidays 2011 India 11-21-2011
RESTin peace
Bengaluru, 20-22 November 2011
Sorry for the ugly slide.
There will be others.Really sorry.
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
REST in a nutshell
2000Fielding's dissertation:
REpresentational
State
Transferhttp://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Bengaluru, 20-22 November 2011
REST in a nutshell:
1. Client <> ServerBengaluru, 20-22 November 2011
REST in a nutshell:
2. Stateless
Bengaluru, 20-22 November 2011
Servers do not keep anyinformations the clients uses
during different requests.
Bengaluru, 20-22 November 2011
So the architecture scales well.
Bengaluru, 20-22 November 2011
3. Cacheable
REST in a nutshell:
Bengaluru, 20-22 November 2011
Client has access to resources stored betweenit and the origin server.
Bengaluru, 20-22 November 2011
So communication is faster.
Bengaluru, 20-22 November 2011
REST in a nutshell:
4. Layered systemBengaluru, 20-22 November 2011
Intermediary nodes can beused along our architecture.
Bengaluru, 20-22 November 2011
So you efficiently implement point 3.
Bengaluru, 20-22 November 2011
REST in a nutshell:
5. Uniform interface
Bengaluru, 20-22 November 2011
Communicate using well-knownverbs and providing all the
informations needed toconsume a service.
Bengaluru, 20-22 November 2011
So fallbacks are easy.
Bengaluru, 20-22 November 2011
this was a bit difficult to understand
so, obviously...
Bengaluru, 20-22 November 2011
nobody had a clue
Bengaluru, 20-22 November 2011
ANTIPATTERNS
Bengaluru, 20-22 November 2011
1URIs
Bengaluru, 20-22 November 2011
"REST is about
cool URI design"
http://apple.com/users/1/licenses/4.json
Bengaluru, 20-22 November 2011
"REST is about
cool URI design"
http://apple.com/users/1/licenses/4.json
Bengaluru, 20-22 November 2011
http://apple.com/site/en_US/showUsers.jsp?uid=1&license=4
is OK too
Bengaluru, 20-22 November 2011
but, enter simple rule of thumb
Bengaluru, 20-22 November 2011
cool URIs help youthink in term of resources
- David Zuelke
Bengaluru, 20-22 November 2011
2URIs (bis)
Bengaluru, 20-22 November 2011
GET /users POST /users PUT /users/{id} DELETE /users/{id} ...
REST follows a URI schema
Bengaluru, 20-22 November 2011
GET /users POST /users PUT /users/{id} DELETE /users/{id} ...
REST follows a URI schema
Bengaluru, 20-22 November 2011
what if you change yourURL?
Bengaluru, 20-22 November 2011
client is broken
Bengaluru, 20-22 November 2011
RESTful clients shouldbe driven by service'shypermedia controls
Roy Fielding : http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Bengaluru, 20-22 November 2011
HATEOAS
Bengaluru, 20-22 November 2011
3POST is cool
Bengaluru, 20-22 November 2011
said SOAP 1.1
Bengaluru, 20-22 November 2011
said SOAP 1.1
Bengaluru, 20-22 November 2011
loosing meaningful verbs at the protocol level
Bengaluru, 20-22 November 2011
loosing meaningful verbs at the protocol level
nothing cacheable by default
Bengaluru, 20-22 November 2011
loosing meaningful verbs at the protocol level
nothing cacheable by default
what about bookmarking?
Bengaluru, 20-22 November 2011
4500 is your friend
Bengaluru, 20-22 November 2011
said SOAP( again )
Bengaluru, 20-22 November 2011
GET /users/300Host: www.example.com
Bengaluru, 20-22 November 2011
HTTP/1.1 500 Internal Server ErrorEtag: 1234X-Powered-By: php/5.3...
The record cannot be found
GET /users/300Host: www.example.com
Bengaluru, 20-22 November 2011
HTTP/1.1 500 Internal Server ErrorEtag: 1234X-Powered-By: php/5.3...
The record cannot be found
GET /users/300Host: www.example.com
Bengaluru, 20-22 November 2011
The HTTP protocol is awesome,and lets you return meaningful anduniversally-understood status codes
Bengaluru, 20-22 November 2011
404 Not Found
Bengaluru, 20-22 November 2011
404 Not Found
OMG Link is broken?
Bengaluru, 20-22 November 2011
202 Accepted
Bengaluru, 20-22 November 2011
202 Accepted
You get an immediate OK, and the operation will hopefully complete
Bengaluru, 20-22 November 2011
Pause
Bengaluru, 20-22 November 2011
The WWW
Bengaluru, 20-22 November 2011
the largest data-exchange network on the planet
Bengaluru, 20-22 November 2011
And meanwhile, at Facebook...
12TB of new data every day(1 year ago)
500 million users
Bengaluru, 20-22 November 2011
And meanwhile, at Google...
1 billion unique monthly googlers
Bengaluru, 20-22 November 2011
via HTTP, baby!
Bengaluru, 20-22 November 2011
HTTP in a nutshell:
1. Client <> ServerBengaluru, 20-22 November 2011
HTTP in a nutshell:
2. Stateless
Bengaluru, 20-22 November 2011
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html
3. widespread cache spec
HTTP in a nutshell:
Bengaluru, 20-22 November 2011
HTTP in a nutshell:
4. Layered systemOrigin server
Reverse proxy
Great chinese (fire)wall
Company proxy
Lao Tze Song using Firefox 6
Bengaluru, 20-22 November 2011
HTTP in a nutshell:
5. it is the uniform interfacebetween clients and servers
Bengaluru, 20-22 November 2011
HTTP bleeds REST
Bengaluru, 20-22 November 2011
How do Iimplement
thisgoodness?
Bengaluru, 20-22 November 2011
1. caching & scalability
Bengaluru, 20-22 November 2011
HTTP cache
Bengaluru, 20-22 November 2011
Local
Shared/proxy
Shared/reverse proxy
Types of cache
Bengaluru, 20-22 November 2011
Local
Shared/proxy
Shared/reverse proxy
Types of cache
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
Local
Shared/proxy
Shared/reverse proxy
Types of cache
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
Local
Shared/proxy
Shared/reverse proxy
Types of cache
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
on the server side
Bengaluru, 20-22 November 2011
Caching withExpiration(example)
Bengaluru, 20-22 November 2011
HTTP/1.1 200 OKHost: www.example.comExpires: 0
Bengaluru, 20-22 November 2011
HTTP/1.1 200 OKHost: www.example.comExpires: 0
Bengaluru, 20-22 November 2011
HTTP/1.1 200 OKHost: www.example.comExpires: Tue, 31 Jan 2011 01:00 GMT
Bengaluru, 20-22 November 2011
HTTP/1.1 200 OKHost: www.example.comCache-Control: max-age=60, public
Bengaluru, 20-22 November 2011
HTTP/1.1 200 OKHost: www.example.comCache-Control: max-age=60, public
Bengaluru, 20-22 November 2011
HTTP/1.1 200 OKHost: www.example.comCache-Control: max-age=60, public
Cacheable for 60 seconds
Bengaluru, 20-22 November 2011
HTTP/1.1 200 OKHost: www.example.comCache-Control: max-age=60, public
Cacheable by both local and shared caches
Bengaluru, 20-22 November 2011
You can also cache with validation
(Etags, If-None-Match, ...)
Bengaluru, 20-22 November 2011
Why HTTP cachingis so
important?
Bengaluru, 20-22 November 2011
Ask yourself:as a developer, what do I want
on my application?
Bengaluru, 20-22 November 2011
Evolve
Loose coupling
Work less
Bengaluru, 20-22 November 2011
Evolve Because you want your platform to extensible
Loose coupling
Work less
Bengaluru, 20-22 November 2011
Evolve Because you want your platform to extensible
Loose coupling Because you want it to be easy to integrate with, evolve, plug and mantain
Work less
Bengaluru, 20-22 November 2011
Evolve Because you want your platform to extensible
Loose coupling Because you want it to be easy to integrate with, evolve, plug and mantain
Work less
Because every LoC is bug-prone and our man-day is a hard-to-scale cost
Bengaluru, 20-22 November 2011
enters our Hero #1
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
enters our Hero #2
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
http://www.lullabot.com/articles/a-beginners-guide-to-caching-data
Bengaluru, 20-22 November 2011
2007
Bengaluru, 20-22 November 2011
2011?
Bengaluru, 20-22 November 2011
it supportsHTTP caching!
http://drupal.org/node/147310
Bengaluru, 20-22 November 2011
it supportsHTTP caching!
http://drupal.org/node/147310
( people is supposed to clap their hands here )
Bengaluru, 20-22 November 2011
but
Bengaluru, 20-22 November 2011
wait.... how?
Bengaluru, 20-22 November 2011
Default headers
Expires = 'Sun, 19 Nov 1978 05:00:00 GMT',
Cache-Control = 'no-cache, must-revalidate',
ETag = $_SERVER['REQUEST_TIME'],
Bengaluru, 20-22 November 2011
Default headers
Expires = 'Sun, 19 Nov 1978 05:00:00 GMT',
Cache-Control = 'no-cache, must-revalidate',
ETag = $_SERVER['REQUEST_TIME'],
Bengaluru, 20-22 November 2011
Default headers
Expires = 'Sun, 19 Nov 1978 05:00:00 GMT',
Cache-Control = 'no-cache, must-revalidate',
ETag = $_SERVER['REQUEST_TIME'],
Bengaluru, 20-22 November 2011
Default headers
Expires = 'Sun, 19 Nov 1978 05:00:00 GMT',
Cache-Control = 'no-cache, must-revalidate',
ETag = $_SERVER['REQUEST_TIME'],
Bengaluru, 20-22 November 2011
is that even legal?
Bengaluru, 20-22 November 2011
"but you can redefine them!"
Bengaluru, 20-22 November 2011
drupal_add_http_header()
Bengaluru, 20-22 November 2011
function drupal_add_http_header(){ ...
...
drupal_send_headers($headers);}
Bengaluru, 20-22 November 2011
so, what
drupal_send_headers()
can do so evil?
Bengaluru, 20-22 November 2011
header(),
of course
Bengaluru, 20-22 November 2011
which means
Bengaluru, 20-22 November 2011
drupal_add_http_header('Dumb-Header', 'I\'m batman!');...// other logic...drupal_add_http_header('Dumb-Header', 'I\'m not');
var_dump(headers_list());
Bengaluru, 20-22 November 2011
drupal_add_http_header('Dumb-Header', 'I\'m batman!');...// other logic...drupal_add_http_header('Dumb-Header', 'I\'m not');
var_dump(headers_list());
array 0 => string 'X-Powered-By: PHP/5.3.2-1ubuntu4.7' 1 => string 'Dump-Header: I'm not'
Bengaluru, 20-22 November 2011
drupal_add_http_header('Dumb-Header', 'I\'m batman!');...// other logic...drupal_add_http_header('Dumb-Header', false);
var_dump(headers_list());
Bengaluru, 20-22 November 2011
drupal_add_http_header('Dumb-Header', 'I\'m batman!');...// other logic...drupal_add_http_header('Dumb-Header', false);
var_dump(headers_list());
array 0 => string 'X-Powered-By: PHP/5.3.2-1ubuntu4.7' 1 => string 'Dump-Header: I'm batman'
Bengaluru, 20-22 November 2011
drupal_add_http_header('Dumb-Header', 'I\'m batman!');...// other logic...drupal_add_http_header('Dumb-Header', ' ');
var_dump(headers_list());
Bengaluru, 20-22 November 2011
drupal_add_http_header('Dumb-Header', 'I\'m batman!');...// other logic...drupal_add_http_header('Dumb-Header', ' ');
var_dump(headers_list());
array 0 => string 'X-Powered-By: PHP/5.3.2-1ubuntu4.7' 1 => string 'Dumb-Header:'
Bengaluru, 20-22 November 2011
or
Bengaluru, 20-22 November 2011
you can use header_remove()
( PHP 5.3 )
Bengaluru, 20-22 November 2011
and create a new class to manage/keep track of
headers and caching directives
Bengaluru, 20-22 November 2011
but we're lazy
and
we don't want to reinvent the wheel
Bengaluru, 20-22 November 2011
Goals
Work lessevolve
loose coupling
Bengaluru, 20-22 November 2011
Goals
Work lessevolve
loose coupling
Bengaluru, 20-22 November 2011
everything is done for us!
:)
but....
Bengaluru, 20-22 November 2011
tmp files, cache tables, procedural code...
mmmmh....
gotta be something better
Bengaluru, 20-22 November 2011
Frameworks
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
ONE
Bengaluru, 20-22 November 2011
Cache is used for compiling routes, autoloading, ...
Bengaluru, 20-22 November 2011
Cache is used for compiling routes, autoloading, ...
...but also for storing the view
Bengaluru, 20-22 November 2011
Goals
Work lessevolve
loose coupling
Bengaluru, 20-22 November 2011
Goals
Work lessevolve
loose coupling
Bengaluru, 20-22 November 2011
at least because we use a framework
Bengaluru, 20-22 November 2011
HTTP
Less work
Bengaluru, 20-22 November 2011
because the hard work is delegated to the browser/proxy
http://www.flickr.com/photos/snakphotography/5004775320/sizes/o/in/photostream/
Bengaluru, 20-22 November 2011
Evolve
Bengaluru, 20-22 November 2011
because cache is abstracted from the application
Bengaluru, 20-22 November 2011
Loose coupling
Bengaluru, 20-22 November 2011
because caching is bound to the protocol, HTTP, not to your implementation ( Sf, RoR, Django )
Bengaluru, 20-22 November 2011
but hey, you say
Bengaluru, 20-22 November 2011
HTTP's cache fails when dealing with really dynamic pages, because consumers will always have to hit the
origin server, although a part of the page would be cacheable ( header and footer, for example )
Bengaluru, 20-22 November 2011
Nope
Nope
Bengaluru, 20-22 November 2011
ESI was built for thathttp://www.w3.org/TR/esi-lang
Bengaluru, 20-22 November 2011
Edge Side IncludesA de facto standard for bla bla bla...
Bengaluru, 20-22 November 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
<esi:include src="http://osidays.com/talks/1" />
Bengaluru, 20-22 November 2011
<esi:include src="http://osidays.com/talks/1" />
Bengaluru, 20-22 November 2011
<esi:include src="http://osidays.com/talks/1" />
Bengaluru, 20-22 November 2011
1s (tweets)
3600 (post)
Bengaluru, 20-22 November 2011
<esi:include src='tweets.html' />
<esi:include src='article/12.html' />
Bengaluru, 20-22 November 2011
2. adaptability & durability
Bengaluru, 20-22 November 2011
Hypermediaanother long-time friend
Bengaluru, 20-22 November 2011
Linksoutrageously semplifying
Bengaluru, 20-22 November 2011
<img src="..." />
<a href="..." />
<link rel="payment" ... />
Bengaluru, 20-22 November 2011
<img src="..." />
<a href="..." />
<link rel="payment" ... />
Bengaluru, 20-22 November 2011
<img src="..." />
<a href="..." />
<link rel="payment" ... />
Bengaluru, 20-22 November 2011
<link rel="payment" href="/checkout" type="text/html" ... />
Bengaluru, 20-22 November 2011
<link rel="payment" href="/checkout" type="text/html" ... />
Bengaluru, 20-22 November 2011
<link rel="payment" href="/checkout" type="text/html" ... />
Bengaluru, 20-22 November 2011
<link rel="payment" href="/checkout" type="text/html" ... />
Bengaluru, 20-22 November 2011
HTTP/1.1 201 CreatedHost: www.example.comEtag: 1234X-Powered-By: php/5.3Location: /users/1
POST /usersHost: www.example.com
Bengaluru, 20-22 November 2011
HTTP/1.1 201 CreatedHost: www.example.comEtag: 1234X-Powered-By: php/5.3Location: /users/1
POST /usersHost: www.example.com
Bengaluru, 20-22 November 2011
HTTP/1.1 201 CreatedHost: www.example.comEtag: 1234X-Powered-By: php/5.3Location: /new-users-db/1
POST /usersHost: www.example.com
Bengaluru, 20-22 November 2011
HTTP/1.1 201 CreatedHost: www.example.comEtag: 1234X-Powered-By: php/5.3Location: /new-users-db/1
POST /usersHost: www.example.com
Bengaluru, 20-22 November 2011
consumers of your API are able to followthe changes of your design
Bengaluru, 20-22 November 2011
Client knows how to consume the service based on the informationsauto-provided by the service itself
Bengaluru, 20-22 November 2011
No WSDL.
Bengaluru, 20-22 November 2011
No URI templates.
Bengaluru, 20-22 November 2011
No easily-outdated documentation.
Bengaluru, 20-22 November 2011
No assumptions.
Bengaluru, 20-22 November 2011
Less WTFs.
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
This does not easily break.
Bengaluru, 20-22 November 2011
HATEOASHypermedia As The Engine Of Application State
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
6
everything seems eventually
cool
Recap: why REST?Bengaluru, 20-22 November 2011
Pros
PerformancesBengaluru, 20-22 November 2011
Pros
Scalability
Bengaluru, 20-22 November 2011
Pros
Durability
Bengaluru, 20-22 November 2011
Not RESTful?
Bengaluru, 20-22 November 2011
Simply don't care
Bengaluru, 20-22 November 2011
Rules of architectural design
Bengaluru, 20-22 November 2011
Follow them accordingto your needs
Bengaluru, 20-22 November 2011
amazon.com
Bengaluru, 20-22 November 2011
So...
Bengaluru, 20-22 November 2011
Bengaluru, 20-22 November 2011
Alessandro Nadalin
Bengaluru, 20-22 November 2011
odino.org
Bengaluru, 20-22 November 2011
a
Bengaluru, 20-22 November 2011
a
Bengaluru, 20-22 November 2011
@_odino_ #osidays
a
Bengaluru, 20-22 November 2011
@_odino_
Thank YOU!
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/
http://www.flickr.com/photos/rustyboxcars/2629631562/sizes/l/in/photostream/http://www.flickr.com/photos/ell-r-brown/4138727474/sizes/l/in/photostream/http://www.flickr.com/photos/noah123/5082076630/sizes/z/in/photostream/http://www.flickr.com/photos/jungle_boy/220181177/sizes/l/in/photostream/
http://www.flickr.com/photos/prettydaisies/872539081/sizes/l/in/photostream/http://www.flickr.com/photos/kaptainkobold/76256150/sizes/o/in/photostream/
http://www.flickr.com/photos/uomoincravatta/1438372865/sizes/z/in/photostream/
Bengaluru, 20-22 November 2011