SlideShare a Scribd company logo
1 of 29
Download to read offline
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012




ERRest: The Basics
Pascal Robert
MacTI.ca
Our agenda

•   What is REST ?

•   Basic ERRest concepts

•   Our Model of the day

•   Routes for basic operations
REST ?


•   REpresentational State Transfer

•   Architecture style, not a protocol or format
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
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)!
REST and stateless

•   Goal: to be stateless

    •   Avoid storing stuff in sessions

    •   Back button friendly :-)

    •   More scalable (Ramsey will disagree)
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
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
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
ERRest concepts
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
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
Controllers


•   A controller is like a DirectAction class

•   A route is mapped to one method in a controller

•   Base classes: ERXRouteController and ERXDefaultRouteController
Formats

•   Format is the representation

•   Many formats are supported (JSON, XML, plist, etc.)

•   You can add your own

•   Base class: ERXFormat
Filters

•   Filtering is to specify what's in the object graph

•   Can have different filters per route and in/out

    •   Useful to hide sensible information

•   You use ERXKeyFilter for filtering
CRUD


•   Extends from controller from ERXDefaultRouteController

•   Register your routes with
    restRequestHandler.addDefaultRoutes(Entity.ENTITY_NAME)
Let's create a REST service
The Model

•   Example will be a blog system

•   Entities:

    •   BlogEntry

    •   Author

    •   Category
The Model
Project Setup
Adding basic routes
Basic routes
•   Adding an author

•   Adding a category

•   Adding a blog post

•   Fetching a blog post

•   Updating a blog post

•   Deleting a blog post
Basic routes setup and usage
Query arguments
ERXRestFetchSpecification
•   ERXRestFetchSpecification gives you automatic query
    arguments management
•   Built-in arguments:
    •   sort=lastModified|desc,title|asc
    •   batchSize=25&batch=1
    •   qualifier=title%3D'WOWODC'
    •   Range=items%3D10-19
Manual query arguments


•   Same as direct actions: request().stringFormValueForKey

•   A "login" action is such an example
Query arguments demo
Tomorrow

• HTML routes
• Alias, non-EO and fake primary keys
• Handling status codes
• Handling redirections
• Handling headers
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012




Q&A

More Related Content

What's hot

CQ5 QueryBuilder - .adaptTo(Berlin) 2011
CQ5 QueryBuilder - .adaptTo(Berlin) 2011CQ5 QueryBuilder - .adaptTo(Berlin) 2011
CQ5 QueryBuilder - .adaptTo(Berlin) 2011
Alexander Klimetschek
 
Introduction to hibernate
Introduction to hibernateIntroduction to hibernate
Introduction to hibernate
hr1383
 
Expression Language in JSP
Expression Language in JSPExpression Language in JSP
Expression Language in JSP
corneliuskoo
 
Designing a JavaFX Mobile application
Designing a JavaFX Mobile applicationDesigning a JavaFX Mobile application
Designing a JavaFX Mobile application
Fabrizio Giudici
 

What's hot (20)

Apache Solr + ajax solr
Apache Solr + ajax solrApache Solr + ajax solr
Apache Solr + ajax solr
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
Solr workshop
Solr workshopSolr workshop
Solr workshop
 
Java and XML
Java and XMLJava and XML
Java and XML
 
CQ5 QueryBuilder - .adaptTo(Berlin) 2011
CQ5 QueryBuilder - .adaptTo(Berlin) 2011CQ5 QueryBuilder - .adaptTo(Berlin) 2011
CQ5 QueryBuilder - .adaptTo(Berlin) 2011
 
Mastering solr
Mastering solrMastering solr
Mastering solr
 
Jstl Guide
Jstl GuideJstl Guide
Jstl Guide
 
Ajax
AjaxAjax
Ajax
 
Class-based views with Django
Class-based views with DjangoClass-based views with Django
Class-based views with Django
 
Introduction to hibernate
Introduction to hibernateIntroduction to hibernate
Introduction to hibernate
 
Java and XML Schema
Java and XML SchemaJava and XML Schema
Java and XML Schema
 
