rest and rails

41
REST AND RAILS Chhorn Chamnap YoolkMango 15 - July - 2010

Upload: chamnap-chhorn

Post on 10-May-2015

3.249 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Rest and Rails

REST AND RAILS

Chhorn ChamnapYoolkMango

15 - July - 2010

Page 2: Rest and Rails

Agenda

REST Theory RESTful Rails Case Study Authentication References

Page 3: Rest and Rails

REST Theory

Page 4: Rest and Rails

REST Introduction

REST is a unifying theory for how “distributed hypermedia” systems are best organized and structured.

Lesson learnt from developers:CRUD operations correspond to HTTP

POST, GET, PUT, and DELETE.Consistent, robust, and understandable.Names identifies resources

Page 5: Rest and Rails

Resources A resource is something with identity.

a row in adatabase, a physical object, an abstract concept, or a real-world event in progress

A resource has a URI. Possible to have more than one??? Different representations of a resource vary

based on their content types. How does the server know which one to send?

URI extensions (/users/1.html,/users/1.xml)Content negotiation (Accept-Language, Accept-Charset, Accept-Encoding, or Accept)

Page 6: Rest and Rails

Resources (example)

GET /orders/124 HTTP/1.1

Host: www.example.comAccept: text/html, application/xhtml+xml, text/*, image/png, image/*, */*

Page 7: Rest and Rails

Embrace hyperlinks

Use hyperlinks to related resources. Provide a reasonable quantity of

information and link to further details.

Page 8: Rest and Rails

Statelessness REST is stateless. It presents scalibility. Each request carries no state at lower or higher

levels. Resource state

the internal state that all non trivial resources carry, and it is essential to a web application.

Application state (session state)the state of the cli-ent’s interaction with the serverkeeping this state on the server violates REST

principles as it breaks addressability.

Page 9: Rest and Rails

HTTP Verbs (HTTP Methods) Verbs correspond to actions on

resources. GET HEAD POST PUT DELETE

Page 10: Rest and Rails

Safe Methods

Safe methods are used for retrieval.never be to perform an update

All safe methods are idempotent.

Page 11: Rest and Rails

Idempotent Methods

GET, HEAD, PUT, and DELETE are idempotent methods.

The response (and resource state) is the same, no matter how many times thataction is performed.

Page 12: Rest and Rails

HTTP Status Codes

Success and failure should be inferred from the HTTP response statusnot from an error message within the

payload. 1xx: Informational 2xx: Success 3xx: Redirection 4xx: Client Error 5xx: Server Error

Page 13: Rest and Rails

GET Method

Transfers a representation of a resource to the client.

Read-only access to a resource. The server must decide to perform an

update based on a safe request.

Page 14: Rest and Rails

PUT Method

Updates a resource with the representation provided in the body.

If not exist before, the request creates a new one.

Page 15: Rest and Rails

DELETE Method

Deletes the resource identified by its URI.

Subsequent GET queries to the same URI should return a status code of 410 (Gone) or 404 (Not Found).

Page 16: Rest and Rails

POST Method

Neither safe nor idempotent Two primary uses:

creation of new objectsannotation of existing objects

The URI of the POST is that of the object’s container or parent.

The Location header should point to the URI of the created resource

Page 17: Rest and Rails

RESTful Rails

Page 18: Rest and Rails

Resource-Based Named Routes

Encapsulates all of the Rails CRUD actions into one routing statementmap.resources :users

Page 19: Rest and Rails

Custom resource routes

create custom named routes either to the collection (the parent resource) or the members of the collection (the children).

map.resources :people, :collection => { :search => :get }, :member => { :deactivate => :post }

Page 20: Rest and Rails

Nested routesmap.resources :people do |person|

person.resources :friendsend /people/1/friends /people/1/friends/2

map.resources :people do |person|person.resources :friends, :name_prefix => 'person_'

end The name _prefix option adds a prefix to the generated routes. person_friends_path and person_friend_path

Page 21: Rest and Rails

Nested routes (cont.)map.resources :peoplemap.resources :friends,

:name_prefix => 'person_',:path_prefix => '/people/:person_id‘

path_prefix option will add a prefix to the URIs that the route will recognize and generate.

Page 22: Rest and Rails

Singleton resource routes Sometimes, there will be an entity that exists as a

singleton.map.resources :users do |user|user.resource :account

end The resource name is still singular, but the inferred

controller name is plural.

Page 23: Rest and Rails

ActionView Support

The link_to family of helpers can take a :method parameter to define the HTTP method.generate hidden form field for the _method

parameter for PUT and DELETE.<%= link_to 'Delete', person_path(@person), :method => :delete %>

Page 24: Rest and Rails

Content Types Rails has introduced rich support for

rendering different responses based on the content type the client wants, via the respond_to method.respond_to do |format|format.html #format.html { render }format.xml { render :xml => @product }

end

respond_to :html, :xml

In config/initializers/mime_types.rbMime::Type.register "image/jpeg", :jpg, [], %w(jpeg)

Page 25: Rest and Rails

Content Types (cont.)

Page 26: Rest and Rails

Content Types (cont.)

Page 27: Rest and Rails

Resourceful session state Alternative to holding session state on

the server? Nearly any problem REST developers

face, the solution is to model it as a resource.

Page 28: Rest and Rails

Case Study

Page 29: Rest and Rails

Example

Page 30: Rest and Rails
Page 31: Rest and Rails
Page 32: Rest and Rails

Refactor

Page 33: Rest and Rails

Refactor (example)

Page 34: Rest and Rails

Refactor (example)

Page 35: Rest and Rails
Page 36: Rest and Rails

Authentication

Page 37: Rest and Rails

Authentication

Can we used cookies?Yes, cookies can be used, but mainly for

authentication. How to authenticate users in a RESTful

way via the browser and other clients?

Page 38: Rest and Rails

Authentication (cont.)

Use cookies/sessions to store information just for authentication.

Use HTTP Basic authentication for other server side clients.

For more secure, use secure http.

Page 39: Rest and Rails

Authentication (cont.)

Page 40: Rest and Rails

Authentication (cont.)

Page 41: Rest and Rails

References

Advanced Rails Recipes OReilly Advanced Rails Oreilly RESTful Web Services http://ajaxpatterns.org/RESTful_Service