60
USABLE REST APIs { "_links":{ "author": {"href":"http://javier-ramirez.com"}, "work": {"href":"https://teowaki.com"}, "twitter": {"href":"https://twitter.com/supercoco9"} } }

Writing Usable REST APIs. Javier Ramirez

Embed Size (px)

Citation preview

Page 1: Writing Usable REST APIs. Javier Ramirez

USABLE REST APIs

{ "_links":{ "author": {"href":"http://javier-ramirez.com"}, "work": {"href":"https://teowaki.com"}, "twitter": {"href":"https://twitter.com/supercoco9"}

} }

Page 2: Writing Usable REST APIs. Javier Ramirez

Bedale, North Yorkshire

Page 3: Writing Usable REST APIs. Javier Ramirez

a randompostbox in Bedale

Page 4: Writing Usable REST APIs. Javier Ramirez

a usabilityproblem

Page 5: Writing Usable REST APIs. Javier Ramirez

everybody agrees web usability is a good investment

Page 6: Writing Usable REST APIs. Javier Ramirez

API usability? meh

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html

Page 7: Writing Usable REST APIs. Javier Ramirez
Page 8: Writing Usable REST APIs. Javier Ramirez
Page 9: Writing Usable REST APIs. Javier Ramirez
Page 10: Writing Usable REST APIs. Javier Ramirez
Page 11: Writing Usable REST APIs. Javier Ramirez
Page 12: Writing Usable REST APIs. Javier Ramirez
Page 13: Writing Usable REST APIs. Javier Ramirez

Web usability is an approach to make web sites

easy to use for an end-user, without the requirement that any specialized training be

undertaken.

Page 14: Writing Usable REST APIs. Javier Ramirez

LearnabilityEfficiencyMemorabilityErrorsSatisfaction

Usability 101, the 5 quality components by Jakob Nielsen

Page 15: Writing Usable REST APIs. Javier Ramirez
Page 16: Writing Usable REST APIs. Javier Ramirez

EFFECTIVE IMMEDIATELY!! NO MORE TYPEWRITERS ARE TO BE PURCHASED, LEASED, etc., etc. Apple is an innovative company. We must believe and lead in all areas. If word processing is so neat, then let's all use it!

Mike Scott, Apple President, 1980

Page 17: Writing Usable REST APIs. Javier Ramirez
Page 18: Writing Usable REST APIs. Javier Ramirez

don't be too smart

follow best practices

Page 19: Writing Usable REST APIs. Javier Ramirez

Succeed consistently

Fail consistently

Page 20: Writing Usable REST APIs. Javier Ramirez

twitter200 OK Success!304 Not Modified400 Bad Request401 Unauthorized403 Forbidden404 Not Found406 Not Acceptable410 Gone420 Enhance Your Calm500 Internal Server Error502 Bad Gateway503 Service Unavailable

Useful Status429 Too many requests204 No Content

teowaki200 OK Success!201 Created202 Accepted301 Moved Permanently304 Not Modified401 Unauthorized403 Forbidden404 Not Found406 Not Acceptable422 Unprocessable Entity406 Not Acceptable500 Internal Server Error

Page 21: Writing Usable REST APIs. Javier Ramirez

speed or at least asynchronous operations

Page 22: Writing Usable REST APIs. Javier Ramirez

different users

different nerds needs

Page 23: Writing Usable REST APIs. Javier Ramirez

Javi, you are not an example

of anything

Page 24: Writing Usable REST APIs. Javier Ramirez

formats

Page 25: Writing Usable REST APIs. Javier Ramirez

CORS: Cross origin resource sharing

Page 26: Writing Usable REST APIs. Javier Ramirez

Where to put your metadata In your HTTP Headers?

As request params and response fields?

Maybe Both? It usually pays not to be too strict and just make your users' lives easier

Page 27: Writing Usable REST APIs. Javier Ramirez
Page 28: Writing Usable REST APIs. Javier Ramirez
Page 29: Writing Usable REST APIs. Javier Ramirez