Expression Language in JSP
Expression Language in JSPExpression Language in JSP
Expression Language in JSP
 
Hibernate Tips ‘n’ Tricks - 15 Tips to solve common problems
Hibernate Tips ‘n’ Tricks - 15 Tips to solve common problemsHibernate Tips ‘n’ Tricks - 15 Tips to solve common problems
Hibernate Tips ‘n’ Tricks - 15 Tips to solve common problems
 
JSP Standart Tag Lİbrary - JSTL
JSP Standart Tag Lİbrary - JSTLJSP Standart Tag Lİbrary - JSTL
JSP Standart Tag Lİbrary - JSTL
 
Designing a JavaFX Mobile application
Designing a JavaFX Mobile applicationDesigning a JavaFX Mobile application
Designing a JavaFX Mobile application
 
How to write easy-to-test JavaScript
How to write easy-to-test JavaScriptHow to write easy-to-test JavaScript
How to write easy-to-test JavaScript
 
Enterprise Search Solution: Apache SOLR. What's available and why it's so cool
Enterprise Search Solution: Apache SOLR. What's available and why it's so coolEnterprise Search Solution: Apache SOLR. What's available and why it's so cool
Enterprise Search Solution: Apache SOLR. What's available and why it's so cool
 
Java XML Parsing
Java XML ParsingJava XML Parsing
Java XML Parsing
 
Unsafe JAX-RS: Breaking REST API
Unsafe JAX-RS: Breaking REST APIUnsafe JAX-RS: Breaking REST API
Unsafe JAX-RS: Breaking REST API
 
Codegeneration With Xtend
Codegeneration With XtendCodegeneration With Xtend
Codegeneration With Xtend
 

Similar to ERRest: the Basics

Rapid API Development ArangoDB Foxx
Rapid API Development ArangoDB FoxxRapid API Development ArangoDB Foxx
Rapid API Development ArangoDB Foxx
Michael Hackstein
 
Real World REST with Atom/AtomPub
Real World REST with Atom/AtomPubReal World REST with Atom/AtomPub
Real World REST with Atom/AtomPub
Peter Keane
 
Introduction_Web_Technologies
Introduction_Web_TechnologiesIntroduction_Web_Technologies
Introduction_Web_Technologies
Deepak Raj
 
Solr Recipes Workshop
Solr Recipes WorkshopSolr Recipes Workshop
Solr Recipes Workshop
Erik Hatcher
 

Similar to ERRest: the Basics (20)

Rapid API Development ArangoDB Foxx
Rapid API Development ArangoDB FoxxRapid API Development ArangoDB Foxx
Rapid API Development ArangoDB Foxx
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
 
SilverStripe From a Developer's Perspective
SilverStripe From a Developer's PerspectiveSilverStripe From a Developer's Perspective
SilverStripe From a Developer's Perspective
 
Introduction to Python and Django
Introduction to Python and DjangoIntroduction to Python and Django
Introduction to Python and Django
 
Real World REST with Atom/AtomPub
Real World REST with Atom/AtomPubReal World REST with Atom/AtomPub
Real World REST with Atom/AtomPub
 
Entity Framework Core 1.x/2.x Advanced
Entity Framework Core 1.x/2.x AdvancedEntity Framework Core 1.x/2.x Advanced
Entity Framework Core 1.x/2.x Advanced
 
Building Software Backend (Web API)
Building Software Backend (Web API)Building Software Backend (Web API)
Building Software Backend (Web API)
 
WebDev Crash Course
WebDev Crash CourseWebDev Crash Course
WebDev Crash Course
 
Building RESTfull Data Services with WebAPI
Building RESTfull Data Services with WebAPIBuilding RESTfull Data Services with WebAPI
Building RESTfull Data Services with WebAPI
 
REST Methodologies
REST MethodologiesREST Methodologies
REST Methodologies
 
Introduction_Web_Technologies
Introduction_Web_TechnologiesIntroduction_Web_Technologies
Introduction_Web_Technologies
 
(ATS6-PLAT02) Accelrys Catalog and Protocol Validation
(ATS6-PLAT02) Accelrys Catalog and Protocol Validation(ATS6-PLAT02) Accelrys Catalog and Protocol Validation
(ATS6-PLAT02) Accelrys Catalog and Protocol Validation
 
