operational api design anti-patterns (jason harmon)

38
Operational API Design Anti-Patterns Jason Harmon @jharmn @typeform

Upload: nordic-apis

Post on 09-Jan-2017

57 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Operational API design anti-patterns (Jason Harmon)

Operational API Design

Anti-PatternsJason Harmon @jharmn

@typeform

Page 2: Operational API design anti-patterns (Jason Harmon)

Head of APIs @Typeform

Leading microservice replatform

Leading developer focused initiatives

Previous API experience:

PayPal/Braintree

uShip

Wayport / AT&T

Jason Harmon

Old blogs at:APIUX.com

Pragmaticapi.com

Page 3: Operational API design anti-patterns (Jason Harmon)

“API Design Anti-Patterns” talk from last year

https://www.youtube.com/watch?v=lotdj-ry8YA

Design issues don’t always cause operational issues.

Haven’t we already talked about this?

Page 4: Operational API design anti-patterns (Jason Harmon)

Usability issues Operational issues

Page 5: Operational API design anti-patterns (Jason Harmon)

HTTP GET instead of POST

Page 6: Operational API design anti-patterns (Jason Harmon)

Landing

GET /landing200 OK{ “Token”: “abc123”}

User Human

Page 7: Operational API design anti-patterns (Jason Harmon)

A Form

User Human

Page 8: Operational API design anti-patterns (Jason Harmon)

Submit

User Human

Page 9: Operational API design anti-patterns (Jason Harmon)

Submit

User Human

Click “Back” ?

Submit needs to have a landing(to derive “response rate”)POST /submissions (+landing_id in body)

Page 10: Operational API design anti-patterns (Jason Harmon)

Issue: GET Caches

+ HTTP GET

GET /landing

Caching ProxyOr CDN

Cached responseX

200 OK{ “Token”: “abc123”}

Page 11: Operational API design anti-patterns (Jason Harmon)

Landings: Better

User Human POST /landing200 OK{ “Token”: “abc123”}

Page 12: Operational API design anti-patterns (Jason Harmon)

Identification: Unexpected cached API calls from browser/proxy/etc

Solution: Use POSTLive already?

Just add POSTAdd ?cache_buster=[random] to GET

Summary: GET instead of POST

Page 13: Operational API design anti-patterns (Jason Harmon)

Polling APIs

Page 14: Operational API design anti-patterns (Jason Harmon)

Polling APIs

Problem Identification:● Large dataset● Expensive queries● Frequently changing data● Lots of clients

Client app

Every 5 minsThousands of

forms

Page 15: Operational API design anti-patterns (Jason Harmon)

Solution: Webhooks

Client app

Register URL

New data = POST

Still needed for missing data

Page 16: Operational API design anti-patterns (Jason Harmon)

WHAT IF THIS IS ALREADY HAPPENING!!?!

Client appOptions:● Launch webhooks!● Caching (if possible)● Read-only DB replica● Cheaper query to check for

new data before retrieval

Page 17: Operational API design anti-patterns (Jason Harmon)

Rigid Hierarchy

Page 18: Operational API design anti-patterns (Jason Harmon)

Microservices structure: Forms

Page 19: Operational API design anti-patterns (Jason Harmon)

Issue: Many callsMicroservices

Page 20: Operational API design anti-patterns (Jason Harmon)

Form Structure + Backend-for-FrontendMicroservices

BFF

AKA● Composition● Orchestration

GraphQL is another potential option

Page 21: Operational API design anti-patterns (Jason Harmon)

Problem: Client performance in UXN+1 calls (client calls for parent, then calls for

related/child items)Identification:

Data lacking in main resource, usually for UX devs.

Easy to add in live scenarios

Summary: Rigid resource structure

Page 22: Operational API design anti-patterns (Jason Harmon)

Generic Actions

Page 23: Operational API design anti-patterns (Jason Harmon)

AKA RPC

Commonly used in controlled state transitions:

POST /forms/:id/publish

{

“comment”: “It’s the right time”

}

What’s an “action”

Page 24: Operational API design anti-patterns (Jason Harmon)

Perform multiple actions with one endpoint

POST /forms/:id/change-status

{

“action”: “publish”,

“comment”: “My favorite version of this form”

}

Generic “action”

Page 25: Operational API design anti-patterns (Jason Harmon)

Product Owner- Any performance issues?

Devs

Page 26: Operational API design anti-patterns (Jason Harmon)

Product owner: - So how many “publish” actions happened?

Devs

Page 27: Operational API design anti-patterns (Jason Harmon)

TO THE LOGS!

Page 28: Operational API design anti-patterns (Jason Harmon)

Dear Product Owner. We need to build a new metrics system to answer that question.

- Yours truly, dev team.

PO

Page 29: Operational API design anti-patterns (Jason Harmon)

Product Owner’s reply:

Page 30: Operational API design anti-patterns (Jason Harmon)

Cheap visibility is a good thing

Page 31: Operational API design anti-patterns (Jason Harmon)

Generic ActionsIdentification:

POST /resource/:id/generic-name + {action: process}

Problem: “Protocol tunneling”: Lack of traceability, more work for metrics (vs cheaper HTTP logs method)

Solution: POST /resource/:id/action-name

Already live? ?action=name in optional query parameter

Page 32: Operational API design anti-patterns (Jason Harmon)

API Design Takeaways

Page 33: Operational API design anti-patterns (Jason Harmon)

Use cases first, then design.

Page 34: Operational API design anti-patterns (Jason Harmon)

Design can influence performance.

Page 35: Operational API design anti-patterns (Jason Harmon)

Structure is good, but be prepared to blur the lines.

Page 36: Operational API design anti-patterns (Jason Harmon)

Design can put out fires.

Page 37: Operational API design anti-patterns (Jason Harmon)

Don’t forget the logs.

Page 38: Operational API design anti-patterns (Jason Harmon)

That’s it!