Presentation at the 2011 Codemotion (formerly known as the italian JavaDay) about RESTful architectures and caching with Edge Side Includes specification.
1. REST in peace
Rome, March 5th 2011
Licensed under CC license
2. Agenda
Rest in a nutshell ESI in a nutshell
The uniform interface Pros/Cons
Bad APIs
ESI + REST Problems
Licensed under CC license
Rome, March 5th 2011
3. Sorry for the ugly slide.
There will be others.
Really sorry.
Licensed under CC license
Rome, March 5th 2011
6. 2000
Fielding's dissertation:
REpresentational
State
Transfer
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Licensed under CC license
Rome, March 5th 2011
7. REST in a nutshell:
Licensed under CC license
Rome, March 5th 2011
8. REST in a nutshell:
1. Client <> Server
Licensed under CC license
Rome, March 5th 2011
9. REST in a nutshell:
2. Stateless
Licensed under CC license
Rome, March 5th 2011
10. Recover and
failover
paradise
Licensed under CC license
Rome, March 5th 2011
11. What about
the user
session?
Licensed under CC license
Rome, March 5th 2011
12. Must
die
Licensed under CC license
Rome, March 5th 2011
13. What about
the user
cookies?
Licensed under CC license
Rome, March 5th 2011
14. Should
die
Licensed under CC license
Rome, March 5th 2011
16. Wondering why?
Send a cookie via FTP.
http://www.google.it/search?sourceid=chrome&client=ubuntu&channel=cs&ie=UTF-8&q=ftp+cookies
And
http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm#sec_6_3_4_2
Licensed under CC license
Rome, March 5th 2011
17. REST in a nutshell:
3. Cacheable
Licensed under CC license
Rome, March 5th 2011
18. REST in a nutshell:
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 license
Rome, March 5th 2011
19. REST in a nutshell:
4. Layered system
Licensed under CC license
Rome, March 5th 2011
20. REST in a nutshell:
5. Uniform
interface
Licensed under CC license
Rome, March 5th 2011
21. Uniform interface
hierarchic resource identification
HTTP verbs to perform operations
manipulation through representation
HATEOAS
Licensed under CC license
Rome, March 5th 2011
22. 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
Licensed under CC license
Rome, March 5th 2011
23. Richardson maturity model
mess
hierarchic resource identification
HTTP verbs to perform operations
HATEOAS
Licensed under CC license
Rome, March 5th 2011
24. Richardson maturity model
0. mess
hierarchic resource identification
HTTP verbs to perform operations
HATEOAS
Licensed under CC license
Rome, March 5th 2011
25. 0
Using HTTP
Licensed under CC license
Rome, March 5th 2011
26. Without giving a
f***
Licensed under CC license
Rome, March 5th 2011
27. Richardson maturity model
1. 0. mess
hierarchic resource identification
HTTP verbs to perform operations
HATEOAS
Licensed under CC license
Rome, March 5th 2011
28. 1
mytastyproduct.com/users
mytastyproduct.com/users/1/licenses/4
Licensed under CC license
Rome, March 5th 2011
29. Richardson maturity model
1. 0. mess
hierarchic resource identification
2. HTTP verbs to perform operations
HATEOAS
Licensed under CC license
Rome, March 5th 2011
36. Uniform interface is interesting.
Everyone seem to have its own RESTful "service".
But no one seem to entirely implement a uniform interface.
Licensed under CC license
Rome, March 5th 2011
37. Uniform interface is interesting.
Everyone seem to have its own RESTful "service".
But no one seem to entirely implement a uniform interface.
That means... ...?
Licensed under CC license
Rome, March 5th 2011
38. No
RESTful
stuff
Licensed under CC license
Rome, March 5th 2011
39. But don't be too religious.
Licensed under CC license
Rome, March 5th 2011
40. But don't be too religious.
Cookies stuff included.
REST gets raped everyday,
get over it.
Licensed under CC license
Rome, March 5th 2011
55. 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
Licensed under CC license
Rome, March 5th 2011
71. 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
Licensed under CC license
Rome, March 5th 2011
72. CAN I HAZ HATEOAZ?
Licensed under CC license
Rome, March 5th 2011
73. HTTP 201 Created
Location /bla bla bla bla...
http://en.wikipedia.org/wiki/HTTP_location
Licensed under CC license
Rome, March 5th 2011
74. I am really ashamed of having
bothered you for 78 slides
to say how to perform a GET
Licensed under CC license
Rome, March 5th 2011
75. ESI
in peace
Rome, March 5th 2011
Licensed under CC license
Rome, March 5th 2011
76. Edge Side Includes
A de facto standard for bla bla bla...
Licensed under CC license
Rome, March 5th 2011
77. Edge Side Includes
A 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-lang
http://www.w3.org/TR/edge-arch
Licensed under CC license
Rome, March 5th 2011
78. Include
<esi:include src="http://codemotion.it/talks/1" />
Licensed under CC license
Rome, March 5th 2011
79. Try/Catch
<esi:try>
<esi:attempt>
<esi:comment text="The REST talk"/>
<esi:include src="http://codemotion.it/talks/1" />
</esi:attempt>
Licensed under CC license
Rome, March 5th 2011
80. Fallback
<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>
Licensed under CC license
Rome, March 5th 2011
82. Pitfalls
Processor configuration
Licensed under CC license
Rome, March 5th 2011
83. Pitfalls
Processor configuration
Implementation of fallbacks for handling
errors
Licensed under CC license
Rome, March 5th 2011
84. Pitfalls
Processor configuration
Implementation of fallbacks for handling
errors
it relies on the processor, which gains
importance, for creating any single response (
not really true :-) )
Licensed under CC license
Rome, March 5th 2011
93. So here's a resource.
Licensed under CC license
Rome, March 5th 2011
94. So here's a resource.
Or, better, its
representation.
Licensed under CC license
Rome, March 5th 2011
95. Five minutes cache
2 days cache
Licensed under CC license
Rome, March 5th 2011
96. Let's write our own
caching system
Licensed under CC license
Rome, March 5th 2011
97. 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.php
This 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 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Licensed under CC license
Rome, March 5th 2011
99. USE ESI
and HTTP
cache
Licensed under CC license
Rome, March 5th 2011
100. Understanding the web cache
http://www.mnot.net/cache_docs/#WORK
HTTP cache
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html
Licensed under CC license
Rome, March 5th 2011
101. Without a
single LoC
Licensed under CC license
Rome, March 5th 2011
111. 2. Caching
Resolved by the gateway cache
aka your reverse proxy
aka, most of the time, Varnish
Licensed under CC license
Rome, March 5th 2011
112. You know
Varnish,
don't you?
Licensed under CC license
Rome, March 5th 2011
113. Without varnish
Concurrency Level: 10
Time taken for tests: 1.467 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 5476471 bytes
HTML transferred: 5285280 bytes
Requests 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
Licensed under CC license
Rome, March 5th 2011
114. With varnish
Concurrency Level: 10
Time taken for tests: 0.179 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 5479938 bytes
HTML transferred: 5288556 bytes
Requests 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
Licensed under CC license
Rome, March 5th 2011
115. AWESOME
huh?
Licensed under CC license
Rome, March 5th 2011
118. Defining a request
header in ESI
<esi:environment>
<esi:request_header name="Accept" value="text/vnd.odino.xhtml"/>
</esi:environment>
Licensed under CC license
Rome, March 5th 2011
119. Defining a request
header in ESI
<esi:environment>
<esi:request_header name="Accept" value="text/vnd.odino.xhtml"/>
</esi:environment>
Content Negotiation
Licensed under CC license
Rome, March 5th 2011
125. with the RAD framework
Symfony2
http://symfony-reloaded.org/
https://github.com/pminnieur/ServerBundle
Licensed under CC license
Rome, March 5th 2011
126. 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...
Licensed under CC license
Rome, March 5th 2011
137. Response for fragments
text/vnd.xhesiml+xml
<div>
....
</div>
<span>
<esi ... />
</span>
Licensed under CC license
Rome, March 5th 2011
138. Client
Reverse proxy
Supporting
all the ESI
ESI processor specification
http://www.w3.org/TR/esi-lang
Application
Licensed under CC license
Rome, March 5th 2011
140. Is that a problem?
Licensed under CC license
Rome, March 5th 2011
141. Client
Reverse proxy
Supporting
all the ESI
ESI processor specification
http://www.w3.org/TR/esi-lang
Application
Licensed under CC license
Rome, March 5th 2011
142. Varnish is there
for a reason
Licensed under CC license
Rome, March 5th 2011
145. Ready to include a resource
with our custom hypermedia
format
<esi:environment>
<esi:request_header name="Accept" value="text/vnd.blablabla"/>
</esi:environment>
Licensed under CC license
Rome, March 5th 2011
146. But don't screw
everything forgetting
the remaining parts of
HATEOAS, like
hypermedia relations.
http://www.slideshare.net/adorepump/hateoas-the-confusing-bit-from-rest
http://tech.groups.yahoo.com/group/rest-discuss/message/17011
Licensed under CC license
Rome, March 5th 2011
167. "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
Licensed under CC license
Rome, March 5th 2011
168. Put a bit of
REST
everywhere
Licensed under CC license
Rome, March 5th 2011
174. Agile development
vs
REST
Licensed under CC license
Rome, March 5th 2011
175. Agile development
vs
REST
mmmmmmmmmmmm................
http://www.odino.org/288/restful-and-agile-love-hate-love
Licensed under CC license
Rome, March 5th 2011
190. Then people got mad
Licensed under CC license
Rome, March 5th 2011
191. A disclaimer
in peace
Rome, March 5th 2011
Licensed under CC license
Rome, March 5th 2011
192. JSON does not suck. At all.
http://www.slideshare.net/Wombert/xml-versus-the-new-kids-on-the-block-phpbnl11-20110129
Licensed under CC license
Rome, March 5th 2011
193. Varnish
does not suck. At all.
Licensed under CC license
Rome, March 5th 2011
194. HTML5
does not suck. At all.
http://www.html5rocks.com/
Licensed under CC license
Rome, March 5th 2011
195. OrientDB
rocks
Ask Luca Garulli, he might be in this room
http://www.orientechnologies.com/
Licensed under CC license
Rome, March 5th 2011
196. Everything is a tradeoff
Licensed under CC license
Rome, March 5th 2011
198. David Zuelke
knows best
Licensed under CC license
Rome, March 5th 2011
199. Design HTTP interfaces
and RESTful webservices
http://www.slideshare.net/Wombert/designing-http-interfaces-and-restful-web-services-phpbnl11-20110128
Licensed under CC license
Rome, March 5th 2011
200. Others
know best
Licensed under CC license
Rome, March 5th 2011
201. 300 RESTful boring slides :)
http://www.slideshare.net/guilhermecaelum/rest-in-practice
REST as the DBMS of the web
http://www.slideshare.net/dnene/rest-representational-state-transfer-explained
Licensed under CC license
Rome, March 5th 2011