Solr Recipes Workshop
Solr Recipes WorkshopSolr Recipes Workshop
Solr Recipes Workshop
 
QueryPath, Mash-ups, and Web Services
QueryPath, Mash-ups, and Web ServicesQueryPath, Mash-ups, and Web Services
QueryPath, Mash-ups, and Web Services
 
ASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiASP.NET Mvc 4 web api
ASP.NET Mvc 4 web api
 
Staying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHPStaying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHP
 
Html,CSS & UI/UX design
Html,CSS & UI/UX designHtml,CSS & UI/UX design
Html,CSS & UI/UX design
 
Php reports sumit
Php reports sumitPhp reports sumit
Php reports sumit
 
Leveraging the Chaos tool suite for module development
Leveraging the Chaos tool suite  for module developmentLeveraging the Chaos tool suite  for module development
Leveraging the Chaos tool suite for module development
 
EAD3 Progress Report 2014-08-13
EAD3 Progress Report 2014-08-13EAD3 Progress Report 2014-08-13
EAD3 Progress Report 2014-08-13
 

More from WO Community

Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
WO Community
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
WO Community
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real World
WO Community
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
WO Community
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
WO Community
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
WO Community
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache Cayenne
WO Community
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to Wonder
WO Community
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative version
WO Community
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
WO Community
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W
WO Community
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languages
WO Community
 
D2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRollerD2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRoller
WO Community
 

More from WO Community (20)

Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
 
High availability
High availabilityHigh availability
High availability
 
Reenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSReenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWS
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real World
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
 
Life outside WO
Life outside WOLife outside WO
Life outside WO
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache Cayenne
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to Wonder
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative version
 
iOS for ERREST
iOS for ERRESTiOS for ERREST
iOS for ERREST
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W
 
WOver
WOverWOver
WOver
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languages
 
WOdka
WOdkaWOdka
WOdka
 
ERGroupware
ERGroupwareERGroupware
ERGroupware
 
D2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRollerD2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRoller
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

ERRest: the Basics

  • 1. MONTREAL JUNE 30, JULY 1ST AND 2ND 2012 ERRest: The Basics Pascal Robert MacTI.ca
  • 2. Our agenda • What is REST ? • Basic ERRest concepts • Our Model of the day • Routes for basic operations
  • 3. REST ? • REpresentational State Transfer • Architecture style, not a protocol or format
  • 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. 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. REST and stateless • Goal: to be stateless • Avoid storing stuff in sessions • Back button friendly :-) • More scalable (Ramsey will disagree)
  • 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. 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. 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
  • 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. 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. Controllers • A controller is like a DirectAction class • A route is mapped to one method in a controller • Base classes: ERXRouteController and ERXDefaultRouteController
  • 14. Formats • Format is the representation • Many formats are supported (JSON, XML, plist, etc.) • You can add your own • Base class: ERXFormat
  • 15. Filters • Filtering is to specify what's in the object graph • Can have different filters per route and in/out • Useful to hide sensible information • You use ERXKeyFilter for filtering
  • 16. CRUD • Extends from controller from ERXDefaultRouteController • Register your routes with restRequestHandler.addDefaultRoutes(Entity.ENTITY_NAME)
  • 17. Let's create a REST service
  • 18. The Model • Example will be a blog system • Entities: • BlogEntry • Author • Category
  • 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. Basic routes setup and usage
  • 25. ERXRestFetchSpecification • ERXRestFetchSpecification gives you automatic query arguments management • Built-in arguments: • sort=lastModified|desc,title|asc • batchSize=25&batch=1 • qualifier=title%3D'WOWODC' • Range=items%3D10-19
  • 26. Manual query arguments • Same as direct actions: request().stringFormValueForKey • A "login" action is such an example
  • 28. Tomorrow • HTML routes • Alias, non-EO and fake primary keys • Handling status codes • Handling redirections • Handling headers
  • 29. MONTREAL JUNE 30, JULY 1ST AND 2ND 2012 Q&A