The Rest Architectural Style

10,337 views

Published on

Introduction to the REST architectural style with an example API - SOFT

Published in: Technology

The Rest Architectural Style

  1. 1. The REST Architectural Style Robert Wilson, March 2009 [email_address]
  2. 2. <ul><ul><li> Who has heard of REST ? </li></ul></ul>
  3. 3. REST is <ul><li>An acronym from: Representational State Transfer </li></ul><ul><li>An architectural style that is derived by applying a set constraints to the elements of a system so the system exhibits certain properties such as loose coupling and scalability </li></ul><ul><li>Defined by Roy T. Fielding, PhD in his PhD dissertation, Chapter 5 Representational State Transfer (REST) ‏ </li></ul><ul><li>Data-orientated, “ Unlike the distributed object style [ 31 ], where all data is encapsulated within and hidden by the processing components, the nature and state of an architecture's data elements is a key aspect of REST” Architectural Styles and the Design of Network-based Software Architectures Roy Thomas Fielding, 2000: PhD dissertation, Chapter 5 Representational State Transfer (REST) </li></ul>
  4. 4. When can I use REST? <ul><li>For Web Services </li></ul><ul><ul><li>build your web service using the REST style </li></ul></ul><ul><ul><li>alternative to some of WS-*, not a replacement for WS-* </li></ul></ul><ul><li>Clients interfacing to public REST APIs </li></ul><ul><ul><li>e.g. Amazon S3 REST API, Google Data APIs </li></ul></ul><ul><ul><li>63 percent public APIs have a REST like interface http://www.infoq.com/presentations/Open-API-John-Musser </li></ul></ul><ul><li>From Rich Internet Applications (RIAs) ‏ </li></ul><ul><ul><li>client sends AJAX requests to a REST interface using a JavaScript library e.g. jQuery, Dojo (JsonRestStore) or a framework like JavaFX or Silverlight </li></ul></ul><ul><ul><li>response (JSON, XML etc) is displayed on the client </li></ul></ul>
  5. 5. R & R <ul><li>Resources r </li></ul><ul><ul><li>an abstraction of information: a thing, an entity, an event or “any information that can be named” </li></ul></ul><ul><ul><li>identified by URIs, URIs should contain nouns, not verbs </li></ul></ul><ul><li>Representations r </li></ul><ul><ul><li>information retrieved from a resource </li></ul></ul><ul><ul><li>resource data plus meta-data with control data (in HTTP this is the message content and headers) ‏ </li></ul></ul><ul><ul><li>possible in more than one media type, i.e. a resource could be represented in HTML, XML, JSON, Atom, XHTML or RDF </li></ul></ul><ul><ul><li>the current resource state containing data and possibly URIs (links). The URIs are the relationships and application state transitions available from the current representation </li></ul></ul>
  6. 6. The REST Constraints <ul><li>Client-Server architectural style </li></ul><ul><li>Stateless Server </li></ul><ul><ul><li>session state is kept on the client </li></ul></ul><ul><li>Cacheable </li></ul><ul><ul><li>data is labelled as cacheable or non-cacheable </li></ul></ul>
  7. 7. The REST Constraints cont. <ul><li>The Uniform interface is </li></ul><ul><ul><li>“ The central feature that distinguishes the REST architectural style from other network-based styles is its emphasis on a uniform interface between components” Architectural Styles and the Design of Network-based Software Architectures Roy Thomas Fielding, 2000: PhD dissertation, Chapter 5 Representational State Transfer (REST) </li></ul></ul><ul><ul><li>for manipulating resources via URIs through a generic set of methods. A uniform interface reduces coupling compared to a services specific interface specification </li></ul></ul>
  8. 8. The REST Constraints cont. <ul><li>The Uniform interface is </li></ul><ul><ul><li>composed of four constraints: </li></ul></ul><ul><ul><ul><li>identification of resources </li></ul></ul></ul><ul><ul><ul><li>manipulation of resources through representations </li></ul></ul></ul><ul><ul><ul><li>self-descriptive messages – meta data & control data </li></ul></ul></ul><ul><ul><ul><li>hypermedia as the engine of application state - “the hypertext constraint” , i.e. links in the data for navigation through the application. This is one of the most important constraints </li></ul></ul></ul>
  9. 9. The REST Constraints cont. <ul><li>Layered system </li></ul><ul><li>Code-On-Demand – “optional constraint” </li></ul><ul><ul><li>client functionality extended through download of code or scripts </li></ul></ul><ul><li>The constraints will likely have design trade-offs, for example </li></ul><ul><ul><li>caching may improve performance but decrease reliability if stale data is served </li></ul></ul><ul><ul><li>a stateless server can increase information in each message & you now need to rely on the client to maintain state </li></ul></ul>
  10. 10. Web uniform interface semantics <ul><li>RFC2616 specifies HTTP intended method behaviour and semantics for common HTTP methods </li></ul><ul><li>Safe: no side-effects, e.g. does not change resource </li></ul><ul><li>Idempotent: “the side-effects of N > 0 identical requests is the same as for a single request” </li></ul>Method Operation on the resource Safe Idempotent POST create a new resource as subordinate No No GET retrieve a resource representation Yes Yes PUT modify (update) a resource or create a resource at the id No Yes DELETE delete a resource No Yes
  11. 11. Web API using REST principles <ul><li>Define the resources </li></ul><ul><li>Design the resource representations </li></ul><ul><li>HTTP Protocol considerations </li></ul><ul><ul><li>response status codes </li></ul></ul><ul><ul><li>caching strategy </li></ul></ul><ul><ul><li>encodings </li></ul></ul><ul><li>Security </li></ul>
  12. 12. Walk through beginnings of SOFT <ul><li>SOFT – Simple Online Family Tree </li></ul><ul><li>Fictitious new web service </li></ul><ul><li>Walk through part of the design of the Web API </li></ul>
  13. 13. Web API using REST principles <ul><li>Define the resources </li></ul><ul><li>Design the resource representations </li></ul><ul><li>HTTP Protocol considerations </li></ul><ul><ul><li>response status codes </li></ul></ul><ul><ul><li>caching strategy </li></ul></ul><ul><ul><li>encodings </li></ul></ul><ul><li>Security </li></ul>
  14. 14. SOFT resources <ul><li>Candidate resources are: </li></ul>family-trees mother family-tree father people brother person sister relations spouse relation siblings children child
  15. 15. Web API using REST principles <ul><li>Define the resources </li></ul><ul><li>Design the resource representations </li></ul><ul><li>HTTP Protocol considerations </li></ul><ul><ul><li>response status codes </li></ul></ul><ul><ul><li>caching strategy </li></ul></ul><ul><ul><li>encodings </li></ul></ul><ul><li>Security </li></ul>
  16. 16. SOFT Resource Representations <ul><li>Lets elicit some of them by working through example scenarios of request response messages across the uniform interface </li></ul><ul><li>Our initial URL will be </li></ul><ul><ul><li>http://soft.example.org/family-trees </li></ul></ul><ul><li>The server will create the hierarchy underneath this URL so client does not need to know the structure as it will be given it by the server in the representations – this avoids coupling between client & server over the hierarchy structure </li></ul>
  17. 17. SOFT Resource Representations <ul><li>First off create a family-tree with the request: </li></ul><ul><ul><ul><li>POST /family-trees HTTP 1.1 </li></ul></ul></ul><ul><ul><ul><li>Host: soft.example.org </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/xml </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul></ul></ul><ul><ul><ul><li><familyTree xmlns=&quot;http://soft.example.org/family-trees&quot; > </li></ul></ul></ul><ul><ul><ul><li><name>The Addams Family Tree</name> </li></ul></ul></ul><ul><ul><ul><li><createdBy>Gomez Addams</createdBy> </li></ul></ul></ul><ul><ul><ul><li></familyTree> </li></ul></ul></ul><ul><li>Response: </li></ul><ul><ul><ul><li>201 Created </li></ul></ul></ul><ul><ul><ul><li>Location: http://soft.example.org/family-trees/0008 </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/xml </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul></ul></ul><ul><ul><ul><li><familyTree xmlns=&quot;http://soft.example.org/family-trees&quot; xml:base=&quot;http://soft.example.org/family-trees/0008/&quot;> </li></ul></ul></ul><ul><ul><ul><li><name>The Addams Family Tree</name> </li></ul></ul></ul><ul><ul><ul><li><createdBy>Gomez Addams</createdBy> </li></ul></ul></ul><ul><ul><ul><li><link rel=&quot;edit&quot; type=&quot;application/xml&quot; href=&quot;&quot; title=&quot;FamilyTree&quot;/> </li></ul></ul></ul><ul><ul><ul><li><link rel=&quot;related&quot; type=&quot;application/xml&quot; href=&quot;people&quot; title=&quot;People&quot;/> </li></ul></ul></ul><ul><ul><ul><li></familyTree> </li></ul></ul></ul>
  18. 18. Resource Representations cont. <ul><ul><ul><li>In the previous response the link element with the edit attribute is for editing, the href is relative to xml:base ( the link element is borrowed from the atom:link element) </li></ul></ul></ul><ul><li>From the previous response using the link element with the title attribute “People”, its relative href & the xml:base attribute we can now create an initial person with the request: </li></ul><ul><ul><ul><li>POST /family-trees/0008/people HTTP 1.1 </li></ul></ul></ul><ul><ul><ul><li>Host: soft.example.org </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/xml </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul></ul></ul><ul><ul><ul><li><person xmlns=&quot;http://soft.example.org/family-trees&quot;> </li></ul></ul></ul><ul><ul><ul><li><firstName>Morticia</firstName> </li></ul></ul></ul><ul><ul><ul><li><lastName>Addams</lastName> </li></ul></ul></ul><ul><ul><ul><li><birth>19800101</birth> </li></ul></ul></ul><ul><ul><ul><li><sex>F</sex> </li></ul></ul></ul><ul><ul><ul><li></person> </li></ul></ul></ul>
  19. 19. Resource Representations cont. <ul><li>Response: </li></ul><ul><ul><ul><li>201 Created </li></ul></ul></ul><ul><ul><ul><li>Location: http://soft.example.org/family-trees/0008/people/1234 </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/xml </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul></ul></ul><ul><ul><ul><li><person xmlns=&quot;http://soft.example.org/family-trees&quot; </li></ul></ul></ul><ul><ul><ul><li>xml:base &quot;http://soft.example.org/family-trees/0008/people/1234/&quot;> </li></ul></ul></ul><ul><ul><ul><li><firstName>Morticia</firstName> </li></ul></ul></ul><ul><ul><ul><li><lastName>Addams</lastName> </li></ul></ul></ul><ul><ul><ul><li><birth>19800101</birth> </li></ul></ul></ul><ul><ul><ul><li><sex>F</sex> </li></ul></ul></ul><ul><ul><ul><li><link rel=&quot;edit&quot; type=&quot;application/xml&quot; href=&quot;&quot; title=&quot;Person&quot;/> </li></ul></ul></ul><ul><ul><ul><li><link rel=&quot;related&quot; type=&quot;application/xml&quot; href=&quot;relations&quot; title=&quot;Relations&quot;/> </li></ul></ul></ul><ul><ul><ul><li></person> </li></ul></ul></ul><ul><ul><ul><li>with link elements for editing Morticia and Morticia’s relations </li></ul></ul></ul>
  20. 20. Resource Representations cont. <ul><li>After creating two extra people who are Morticia’s mother and brother, add them as relations of Moritica: </li></ul><ul><ul><ul><li>POST /family-trees/0008/people/1234/relations HTTP 1.1 </li></ul></ul></ul><ul><ul><ul><li>Host: soft.example.org </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/x-www-form-urlencoded </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li>role=mother&person=http://soft.example.org/family-trees/0008/people/2344 </li></ul></ul></ul><ul><ul><ul><li>201 Created </li></ul></ul></ul><ul><ul><ul><li>Location: http://soft.example.org/family-trees/0008/people/1234/relations/mother </li></ul></ul></ul><ul><ul><ul><li>Content-Length: 0 </li></ul></ul></ul><ul><ul><ul><li>POST /family-trees/0008/people/1234/relations HTTP 1.1 </li></ul></ul></ul><ul><ul><ul><li>Host: soft.example.org </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/x-www-form-urlencoded </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li>role=brother&person=http://soft.example.org/family-trees/0008/people/5588 </li></ul></ul></ul><ul><ul><ul><li>201 Created </li></ul></ul></ul><ul><ul><ul><li>Location: http://soft.example.org/family-trees/0008/people/1234/relations/brothers/5588 </li></ul></ul></ul><ul><ul><ul><li>Content-Length: 0 </li></ul></ul></ul>
  21. 21. Resource Representations cont. <ul><li>If we GET Morticia’s relations using the edit link from the initial Post response using: </li></ul><ul><ul><ul><li>GET /family-trees/0008/people/1234/relations HTTP 1.1 </li></ul></ul></ul><ul><ul><ul><li>Host: soft.example.org </li></ul></ul></ul><ul><li>Response: </li></ul><ul><ul><ul><li>200 OK </li></ul></ul></ul><ul><ul><ul><li>Location: http://soft.example.org/family-trees/0008/people/1234/relations </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/xml </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li><relations xmlns=&quot;http://soft.example.org/family-trees&quot; </li></ul></ul></ul><ul><ul><ul><li>xml:base &quot;http://soft.example.org/family-trees/0008/people/1234/relations/&quot;> </li></ul></ul></ul><ul><ul><ul><li><link rel=&quot;edit&quot; type=&quot;application/xml&quot; href=&quot;&quot; title=&quot;Relations&quot;/> </li></ul></ul></ul><ul><ul><ul><li><relation role=&quot;mother&quot; person=&quot;http://soft.example.org/family-trees/0008/people/2234&quot;> </li></ul></ul></ul><ul><ul><ul><li><link rel=&quot;edit&quot; type=&quot;application/xml&quot; href=&quot;mother&quot; title=&quot;Mother&quot;/> </li></ul></ul></ul><ul><ul><ul><li></relation> </li></ul></ul></ul><ul><ul><ul><li><relation role=&quot;brother&quot; person=&quot;http://soft.example.org/family-trees/0008/people/5588&quot;> </li></ul></ul></ul><ul><ul><ul><li><link rel=&quot;edit&quot; type=&quot;application/xml&quot; href=&quot;brothers/5588&quot; title=&quot;Brother&quot;/> </li></ul></ul></ul><ul><ul><ul><li></relation> </li></ul></ul></ul><ul><ul><ul><li></relations> </li></ul></ul></ul>
  22. 22. Resource Representations cont. <ul><li>Lets modify Morticia’s mother with a PUT request: </li></ul><ul><ul><ul><li>PUT /family-trees/0008/people/1234/relations/mother HTTP 1.1 </li></ul></ul></ul><ul><ul><ul><li>Host: soft.example.org </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/x-www-form-urlencoded </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li>role=mother&person=http://soft.example.org/family-trees/0008/people/5556 </li></ul></ul></ul><ul><li>Response: </li></ul><ul><ul><ul><li>200 OK </li></ul></ul></ul><ul><ul><ul><li>Location: http://soft.example.org/family-trees/0008/people/1234/relations/mother </li></ul></ul></ul><ul><ul><ul><li>Content-Type: application/xml </li></ul></ul></ul><ul><ul><ul><li>Content-Length: … </li></ul></ul></ul><ul><ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul></ul></ul><ul><ul><ul><li><relation xmlns=&quot;http://soft.example.org/family-trees&quot; </li></ul></ul></ul><ul><ul><ul><li>xml:base &quot;http://soft.example.org/family-trees/0008/people/1234/relations/mother&quot; </li></ul></ul></ul><ul><ul><ul><li>role=&quot;mother&quot; person=&quot;http://soft.example.org/family-trees/0008/people/5556&quot;> </li></ul></ul></ul><ul><ul><ul><li><link rel=&quot;edit&quot; type=&quot;application/xml&quot; href=&quot;&quot; title=&quot;Mother&quot;/> </li></ul></ul></ul><ul><ul><ul><li></relation> </li></ul></ul></ul>
  23. 23. Resource Representations cont. <ul><li>Lets delete Morticia’s brother with a DELETE request: </li></ul><ul><ul><ul><li>DELETE /family-trees/0008/people/1234/relations/brothers/5588 HTTP 1.1 </li></ul></ul></ul><ul><ul><ul><li>Host: soft.example.org </li></ul></ul></ul><ul><li>Response: </li></ul><ul><ul><ul><li>200 OK </li></ul></ul></ul>
  24. 24. Web API using REST principles <ul><li>Define the resources </li></ul><ul><li>Design the resource representations </li></ul><ul><li>HTTP Protocol considerations </li></ul><ul><ul><li>response status codes </li></ul></ul><ul><ul><li>caching strategy </li></ul></ul><ul><ul><li>encodings </li></ul></ul><ul><li>Security </li></ul>
  25. 25. SOFT response status codes <ul><li>Specify the HTTP method response codes from SOFT </li></ul><ul><li>POST </li></ul><ul><ul><li>on success will return 201 Created and the Location: header will have the URI of the new resource </li></ul></ul><ul><ul><li>failure code: 400 Bad Request </li></ul></ul><ul><li>GET </li></ul><ul><ul><li>on success will return 200 OK </li></ul></ul><ul><ul><li>failure codes: 400 Bad Request, 404 Not Found </li></ul></ul>
  26. 26. SOFT response status codes cont. <ul><li>PUT </li></ul><ul><ul><li>on success will return 200 OK </li></ul></ul><ul><ul><li>failure codes: 400 Bad Request, 404 Not Found, 409 Conflict </li></ul></ul><ul><li>DELETE </li></ul><ul><ul><li>on success will return 200 OK </li></ul></ul><ul><ul><li>failure codes: 400 Bad Request, 404 Not Found, 410 Gone </li></ul></ul><ul><li>If security is applied and the user is not authenticated then the response is 401 Unauthorised </li></ul><ul><li>see Reference for RFC2616, Ch 10 Status Code Definitions </li></ul>
  27. 27. Consider SOFT’s Caching Strategy <ul><li>Cache Topology </li></ul><ul><ul><li>Private Caches – in the Web browser </li></ul></ul><ul><ul><li>Proxy Caches – proxy server for scalability </li></ul></ul><ul><li>Cache Processing </li></ul><ul><ul><li>Server specifies expiration time using Cache-Control (HTTP/1.1) or Expires (HTTP/1.0) headers </li></ul></ul><ul><ul><li>Revalidation using a “conditional GET”, only gets a new copy of the document if it has changed , client can send either header: </li></ul></ul><ul><ul><ul><li>If-Modified-Since, send date that client has as Last-Modified date, only resolution to the second </li></ul></ul></ul><ul><ul><ul><li>If-None-Match, send the ETag value that was sent from the server back to the server to see if the cache stale </li></ul></ul></ul>
  28. 28. Consider HTTP Encodings for SOFT <ul><li>Content-Encoding, encoding of the data by </li></ul><ul><ul><li>compression (gzip ...) , encryption (PGP…) </li></ul></ul><ul><li>Transfer-Encoding, encoding to change the way the data is transferred: </li></ul><ul><ul><li>chunked, send the data in chunks , don’t specify a content length </li></ul></ul>
  29. 29. Web API using REST principles <ul><li>Define the resources </li></ul><ul><li>Design the resource representations </li></ul><ul><li>HTTP Protocol considerations </li></ul><ul><ul><li>response status codes </li></ul></ul><ul><ul><li>caching strategy </li></ul></ul><ul><ul><li>encodings </li></ul></ul><ul><li>Security </li></ul>
  30. 30. SOFT Security <ul><li>Could use </li></ul><ul><ul><li>basic authentication, need to use HTTPS to encrypt the username password information in the header </li></ul></ul><ul><ul><li>digest authentication, MD5 checksum of the username, password so these are not sent in clear text </li></ul></ul><ul><ul><li>HMAC: Keyed-Hashing for Message Authentication , a hash of selected elements from the request with a secret key, used by Amazon </li></ul></ul><ul><ul><li>http://docs.amazonwebservices.com/AmazonS3/2006-03-01/index.html?RESTAuthentication.html </li></ul></ul><ul><li>For information that needs to be secure use HTTPS to encrypt the message which ever method above is used. Note: As HTTPS encrypts the message an intermediary will not know to cache the message, i.e. no caching by intermediaries when using HTTPS </li></ul>
  31. 31. Worked examples <ul><li>For other examples see the references </li></ul><ul><ul><li>How to GET a Cup of Coffee by Jim Webber, Savas Parastatidis & Ian Robinson Oct 02, 2008 </li></ul></ul><ul><ul><li>http://www.infoq.com/articles/webber-rest-workflow </li></ul></ul><ul><ul><li>msdn, A Guide to Designing and Building RESTful Web Services with WCF 3.5, Aaron Skonnard, Oct 2008 </li></ul></ul><ul><ul><li>http://msdn.microsoft.com/en-us/library/dd203052.aspx </li></ul></ul><ul><ul><li>Using REST to aid WS-* - building a RESTful SOA Registry </li></ul></ul><ul><ul><li>http://www.infoq.com/presentations/rest-soa-registry </li></ul></ul>
  32. 32. Java Toolkits/Frameworks <ul><li>Java Community Process - JSR 311: JAX-RS: The Java TM API for RESTful Web Services , server side specification, annotation based </li></ul><ul><li>Jersey, </li></ul><ul><ul><li>Sun production ready reference implementation of JSR311 </li></ul></ul><ul><li>RESTlet </li></ul><ul><ul><li>early REST framework, implements JSR311 and has its own class based hierarchy </li></ul></ul><ul><li>RESTEasy from Jboss </li></ul><ul><ul><li>implements JSR311, also includes a client framework </li></ul></ul><ul><li>Apache CXF 2.1 </li></ul>
  33. 33. Java Toolkits/Frameworks cont. <ul><li>Spring MVC 3.0.0M1 </li></ul><ul><ul><li>3.0.0 is a milestone release, GA in Q2 2009 </li></ul></ul><ul><ul><li>REST was highly requested as a feature to be included in 3.0 by the Spring user community </li></ul></ul><ul><ul><li>3.0.0 has better support for REST than the current version </li></ul></ul><ul><ul><li>can integrate Jersey, RESTEasy, CXF, RESTlet with the current version of Spring </li></ul></ul>
  34. 34. Toolkits/Frameworks <ul><li>Microsoft Windows Communication Framework 3.5 (WCF) ‏ </li></ul><ul><li>IBM WebSphere sMash </li></ul><ul><ul><li>previously know as Project Zero </li></ul></ul><ul><li>Ruby on Rails </li></ul>
  35. 35. Concluding REST <ul><li>Think of the resources: </li></ul><ul><ul><li>Any information can be a resource </li></ul></ul><ul><ul><li>Their data format (representations with URIs) and </li></ul></ul><ul><ul><li>Manipulation through a uniform interface </li></ul></ul><ul><li>If REST constraints aren’t needed then don’t worry about them. An API that has all the REST constraints is a RESTful API. </li></ul>
  36. 36. <ul><li>QUESTIONS? </li></ul>
  37. 37. References <ul><li>Architectural Styles and the Design of Network-based Software Architectures Roy Thomas Fielding, 2000: PhD dissertation, Chapter 5 Representational State Transfer (REST) , http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm Chapter 6 Experience and Evaluation, http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm </li></ul><ul><li>RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1 June 1999, R .Fielding et al. </li></ul><ul><ul><li>http://www.rfc-editor.org/rfc/rfc2616.txt </li></ul></ul><ul><li>A little REST and Relaxation, Roy T. Fielding, Ph.D. </li></ul><ul><ul><li>http://www.slideshare.net/royfielding/a-little-rest-and-relaxation </li></ul></ul><ul><li>IBM, RESTful Web services: The basics by Alex Rodriguez, 06 Nov 2008 </li></ul><ul><ul><li>http://www.ibm.com/developerworks/webservices/library/ws-restful/index.html </li></ul></ul><ul><li>How to GET a Cup of Coffee by Jim Webber, Savas Parastatidis & Ian Robinson Oct 02, 2008 </li></ul><ul><ul><li>http://www.infoq.com/articles/webber-rest-workflow </li></ul></ul><ul><li>REST Anti-Patterns by Stefan Tilkov, http://www.infoq.com/articles/rest-anti-patterns </li></ul><ul><li>REST: A Pragmatic Introduction to the Web's Architecture by Stefan Tilkov Jan 29 2009 </li></ul><ul><ul><li>http://www.infoq.com/presentations/qcon-tilkov-rest-intro </li></ul></ul><ul><ul><li>http://www.slideshare.net/deimos/stefan-tilkov-pragmatic-intro-to-rest </li></ul></ul><ul><li>msdn, A Guide to Designing and Building RESTful Web Services with WCF 3.5, Aaron Skonnard, Oct 2008 </li></ul><ul><ul><li>http://msdn.microsoft.com/en-us/library/dd203052.aspx </li></ul></ul><ul><li>Ian Robinson discusses REST, WS-* and Implementing an SOA Jan 26, 2009 </li></ul><ul><ul><li>http://www.infoq.com/interviews/robinson-rest-ws-soa-implementation </li></ul></ul><ul><li>http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven </li></ul><ul><li>http://www.xfront.com/REST.ppt </li></ul>
  38. 38. References cont. <ul><li>http://www.slideshare.net/ozten/rest-vs-soap-yawn </li></ul><ul><li>http://www.slideshare.net/stevenn/devoxx-2008-rest-in-peace-presentation-831560 </li></ul><ul><li>http://www.slideshare.net/sallamar/pragmatic-rest-presentation </li></ul><ul><li>http://www.slideshare.net/guestb2ed5f/scalable-reliable-secure-rest </li></ul><ul><li>http://www.slideshare.net/swamy_g/rest-overview </li></ul><ul><li>http://www.slideshare.net/deimos/steve-vinoski-rest-and-reuse-and-serendipity </li></ul><ul><li>http://www.slideshare.net/calamitas/restful-best-practices </li></ul><ul><li>Code Talks: Demonstrating the &quot;ilities&quot; of REST </li></ul><ul><ul><li>http://wanderingbarque.com/presentations/qcon2007.ppt </li></ul></ul><ul><li>http://bitworking.org/news/125/REST-and-WS </li></ul><ul><li>Amazon S3, http://docs.amazonwebservices.com/AmazonS3/latest/RESTAPI.html </li></ul><ul><li>Google Data API, http://code.google.com/apis/gdata/docs/2.0/basics.html </li></ul><ul><li>Yahoo Groups: rest-discuss, http://tech.groups.yahoo.com/group/rest-discuss </li></ul><ul><li>www.infoq.com/rest </li></ul><ul><li>HTTP :The Definitive Guide by David Gourley, Brian Totty </li></ul><ul><li>URI Templates </li></ul><ul><ul><li>http://bitworking.org/projects/URI-Templates/spec/draft-gregorio-uritemplate-03.html </li></ul></ul><ul><ul><li>http://www.ibm.com/developerworks/web/library/wa-uri/ </li></ul></ul><ul><ul><li>http://www.ietf.org/rfc/rfc3986.txt </li></ul></ul><ul><li>http://www.infoq.com/presentations/Open-API-John-Musser </li></ul><ul><li>http://www.infoq.com/presentations/rest-soa-registry </li></ul>
  39. 39. References cont. <ul><li>Jersey related: </li></ul><ul><ul><li>https://jersey.dev.java.net/ http://weblogs.java.net/blog/caroljmcdonald/ http://blogs.sun.com/theaquarium/tags/Jersey </li></ul></ul><ul><ul><li>http://wiki.glassfish.java.net/attach/RESTfulWebServicesDevelopersGuide/p6.html </li></ul></ul><ul><li>REST presentation from the Developing Rich Internet Applications with Spring course by SpringSource </li></ul><ul><li>http://www.jroller.com/Solomon/entry/jax_rs_spring_integration </li></ul><ul><li>http://www.codemonkeyism.com/wp-content/uploads/2008/10/web-entwicklung-2008_english.pdf </li></ul><ul><li>http://www.ibm.com/developerworks/library/i-zero1/ </li></ul><ul><li>http://hinchcliffe.org/archive/2006/09/10/9275.aspx </li></ul><ul><li>http://www.infoq.com/interviews/Spring-3.0-Rod-Johnson </li></ul><ul><li>How Ruby on Rails and REST go together By Rich Seeley, News Writer 21 May 2008 | SearchSOA.com </li></ul><ul><ul><li>http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci1314640,00.html </li></ul></ul><ul><li>Security </li></ul><ul><ul><li>HTTP Authentication: Basic and Digest Access Authentication, J .Fransks et al. June 1999 </li></ul></ul><ul><ul><ul><li>http://www.ietf.org/rfc/rfc2617.txt </li></ul></ul></ul><ul><ul><li>http://kswenson.wordpress.com/2008/12/11/rest-assured-oauth-security/ </li></ul></ul><ul><ul><ul><li>http://msdn.microsoft.com/en-us/library/dd203052.aspx </li></ul></ul></ul><ul><ul><li>Atom </li></ul></ul><ul><ul><ul><li>The Atom Syndication Format , http://www.ietf.org/rfc/rfc4287.txt </li></ul></ul></ul><ul><ul><ul><li>The Atom Publishing Protocol , http://www.ietf.org/rfc/rfc5023.txt </li></ul></ul></ul><ul><ul><ul><li>http://www.ibm.com/developerworks/xml/library/x-atom10.html </li></ul></ul></ul><ul><li>ancestry.com.au </li></ul><ul><li>THE END </li></ul>

×