ERRest: the Basics

1,462 views
1,304 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,462
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

ERRest: the Basics

  1. 1. MONTREAL JUNE 30, JULY 1ST AND 2ND 2012ERRest: The BasicsPascal RobertMacTI.ca
  2. 2. Our agenda• What is REST ?• Basic ERRest concepts• Our Model of the day• Routes for basic operations
  3. 3. REST ?• REpresentational State Transfer• Architecture style, not a protocol or format
  4. 4. REST and URLs• Goal: having consistent and logical URLs that have a meaning • GitHub is good example: • https://github.com/projectwonder/wonder • https://github.com/projectwonder/wonder/admin
  5. 5. REST and HTTP protocol• Goal: to use as much as possible the HTTP protocol • Use HTTP verbs • Use headers • Use redirection • Read the spec (RFC 2616)!
  6. 6. REST and stateless• Goal: to be stateless • Avoid storing stuff in sessions • Back button friendly :-) • More scalable (Ramsey will disagree)
  7. 7. REST and representations• Goal: to deliver representations (JSON, XML, etc.) with the same URL • HTML view: https://github.com/projectwonder/wonder/commit/ 386d19e3080695d309e676d66db99e271c90dbab • Git patch view: https://github.com/projectwonder/wonder/ commit/386d19e3080695d309e676d66db99e271c90dbab.patch
  8. 8. HTTP verbs• Goal: to use the many HTTP verbs • Use GET to get representation of data • Use POST on a collection to create new data • Use PUT to update data • Use DELETE to delete data• Can use the other verbs (OPTIONS, etc.) too
  9. 9. HATEOAS• HATEOAS (Hypermedia As The Engine of Application State) is the "full" REST • Goal: doing the same as a browser (start page, follow links) • One endpoint, and links to other resources • Examples: Atom Publishing, CMIS, Google Docs APIs • Not currently supported by ERRest
  10. 10. ERRest concepts
  11. 11. Key concepts• Routes : the paths (URLs) to get/create/update/delete data• Controllers : based on a DirectAction class• Formats : the representations (JSON, XML, etc.)• Filters : which attributes are in and out
  12. 12. Routes• You register them in the REST request handler (/ra) • Handler class is: ERXRouteRequestHandler• Can have bindings in them • /ra/posts/{title:String} • /ra/posts/{post:Post}• Can register default (CRUD) routes in one step
  13. 13. Controllers• A controller is like a DirectAction class• A route is mapped to one method in a controller• Base classes: ERXRouteController and ERXDefaultRouteController
  14. 14. Formats• Format is the representation• Many formats are supported (JSON, XML, plist, etc.)• You can add your own• Base class: ERXFormat
  15. 15. Filters• Filtering is to specify whats in the object graph• Can have different filters per route and in/out • Useful to hide sensible information• You use ERXKeyFilter for filtering
  16. 16. CRUD• Extends from controller from ERXDefaultRouteController• Register your routes with restRequestHandler.addDefaultRoutes(Entity.ENTITY_NAME)
  17. 17. Lets create a REST service
  18. 18. The Model• Example will be a blog system• Entities: • BlogEntry • Author • Category
  19. 19. The Model
  20. 20. Project Setup
  21. 21. Adding basic routes
  22. 22. Basic routes• Adding an author• Adding a category• Adding a blog post• Fetching a blog post• Updating a blog post• Deleting a blog post
  23. 23. Basic routes setup and usage
  24. 24. Query arguments
  25. 25. ERXRestFetchSpecification• ERXRestFetchSpecification gives you automatic query arguments management• Built-in arguments: • sort=lastModified|desc,title|asc • batchSize=25&batch=1 • qualifier=title%3DWOWODC • Range=items%3D10-19
  26. 26. Manual query arguments• Same as direct actions: request().stringFormValueForKey• A "login" action is such an example
  27. 27. Query arguments demo
  28. 28. Tomorrow• HTML routes• Alias, non-EO and fake primary keys• Handling status codes• Handling redirections• Handling headers
  29. 29. MONTREAL JUNE 30, JULY 1ST AND 2ND 2012Q&A

×