api pain points

57
API PAIN-POINTS GETTING THINGS WRONG FOR FUN AND PROFIT @PHILSTURGEON #PHPCAPETOWN14

Upload: phil-sturgeon

Post on 13-Jun-2015

1.684 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Api pain points

API PAIN-POINTSGETTING THINGS WRONG FOR FUN AND PROFIT

@PHILSTURGEON #PHPCAPETOWN14

Page 2: Api pain points
Page 3: Api pain points
Page 4: Api pain points
Page 5: Api pain points
Page 6: Api pain points
Page 7: Api pain points
Page 8: Api pain points
Page 9: Api pain points
Page 10: Api pain points
Page 11: Api pain points

ARCHITECTUREOLD SCHOOL

Page 12: Api pain points
Page 13: Api pain points

http://girlsgotsole.com/blog/thankful-thursday-rest-days/

Page 14: Api pain points

DATABASE SEEDINGLEAVE YOUR CUSTOMERS ALONE

Page 15: Api pain points

ENDPOINT THEORYNAMING THINGS IS HARD

Page 16: Api pain points

PLURAL V SINGULAR?CONSISTENCY IS KING

/user/23

/user

s

Page 17: Api pain points

PLURAL V SINGULAR?CONSISTENCY IS KING

/opportunity/

43

/opportunitie

s

Page 18: Api pain points

PLURAL V SINGULAR?CONSISTENCY IS KING

/places/places/12/places/12/checkins/places/12/checkins/34/checkins/34

Page 19: Api pain points

NO NEED FOR SEOQUERY STRINGS ARE FINE

/users/active/true

/users?active=true

Page 20: Api pain points

AUTO-INCREMENT = BADCTRL + S YOUR WEBSITE

/checkins/

1/

checkins/2

/checkins/2369

/checkins/

3

Page 21: Api pain points

AUTO-INCREMENT = BADCTRL + S YOUR WEBSITE

https://github.com/zackkitzmiller/tiny-php

https://github.com/ramsey/uuid

Page 22: Api pain points

WHICH METHODSVERB SOUP

List GET /users Read GET /users/XUpdate PUT /users/XUpdate PATCH /users/XCreate POST /usersDelete DELETE /users/XImage PUT /users/X/imageImages POST /users/X/imagesFavorites GET /users/X/favoritesCheckins GET /users/X/checkins

Page 23: Api pain points

FORM PAYLOADSJUST SEND JSON

foo=something&bar[baz]=thing&bar[stuff]=junk&bar=true

23

Page 24: Api pain points

HACKY PAYLOADSNOT LIKE THAT

Page 25: Api pain points

REAL JSON PAYLOADSTHNX!

Page 26: Api pain points
Page 27: Api pain points

200 = OKOr deal with

Chuck

Page 28: Api pain points

2xx is all about success3xx is all about

redirection4xx is all about client

errors5xx is all about service

errors

Page 29: Api pain points

200 - Generic everything is OK

201 - Created something OK

202 - Accepted but is being processed async

400 - Bad Request (Validation?)

401 - Unauthorized

403 - Current user is forbidden

404 - That URL is not a valid route

405 - Method Not Allowed

410 - Data has been deleted, deactivated, suspended, etc

500 - Something unexpected happened and it is the APIs fault

503 - API is not here right now, please try again later

Page 30: Api pain points

SUPPLEMENT HTTP CODESWHAT HAPPENED

{"error": {

"type": "OAuthException", "message": "Session has expired at unix

time 1385243766. The current unix time is 1385848532"

}}

Page 31: Api pain points

SUPPLEMENT HTTP CODESWHAT HAPPENED

{"error": {

"type": "OAuthException","code": “ERR-1012“,

"message": "Session has expired at unix time 1385243766. The current unix time is 1385848532"

}}

Page 32: Api pain points

AUTHENTICATION STRATEGYHOW MUCH DO YOU CARE

HTTP Basic

HTTP Digest

OAuth 1.0a

OAuth 2.0

Page 33: Api pain points

OAUTH 2 CAN DO A LOTPASSWORDS, IMPLICIT, SOCIAL LOGINS…

Page 35: Api pain points

USE SSL

Page 36: Api pain points

LOLEXCEPT FOR…

Page 37: Api pain points
Page 38: Api pain points
Page 39: Api pain points

TRANSFORMERS… ASSEMBLE!

Page 40: Api pain points

FLEXIBLE RESPONSESSTOP YOUR IPHONE DEV COMPLAINING

GET /checkins/dsfXte ?

include=place,user,activity

Page 41: Api pain points

PAGINATEDATA GROWS FAST

{"data": [

...],"cursors": { "after": "MTI=", "next_url": "https://api.example.com/

places?cursor=MTI%3&number=12"

}}

Page 42: Api pain points

DEFINE A LIMIT RANGEPAGINATION DDOS

if ($limit < 1 || $limit > 100) {

$limit = 100;}

Page 43: Api pain points
Page 44: Api pain points

AUTOMATE TESTINGIF YOU LOVE YOUR JOB

http://www.engineersgotblued.com/

Page 45: Api pain points

PHPUNIT + BEHAT

http://www.bil-jac.com/bestfriendsclub.php

Page 46: Api pain points

Scenario: Find a merchant When I request "GET /moments/1" Then I get a "200" response And scope into the "data" property And the properties exist: """ id … created_at """

Page 47: Api pain points

Scenario: Try to find an invalid checkin

When I request "GET /checkins/nope"

Then I get a "404" response

Page 48: Api pain points

Scenario:Wrong Arguments for user follow

Given I have the payload: """ {"is_following": "foo"} """

When I request "PUT /users/1”

Then I get a "400" response

Page 50: Api pain points
Page 51: Api pain points

VERSIONING/V1/DOESNT COUNT

https://api.example.com/v1/places

Page 52: Api pain points

VERSIONING/V1/DOESNT COUNT

https://api-v1.example.com/places

Page 53: Api pain points

VERSIONING/V1/DOESNT COUNT

Accept: application/vnd.com.example.api-v1+json

Accept: application/vnd.com.example.api-v2+json

Page 54: Api pain points

VERSIONING/V1/DOESNT COUNT

Accept: application/vnd.com.example.user-v2+json

Accept: application/vnd.com.example.user-v3+json

Page 55: Api pain points

VERSIONING/V1/DOESNT COUNT

Copy Facebook

Maybe?

THIS ONE TIME!

Page 56: Api pain points

EVERYTHING IS WRONGDONT BE THAT GUY

troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html

Page 57: Api pain points

leanpub.com/build-apis-you-wont-hate/c/CAPEMAN2014