you look like you could use some rest!

49
Ben Ramsey php|works PyWorks 13 November 2008 You Look Like You Could Use Some REST!

Upload: ben-ramsey

Post on 10-May-2015

3.900 views

Category:

Technology


1 download

DESCRIPTION

Representational State Transfer, or REST, has become the hip, new buzzword of Web 2.0. But what really makes an application RESTful? Is it pretty URLs? Or the use of XML over HTTP? Is it any web service that doesn't use SOAP? In all of the hype, the definition of REST has become clouded and diluted. It's time to take a fresh look at REST. In this talk, Ben Ramsey reintroduces REST and its architectural style. He shows that REST is not only an architecture for web services but that it describes an architecture for the Web. Ramsey will demonstrate how statelessness, a resource-oriented architecture, atomicity of requests, and other traits of REST make the most of the Web's architecture to provide scalable and simpler web services turning the Web into a platform by which rich clients can access and manipulate data.

TRANSCRIPT

Page 1: You Look Like You Could Use Some REST!

Ben Ramsey ■ php|works PyWorks ■ 13 November 2008

You Look Like YouCould Use Some REST!

Page 2: You Look Like You Could Use Some REST!

REST

Roatan Beach - Perfect Day, by Janusz Leszczynski

Page 3: You Look Like You Could Use Some REST!

Tom Coates, by Patrick Lauke

Is it about pretty URLs?

Page 4: You Look Like You Could Use Some REST!

Web Developer Gang Sign, by Josh Lewis

How about XML over HTTP?

#webdevgangsign

Page 5: You Look Like You Could Use Some REST!

A Bar of Ivory Soap, by iirraa

Any web service that’s not SOAP?

Page 6: You Look Like You Could Use Some REST!

RepresentationalState Transfer

Restful Summer, by Clear Inner Vision

Page 8: You Look Like You Could Use Some REST!

REST defines a style by which a resource’s state may be transferred using a representation of that resource.

REST defines a style by which a resource’s state may be transferred using a representation of that resource.

REST defines a style by which a resource’s state may be transferred using a representation of that resource.

Page 11: You Look Like You Could Use Some REST!

used to interface, by Tom Hensel

Uniform Interface

Page 13: You Look Like You Could Use Some REST!

Sand Banks Sunset, by Clear Inner Vision

RESTful Benefits

Improved response time & reduced server load

Improves server scalability

Requires less client-side software

Depends less on vendor software

No need for resource discovery

Better long-term compatibility & evolvability than RPC

Page 16: You Look Like You Could Use Some REST!

Drip Drops and the Spider Web, by Mike Bitzenhofer

“[REST] is intended to evoke an image of how a well-designed Web application behaves: a network of web pages (a virtual state-machine), where the user progresses through an application by selecting links (state transitions), resulting in the next page (representing the next state of the application) being transferred to the user and rendered for their use.” — Roy Fielding

Page 17: You Look Like You Could Use Some REST!

Hypertext Transfer Protocol

#110 Hypertext Transfer Protocol, by maako

URIs provide unique addresses

Constrained interface with methods and content types

Transactions are atomic

Built-in support for layering

Provides for cache control

Page 18: You Look Like You Could Use Some REST!

HTTP Interface

#110 Hypertext Transfer Protocol, by maako

Methods

GETPUTPOSTDELETE

Cut & Paste

CopyPaste OverPaste AfterCut

Page 19: You Look Like You Could Use Some REST!

HTTP Interface

#110 Hypertext Transfer Protocol, by maako

Transfers (copies) a representation of a resource from server to client

GET

Body must contain enough information for the client to usefully operate on the data

Considered safe

Has the property of idempotence

Page 20: You Look Like You Could Use Some REST!

HTTP Interface

#110 Hypertext Transfer Protocol, by maako

Transfers the state from client to the server (equivalent to paste over)

PUT

The body must contain enough information for the server to operate on the data

May also create a new resource at the requested URI

Has the property of idempotence

Page 21: You Look Like You Could Use Some REST!

HTTP Interface

#110 Hypertext Transfer Protocol, by maako

Has the same meaning as paste after

POST

May create or update resources, depending on context

Is not idempotent

Page 22: You Look Like You Could Use Some REST!

HTTP Interface

#110 Hypertext Transfer Protocol, by maako

Acts like cut

DELETE

Requests that the resource identified be destroyed or removed from public web

Has the property of idempotence

Page 23: You Look Like You Could Use Some REST!

Idempotence

#110 Hypertext Transfer Protocol, by maako

Not a sexual dysfunction

The side-effects of N > 0 identical requests is the same as for a single request

That is: every time you make the request, as long as it is an identical request, exactly the same action occurs

Page 24: You Look Like You Could Use Some REST!

Content Types

#110 Hypertext Transfer Protocol, by maako

HTTP supports content types through the Content-Type header

A single resource can be transferred in various content types

Content negotiation used to tell the server what type to return to the client

REST community doesn’t care for content negotiation

Page 25: You Look Like You Could Use Some REST!

#110 Hypertext Transfer Protocol, by maako

1

POST /content HTTP/1.1Host: example.orgContent-Type: application/xml

2

HTTP/1.x 201 CreatedDate: Thu, 13 November 2008 16:43:56 GMTLocation: /content/1234

Lifecycle of a Resource

Page 26: You Look Like You Could Use Some REST!

#110 Hypertext Transfer Protocol, by maako

3

GET /content/1234 HTTP/1.1Host: example.org

4

HTTP/1.x 200 OKDate: Thu, 13 November 2008 16:44:13 GMTContent-Type: application/xml

Lifecycle of a Resource

Page 27: You Look Like You Could Use Some REST!

#110 Hypertext Transfer Protocol, by maako

5