Same content?

Page 30: Writing Usable REST APIs. Javier Ramirez

Partial Responses

teowaki's approach

api.teowaki.com/people/tw?api_quiet=true&api_links=false

Google's approach

www.googleapis.com/youtube/v3/videos?part=snippet&fields=items(id,snippet(title,position))

Page 31: Writing Usable REST APIs. Javier Ramirez

netflix REST apiresource based

Page 32: Writing Usable REST APIs. Javier Ramirez

netflix REST apiexperience based

http://www.slideshare.net/danieljacobson/api-revolutions-16755403

Page 33: Writing Usable REST APIs. Javier Ramirez

Don't expose your implementations details Resources are not database tables

Page 34: Writing Usable REST APIs. Javier Ramirez

Easier to understand

Change the internals without breaking the contract

Resources based on business objects are more resistant to versioning

More opacity means more security

Page 35: Writing Usable REST APIs. Javier Ramirez

I shouldn't be ableto guess your programming languageby looking at your API

Page 36: Writing Usable REST APIs. Javier Ramirez

Hypermedia

Navigable APIs

Page 37: Writing Usable REST APIs. Javier Ramirez

API pagination

Page 38: Writing Usable REST APIs. Javier Ramirez

HAL:HypermediaApplicationLanguage

Page 39: Writing Usable REST APIs. Javier Ramirez

JSON-API

Page 40: Writing Usable REST APIs. Javier Ramirez

API links------Next steps

Page 41: Writing Usable REST APIs. Javier Ramirez

Several resources in a single request

Page 42: Writing Usable REST APIs. Javier Ramirez

Versioning without versions

Page 43: Writing Usable REST APIs. Javier Ramirez

empty new resources> curl “https://api.teowaki.com/teams/5677-dev”

Page 44: Writing Usable REST APIs. Javier Ramirez

URI templates

http://example.com/~{username}/ http://example.com/dictionary/{term:1}/{term} http://example.com/search{?q,lang}

Page 45: Writing Usable REST APIs. Javier Ramirez

self-documentedAPI

Page 46: Writing Usable REST APIs. Javier Ramirez
Page 47: Writing Usable REST APIs. Javier Ramirez

Swagger

Page 48: Writing Usable REST APIs. Javier Ramirez

Swagger

Page 49: Writing Usable REST APIs. Javier Ramirez

RAML

Page 50: Writing Usable REST APIs. Javier Ramirez

RAML

Page 51: Writing Usable REST APIs. Javier Ramirez

Don't just implement.

Think

Page 52: Writing Usable REST APIs. Javier Ramirez

Should my API allow asynchronous creation,

update, and deletion?

Page 53: Writing Usable REST APIs. Javier Ramirez

Should it return the contents of a newly created

or updated resource or just the id?

What about deleted resources?

Page 54: Writing Usable REST APIs. Javier Ramirez

Should my API ignore unrecognised parameters

silently, even when it is gettinga valid request, or should it

return an error?

Page 55: Writing Usable REST APIs. Javier Ramirez

Should it allow bulk operations?

PATCH /users/541,1001,3005

Page 56: Writing Usable REST APIs. Javier Ramirez

Does my API need a real-time or push mechanism

for updates?

Do I need to set usage quotas?

Page 57: Writing Usable REST APIs. Javier Ramirez

There are not good or bad answers. Each API has different needs.

The only wrong answer is copying and pasting fromyour last project and pretend the work is done.

Page 58: Writing Usable REST APIs. Javier Ramirez

LearnabilityEfficiencyMemorabilityErrorsSatisfaction

Remember:

Page 59: Writing Usable REST APIs. Javier Ramirez

don't let your APIbe the poobox whereyour userspost theirrequests

Moral of this talk

Page 60: Writing Usable REST APIs. Javier Ramirez

Find related links at

https://teowaki.com/teams/javier-community/link-categories/apis

Thanks!

Javier Ramírez@supercoco9