Grokking The Rest Architectural Style

  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Grokking The Rest Architectural Style as PDF for free.

More details

  • Words: 1,015
  • Pages: 47
Grokking the REST Architectural Style

Ben Ramsey ■ Dutch PHP Conference ■ 12 June 2009

Yes. I am this guy.

Roatan Beach - Perfect Day, by Janusz Leszczynski

REST

Is it about pretty URLs?

Tom Coates, by Patrick Lauke

#webdevgangsign

How about XML over HTTP? Web Developer Gang Sign, by Josh Lewis

Any web service that’s not SOAP?

A Bar of Ivory Soap, by iirraa

Representational State Transfer

Restful Summer, by Clear Inner Vision

Public Domain, from Wikimedia Commons

Theory of REST

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

Client-server Separated, by Hansol Lee

Stateless

Stateless by Koesmanto Bong

Cache

Cache County, Utah by J. Stephen Conn

1.Identification of resources 2.Representation of resources 3.Linked resources 4.Resource metadata

Uniform Interface used to interface, by Tom Hensel

Layered

Sedimentary Layers by Mark Thurman

Code-on-demand jeremyʼs tie by Gitchel

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 Sand Banks Sunset, by Clear Inner Vision

A Real-World Analogy Money!, by Tracy Olson

RESTful Practice

Public Domain, from Wikimedia Commons

“[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 Drip Drops and the Spider Web, by Mike Bitzenhofer

Hypertext Transfer Protocol URIs provide unique addresses Constrained interface with methods and content types Transactions are atomic Built-in support for layering Provides for cache control #110 Hypertext Transfer Protocol, by maako

HTTP Interface Methods

Cut & Paste

GET PUT POST DELETE

Copy Paste Over Paste After Cut

#110 Hypertext Transfer Protocol, by maako

Content Types 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 #110 Hypertext Transfer Protocol, by maako

Lifecycle of a Resource 1

POST /content HTTP/1.1 Host: example.org Content-Type: application/xml 2

HTTP/1.x 201 Created Date: Thu, 13 November 2008 16:43:56 GMT Location: /content/1234 #110 Hypertext Transfer Protocol, by maako

Lifecycle of a Resource 3

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

4

HTTP/1.x 200 OK Date: Thu, 13 November 2008 16:44:13 GMT Content-Type: application/xml #110 Hypertext Transfer Protocol, by maako

Lifecycle of a Resource 5

PUT /content/1234 HTTP/1.1 Host: example.org Content-Type: application/xml 6

HTTP/1.x 200 OK Date: Thu, 13 November 2008 16:48:26 GMT Content-Type: application/xml #110 Hypertext Transfer Protocol, by maako

Lifecycle of a Resource 7

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

8

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

#110 Hypertext Transfer Protocol, by maako

Resource-oriented Architecture 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. Where I Teach, by Todd Ehlers

Resource-oriented Architecture Resources are addressable Resources have no state Resources are connected Resources share the same interface

Where I Teach, by Todd Ehlers

Resource-oriented Architecture 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 Where I Teach, by Todd Ehlers

Resource-oriented Architecture Should expose many URIs Session cookies are not RESTful Combined resources are RESTful only if represented as a URI URIs should facilitate “cut & paste”

Where I Teach, by Todd Ehlers

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

Molecule display, by Christian Guthier

Atom Entry Document application/atom+xml;type=entry Feed (Collection) Document application/atom+xml;type=feed Category Document application/atomcat+xml Service Document application/atomsvc+xml Molecule display, by Christian Guthier

Atom Resource Lifecycle 1

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

2

HTTP/1.x 200 OK Date: Thu, 13 November 2008 17:13:14 GMT Content-Type: application/atomsvc+xml Molecule display, by Christian Guthier

Atom Resource Lifecycle 3

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

4

HTTP/1.x 200 OK Date: Thu, 13 November 2008 17:13:46 GMT Content-Type: application/atom+xml;type=feed Molecule display, by Christian Guthier

Atom Resource Lifecycle 5

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

6

HTTP/1.x 200 OK Date: Thu, 13 November 2008 17:13:48 GMT Content-Type: application/atomcat+xml Molecule display, by Christian Guthier

Atom Resource Lifecycle 7

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

HTTP/1.x 201 Created Date: Thu, 13 November 2008 17:16:32 GMT Location: /archives/1234.atom Molecule display, by Christian Guthier

Atom Resource Lifecycle 9

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

10

HTTP/1.x 200 OK Date: Thu, 13 November 2008 17:16:36 GMT Content-Type: application/atom+xml;type=entry Molecule display, by Christian Guthier

Atom Resource Lifecycle 11

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

HTTP/1.x 200 OK Date: Thu, 13 November 2008 17:23:12 GMT Content-Type: application/atom+xml;type=entry Molecule display, by Christian Guthier

Atom Resource Lifecycle 13

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

14

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

Molecule display, by Christian Guthier

Resource-oriented Design 1. Determine your resources User /users /users/{username}

Content /content /content/{ID}

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

Resource-oriented Design 2. Decide the methods for each resource /users /users/{username} /content /content/{ID} GET POST

GET PUT DELETE

GET POST

GET PUT DELETE

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

Resource-oriented Design 3. Link your resources Users own content Each user owns multiple content items Each content item has one owner

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

Resource-oriented Design 4. Determine your data schemas User id username firstname lastname

Content id owner title file/content

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

Resource-oriented Design 5. Choose your content type(s)

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

In conclusion...

Conclusion, by Mark Cummins

Questions?

benramsey.com

Grokking the REST Architectural Style Copyright © Ben Ramsey. Some rights reserved. This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License. For uses not covered under this license, please contact the author.

Related Documents

The Rest Of Rest
December 2019 58
Rest
May 2020 31
Architectural
May 2020 33
Rest
May 2020 26
The Rest Of The Story
November 2019 37