RESTful API Design - · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness...

106
RESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Transcript of RESTful API Design - · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness...

Page 1: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

RESTful API DesignSecond Edition

Brian Mulloy@landlessness

Apigee@apigee

11.03.11 @ 11:03:11 PSTDial-in or VoIPSee Details in Chat Window

Page 2: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

groups.google.com/group/api-craft

Page 3: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

youtube.com/apigee

Page 4: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

To be a RESTafarian or a Pragmatist?

Page 5: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window
Page 6: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

AppUser

APITeamAPIApp World of

APIsApp

StoreInternalSystems

AppDeveloper

Page 7: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Application developers are raison d'être for APIs.

Page 8: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Be pragmatic.

For the benefit of application developers.

Page 9: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Pragmatic RESTful APIs are a design problem.

Page 10: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

baddesigns.com

Page 11: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window
Page 12: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window
Page 13: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Paul Mijksenaar Design for Function Award 2011

Page 14: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window
Page 15: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Let’s look at puppies.

Page 17: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

.../getAllDogs/locationVerify/foodNeeded/createRecurringDogWalk/giveDirectOrder/healthCheck/getRecurringDogWalkSchedule/getLocation/getDog/massDogParty/getNewDogsSince/getRedDogs/getSittingDogs/dogStateChangesSearch/replaceSittingDogsWithRunningDogs/saveDog...

Page 18: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window
Page 19: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

A puppy’s world is big.

Page 21: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

...

/getAllLeashedDogs

/verifyVeterinarianLocation

/feedNeededFood

/createRecurringMedication

/doDirectOwnerDiscipline

/doExpressCheckupWithVeterinarian

/getRecurringFeedingSchedule

/getHungerLevel

/getSquirrelsChasingPuppies

/newDogForOwner

/getNewDogsAtKennelSince

/getRedDogsWithoutSiblings

/getSittingDogsAtPark

/setLeashedDogStateTo

/replaceParkSittingDogsWithRunningDogs

/saveMommaDogsPuppies

...

...

/getAllDogs

/verifyLocation

/feedNeeded

/createRecurringWakeUp

/giveDirectOrder

/checkHealth

/getRecurringWakeUpSchedule

/getLocation

/getDog

/newDog

/getNewDogsSince

/getRedDogs

/getSittingDogs

/setDogStateTo

/replaceSittingDogsWithRunningDogs

/saveDog

...

Page 22: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

We are on a slippery slope.

Page 23: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Keep the simple things simple.

Page 25: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

We only need two base URLs per resource.

Page 26: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

The first is for a collection.

Page 27: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/dogs

Page 28: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

The second is for an element.

Page 29: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/dogs/1234

Page 30: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

POSTGETPUTDELETE

Page 31: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

CREATEREADUPDATEDELETE

Page 32: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

POSTcreate

GETread

PUTupdate

DELETEdelete

create a new dog list dogs

replace dogs with new dogs

delete all dogs

treat as a collection create new dog in it

show Bo

if exists update Bo

if not create Bo

delete Bo

Resource

/dogs

/dogs/1234

Wikipedia

Page 33: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

POSTcreate

GETread

PUTupdate

DELETEdelete

create a new dog list dogs

replace dogs with new dogs

delete all dogs

treat as a collection create new dog in it

show Bo

if exists update Bo

if not create Bo

delete Bo

Resource

/dogs

/dogs/1234

Wikipedia

Page 34: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

POSTcreate

GETread

PUTupdate

DELETEdelete

create a new dog list dogs

bulk update dogs

delete all dogs

error show Bo

if exists update Bo

if noterror

delete Bo

Resource

/dogs

/dogs/1234

Wikipedia

Page 35: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Verbs are bad.

Page 36: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Nouns are good.

Page 37: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Plurals or singulars?

Page 38: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/checkins

Foursquare

/deals

GroupOn

/Product

Zappos

Page 39: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Plurals are better.

/dogs

Page 40: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Abstract or concrete naming?

Page 41: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/things

/animals

/dogs

Super High

High

Medium

/beagles

Low

Page 42: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Concrete is better than abstract.

/dogs

Page 43: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about associations?

Page 44: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

GET /owners/5678/dogs

POST /owners/5678/dogs

Page 45: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about complex variations?

Page 47: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Sweep variations under the ‘?’

Page 48: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/dogs?color=red&state=running&location=park

Page 50: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/dogs

Page 51: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about errors?