PUT /content/1234 HTTP/1.1Host: example.orgContent-Type: application/xml

Lifecycle of a Resource

6

HTTP/1.x 200 OKDate: Thu, 13 November 2008 16:48:26 GMTContent-Type: application/xml

Page 28: You Look Like You Could Use Some REST!

#110 Hypertext Transfer Protocol, by maako

7

DELETE /content/1234 HTTP/1.1Host: example.org

Lifecycle of a Resource

8

HTTP/1.x 204 No ContentDate: Thu, 13 November 2008 16:50:47 GMT

Page 29: You Look Like You Could Use Some REST!

Resource-oriented Architecture

Where I Teach, by Todd Ehlers

1. Represent itself to the client

2. Transition from one state to the next

3. Destroy itself

Additionally, the system knows how to create a resource.

Page 30: You Look Like You Could Use Some REST!

Resource-oriented Architecture

Where I Teach, by Todd Ehlers

Resources are addressable

Resources have no state

Resources are connected

Resources share the same interface

Page 31: You Look Like You Could Use Some REST!

Resource-oriented Architecture

Where I Teach, by Todd Ehlers

Query string parameters appropriate in some cases

Pragmatic use of URIs instead of using HTTP headers

RPC-style APIs are avoided

Representation should have links

URI templates specify URI families

Page 32: You Look Like You Could Use Some REST!

Resource-oriented Architecture

Where I Teach, by Todd Ehlers

Should expose many URIs

Session cookies are not RESTful

Combined resources are RESTful only if represented as a URI

URIs should facilitate “cut & paste”

Page 33: You Look Like You Could Use Some REST!

Atom

A resource-oriented protocol for publishing documents that sits on top of HTTP

Molecule display, by Christian Guthier

Page 34: You Look Like You Could Use Some REST!

Atom

Entry Documentapplication/atom+xml;type=entry

Molecule display, by Christian Guthier

Feed (Collection) Documentapplication/atom+xml;type=feed

Category Documentapplication/atomcat+xml

Service Documentapplication/atomsvc+xml

Page 35: You Look Like You Could Use Some REST!

1

GET /index.atom HTTP/1.1Host: example.org

2

HTTP/1.x 200 OKDate: Thu, 13 November 2008 17:13:14 GMTContent-Type: application/atomsvc+xml

Atom Resource Lifecycle

Molecule display, by Christian Guthier

Page 36: You Look Like You Could Use Some REST!

3

GET /archives.atom HTTP/1.1Host: example.org

4

HTTP/1.x 200 OKDate: Thu, 13 November 2008 17:13:46 GMTContent-Type: application/atom+xml;type=feed

Atom Resource Lifecycle

Molecule display, by Christian Guthier

Page 37: You Look Like You Could Use Some REST!

5

GET /categories.atom HTTP/1.1Host: example.org

6

HTTP/1.x 200 OKDate: Thu, 13 November 2008 17:13:48 GMTContent-Type: application/atomcat+xml

Atom Resource Lifecycle

Molecule display, by Christian Guthier

Page 38: You Look Like You Could Use Some REST!

7

POST /archives.atom HTTP/1.1Host: example.orgContent-Type: application/atom+xml;type=entry

8

HTTP/1.x 201 CreatedDate: Thu, 13 November 2008 17:16:32 GMTLocation: /archives/1234.atom

Atom Resource Lifecycle

Molecule display, by Christian Guthier

Page 39: You Look Like You Could Use Some REST!

9

10

HTTP/1.x 200 OKDate: Thu, 13 November 2008 17:16:36 GMTContent-Type: application/atom+xml;type=entry

Atom Resource Lifecycle

GET /archives/1234.atom HTTP/1.1Host: example.org

Molecule display, by Christian Guthier

Page 40: You Look Like You Could Use Some REST!

11

12

HTTP/1.x 200 OKDate: Thu, 13 November 2008 17:23:12 GMTContent-Type: application/atom+xml;type=entry

Atom Resource Lifecycle

PUT /archives/1234.atom HTTP/1.1Host: example.orgContent-Type: application/atom+xml;type=entry

Molecule display, by Christian Guthier

Page 41: You Look Like You Could Use Some REST!

13

14

HTTP/1.x 204 No ContentDate: Thu, 13 November 2008 19:34:29 GMT

Atom Resource Lifecycle

DELETE /archives/1234.atom HTTP/1.1Host: example.org

Molecule display, by Christian Guthier

Page 42: You Look Like You Could Use Some REST!

RESTfulDesign

1. Determine your resources

User Content/users/users/{username}

/content/content/{ID}

Before we had CAD, we had Lead!, by Wendell

Page 43: You Look Like You Could Use Some REST!

RESTfulDesign

2. Decide the methods for each resource

/usersGETPOST

/contentGETPOST

/users/{username}GETPUTDELETE

/content/{ID}GETPUTDELETE

Before we had CAD, we had Lead!, by Wendell

Page 44: You Look Like You Could Use Some REST!

RESTfulDesign

3. Connect your resources

Before we had CAD, we had Lead!, by Wendell

Page 45: You Look Like You Could Use Some REST!

RESTfulDesign

4. Determine your data schemas

Before we had CAD, we had Lead!, by Wendell

Page 46: You Look Like You Could Use Some REST!

RESTfulDesign

5. Choose your content type(s)

Before we had CAD, we had Lead!, by Wendell

Page 47: You Look Like You Could Use Some REST!

In Conclusion...

It’s all about resources.

Conclusion, by Mark Cummins

Page 48: You Look Like You Could Use Some REST!

There’s More To Learn

Authentication

Digital signing

Encryption

WSDL 2.0 & WADL

Page 49: You Look Like You Could Use Some REST!

Questions?

benramsey.com