Académique Documents
Professionnel Documents
Culture Documents
REST
(Representational State Transfer)
Roger L. Costello Timothy D. Kehoe
Overview
The Web's simple set of operations, i.e., the Web's API The Web's fundamental components REST Questions and Answers The REST design pattern (summary) References
- The user types in at his browser: http://www.amazon.com - The browser software creates an HTTP header (no payload) - The HTTP header identifies: - The desired action: GET ("get me resource") - The target machine (www.amazon.com)
POST //HTTP/1.1 POST HTTP/1.1 Host: http://www.amazon.com Host: http://www.amazon.com Book: Da Vince Code Credit Card: Visa Number: 123-45-6789 Expiry: 12-04-06
- The user fills in the Web page's form - The browser software creates an HTTP header with a payload comprised of the form data - The HTTP header identifies: - The desired action: POST ("here's some update info") - The target machine (amazon.com) - The payload contains: - The data being POSTed (the form data)
Book: Da Vince Code Credit Card: Visa Number: 123-45-6789 Expiry: 12-04-06
This information (the HTTP data) is called the HTTP header Amazon Web Server
Item: Woodworking set Credit Card: Visa Number: 123-45-6789 Expiry: 12-04-06
The firewall decides whether an HTTP message should pass through All decisions are based purely upon the HTTP header. The firewall never looks in the payload. This is fundamental! This message is rejected!
FIREWALL
10
All these components base their decisions and actions purely upon information in the HTTP header. "Thou shalt never peek inside the HTTP payload!"
11
Web Components Operate using only Information found in the HTTP Header!
HTTP Header
eck Ch is ! th
Component
HTTP Payload
Web Message
12
Letter Analogy
Why do Web components base their decisions solely on information in the HTTP header? My company has a receiving warehouse. All letters and packages go there first, and from there they are distributed. No one in the receiving warehouse may look inside any letter or package. All decisions about what to do with letters and packages must be made purely by looking at the addressing on the outside. Any attempt to peek inside of letters and packages is a violation of Federal Law (U.S.).
13
REST
14
What is REST?
" REST " was coined by Roy Fielding in his Ph.D. dissertation [1] to describe a design pattern for implementing networked systems.
[1] http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
15
Resource
The Client references a Web resource using a URL. A representation of the resource is returned (in this case as an HTML document). The representation (e.g., Boeing747.html) places the client in a new state. When the client selects a hyperlink in Boeing747.html, it accesses another resource. The new representation places the client application into yet another state. Thus, the client application transfers state with each resource representation.
16
17
18
19
Learn by Example
The REST design pattern is best explained with an example. I will present an example of a company deploying three Web services using the REST design pattern.
20
21
Parts List
Web Server
Part Data
HTTP POST
PO (HTML/XML)
PO
URL to submitted PO
22
23
REST Fundamentals
Create a resource for every service. Identify each resource using a URL.
24
Note that the parts list has links to get detailed info about each part. This is a key feature of the REST design pattern. The client transfers from one state to the next by examining and choosing from among the alternative URLs in the response document.
25
REST Fundamentals
The data that a Web service returns should link to other data. Thus, design your data as a network of information. Contrast with OO design, which says to encapsulate information.
26
27
Again observe how this data is linked to still more data - the specification for this part may be found by traversing the hyperlink. Each response document allows the client to drill down to get more detailed information.
28
29
Question
What if Parts Depot has a million parts, will there be a million static pages? For example: http://www.parts-depot/parts/000000 http://www.parts-depot/parts/000001 ... http://www.parts-depot/parts/999999
30
Answer
We need to distinguish between a logical and a physical entity. The above URLs are logical. They express what resource is desired. They do not identify a physical object. The advantage of using a logical identifier (URL) is that changes to the underlying implementation of the resource will be transparent to clients (that's loose coupling!). Quite likely, Parts Depot will store all parts data in a database. Code at the Parts Depot web site will receive each logical URL request, parse it to determine which part is being requested, query the database, and generate the part response document to return to the client.
31
Answer (cont.)
Contrast the above logical URLs with these physical URLs: http://www.parts-depot/parts/000000.html http://www.parts-depot/parts/000001.html ... http://www.parts-depot/parts/999999.html These URLs are clearly pointing to physical (HTML) pages. If there are a million parts it will not be very attractive to have a million static pages. Furthermore, changes to how these parts data is represented will effect all clients that were using the old representation.
32
Question
What if I have a complex query? For example: Show me all parts whose unit cost is under $0.50 and for which the quantity is less than 10 How would you do that with a simple URL?
33
Answer
For complex queries, Parts Depot will provide a service (resource) for a client to retrieve a form that the client then fills in. When the client hits "Submit" the browser will gather up the clients responses and generate a URL based on the responses. Thus, oftentimes the client doesn't generate the URL (think about using Amazon - you start by entering the URL to amazon.com; from then on you simply fill in forms, and the URLs are automatically created for you).
34
35
36
37
38
References
39
References
Paul Prescod has written several excellent articles on REST:
Second Generation Web Services
http://www.xml.com/pub/a/2002/02/06/rest.html