Page 53: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Facebook{"type":"OAuthException","message":"(#803) Some

of the aliases you requested do not exist:

foo.bar"}

HTTP Status Code: 200

{"status":401,"message":"Authenticate","code":

20003,"more_info":"http://www.twilio.com/docs/

errors/20003"}

Twilio HTTP Status Code: 401

{"code":401,"message":"Authentication

Required"}

SimpleGeo HTTP Status Code: 401

Page 54: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

200 - OK

{“message” : “Verbose, plain language description of the problem with hints about how to fix it.”“more_info” : “http://dev.teachdogrest.com/errors/12345”}

Code for code

Message for people

401 - Unauthorized

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

Page 55: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about versioning?

Page 56: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/2010-04-01/Accounts/

Twilio

/services/data/v20.0/sobjects/Account

salesforce.com

?v=1.0

Facebook

Page 57: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/v1/dogs

Page 58: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Please give me exactly what I need.

Page 59: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/people:(id,first-name,last-name,industry)

LinkedIn

/joe.smith/friends?fields=id,name,picture

Facebook

?fields=title,media:group(media:thumbnail)

Google (partial response)

Page 60: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/dogs?fields=name,color,location

Page 61: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about pagination?

Page 62: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

offsetlimit

Facebook

pagerpp

Twitter

startcount

LinkedIn

Page 63: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/dogs?limit=25&offset=50

Page 64: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about formats?

Page 65: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

?alt=json

Google Data

/venue.json

Foursquare

Accept: application/json

Digg*

?type=json

* The type argument, if present, overrides the Accept header.

Page 66: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/dogs.json

/dogs/1234.json

Page 67: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about defaults?

Page 68: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

json

Format

Pagination (depends on data size)

limit=10&offset=0

Page 69: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about attribute names?

Page 70: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

"created_at": "Thu Nov 03 05:19:38 +0000 2011"

Twitter

"DateTime": "2011-10-29T09:35:00Z"

Bing

"createdAt": 1320296464

Foursquare

Page 71: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

var myObject = JSON.parse(response);

JSON is for JavaScript Objects

timing = myObject.created_at;

These looks funny in JavaScript

timing = myObject.DateTime;

Page 72: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

"createdAt": 1320296464

JavaScript Convention

Medial Capitalization aka CamelCase

timing = myObject.createdAt;

Page 73: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about non-resource-y stuff?

Page 74: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Calculate

Translate

Convert

Page 75: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/convert?from=EUR&to=CNY&amount=100

Use verbs not nouns

Page 76: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about searching?

Page 77: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/search?q=fluffy+fur

Global

/owners/5678/dogs/search?q=fluffy+fur

Scoped

/search.xml?q=fluffy+fur

Formatted

Page 78: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about counts?

Page 79: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/dogs/count

Page 80: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about the rest of the URL?

Page 81: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

api.foursquare.comFoursquaredevelopers.foursquare.com

graph.facebook.comFacebook

developers.facebook.com

api.twitter.comTwittersearch.twitter.com

api.facebook.com

dev.twitter.com

stream.twitter.com

Page 82: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

api.teachdogrest.com

developers.teachdogrest.com

API gateway

Developer connection

api ! developers (if from browser)

Do web redirects

dev ! developersdeveloper ! developers

Page 83: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about exceptional stuff?

Page 84: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Client intercepts HTTP error codes

Page 85: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

{"error" : "Could not authenticate you." }

Twitter

HTTP Status Code: 200

/public_timelines.json?suppress_response_codes=true

Page 86: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

200 - OK

Code for code ignoring

{“response_code” : “401”, “message” : “Verbose, plain language description of the problem with hints about how to fix it.”“more_info” : “http://dev.teachdogrest.com/errors/12345”, “code” : 12345}

Message for people & code

/dogs?suppress_response_codes=true

Always returns OK

Page 87: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Client supports limited HTTP methods

Page 88: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Method Parameter

/dogs?method=postcreate

/dogs

read

/dogs/1234?method=put&location=parkupdate

/dogs/1234?method=deletedelete

Page 89: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about authentication?

Page 90: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Permissions Service API

PayPal

OAuth 2.0

Facebook

OAuth 1.0a

Twitter

Page 91: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

OAuth 2.0

Use latest and greatest OAuth

Don’t do something close, but different.

Page 92: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

How do application developers use the API?

Page 93: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about chatty applications?

Page 94: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

First be complete & RESTful.

Then provide shortcuts.

Page 95: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

/owners/5678?fields=name,dogs(name)

Partial response syntax can help.

Page 96: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

What about when building an UI requires a lot of domain knowledge?

Page 97: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window
Page 98: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Complement your API with code libraries and SDK.

Page 99: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Really? All of this? And iterate it?

Page 100: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window
Page 101: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

API Virtualization Layer

Application

APIAPI API

Page 102: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Be RESTfulOnly 2 URLsNo verbsUse nouns as pluralsConcrete over abstractFor JSON follow JavaScript conventionsSweep complexity behind the ‘?’Borrow from leading APIsAccount for exceptional clientsAdd virtualization layer

Page 103: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

Questions?

Page 104: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

THANK YOUSubscribe to API webinars at:youtube.com/apigee

Page 105: RESTful API Design -   · PDF fileRESTful API Design Second Edition Brian Mulloy @landlessness Apigee @apigee 11.03.11 @ 11:03:11 PST Dial-in or VoIP See Details in Chat Window

THANK YOUQuestions and ideas to:groups.google.com/group/api-craft