Top Banner
@jphenow What TDD Can Teach Us About API Design Jon Phenow Highrise
29

What TDD Can Teach Us About API Design

Jan 19, 2017

Download

Software

Jon Phenow
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: What TDD Can Teach Us About API Design

@jphenow

What TDD Can Teach Us About API Design

Jon Phenow Highrise

Page 2: What TDD Can Teach Us About API Design

@jphenow

What is TDD?

Page 3: What TDD Can Teach Us About API Design

@jphenow

Test Driven Development

• Test first

• Run and watch test fail

• Fill in the funcGonality that makes the test pass

• Run and watch test pass

Page 4: What TDD Can Teach Us About API Design

@jphenow

TDD Benefits

• Proof

• Fast feedback loop

• Test Coverage

• Code Design

Page 5: What TDD Can Teach Us About API Design

@jphenow

TDD’s Effect on Design

• Testable code is usable code

• Explicitly illustrates dependencies of an operaGon

• Exposes difficulty

Page 6: What TDD Can Teach Us About API Design

@jphenow

• Design is affected because of perspecGve

• WriGng as a user

• Not wriGng what’s simple as an author

TDD’s Effect on PerspecGve

Page 7: What TDD Can Teach Us About API Design

@jphenow

PerspecGve is everything

Page 8: What TDD Can Teach Us About API Design

@jphenow

API Design is like UX Design

Page 9: What TDD Can Teach Us About API Design

@jphenow

What’s an API User

• Not user bob vs. user alice

• Topical

Page 10: What TDD Can Teach Us About API Design

@jphenow

An API workflow

• Get a Client Token

• AuthenGcate to receive a user token

• Make requests using this token

Page 11: What TDD Can Teach Us About API Design

@jphenow

Let’s Talk Real World

Page 12: What TDD Can Teach Us About API Design

@jphenow

“Real” World

• Legacy CMS for Tiered Sports OrganizaGons

• Leagues, divisions, teams, games

• Third-Party wants to automaGcally update game statuses due to weather informaGon from their system

Page 13: What TDD Can Teach Us About API Design

@jphenow

“Real” World• Call support for an API Key

• Copy this key into headers

• Query CMS nodes for leagues matching our query

• Query each of those for children nodes that are teams

• Query each of those for a list of games that would be affected by today’s weather

• Update each of those because its too nice out to play baseball today

Page 14: What TDD Can Teach Us About API Design

@jphenow

This sucks

Page 15: What TDD Can Teach Us About API Design

@jphenow

First-glance Problems

• Client admin

• Lots of steps to get something done

• Design of the legacy internals is bleeding out

Page 16: What TDD Can Teach Us About API Design

@jphenow

Dealing with bleeding out

Page 17: What TDD Can Teach Us About API Design

@jphenow

Bleeding out

• Consider who’s using your API

• A Sport CMS with an API probably has disGnct two users

• Sports/Stats

• Content/Site Structure

Page 18: What TDD Can Teach Us About API Design

@jphenow

Page 19: What TDD Can Teach Us About API Design

@jphenow

Fix it

• Separate Users

• Your internal choices shouldn’t necessarily bleed out

• DisGll funcGonality and data

Page 20: What TDD Can Teach Us About API Design

@jphenow

Recall Some “Real” World• Query CMS nodes for leagues matching our query

• Query each of those for children nodes that are teams

• Query each of those for a list of games that would be affected by today’s weather

• Update each of those because its too nice out to play baseball today

Page 21: What TDD Can Teach Us About API Design

@jphenow

Fix it

• Don’t solve for cancelling all rained-out games at once

• Solve for updaGng a group of games with search parameters

Page 22: What TDD Can Teach Us About API Design

@jphenow

Don’t over fix it

• Only a few types of users

• Focus on the 80%

Page 23: What TDD Can Teach Us About API Design

@jphenow

There are limits

• Be protecGve of what you provide

• Performance

Page 24: What TDD Can Teach Us About API Design

@jphenow

Low-FricGon APIs Are a Feature

Page 25: What TDD Can Teach Us About API Design

@jphenow

PerspecGve is the key

Page 26: What TDD Can Teach Us About API Design

@jphenow

Things I didn’t address

• Protocol/Pafern: SOAP/REST

• AuthenGcaGon: SAML/OAuth2/JWT

• API Versioning

Page 27: What TDD Can Teach Us About API Design

@jphenow

Conclusion

• API Design is hard

• To the user it should feel fun, simple and powerful

• Consider what you have, what they want and express that in an API

Page 28: What TDD Can Teach Us About API Design

@jphenow

Page 29: What TDD Can Teach Us About API Design

@jphenow