+ All Categories
Home > Technology > 7 Principles of API Design - Waza

7 Principles of API Design - Waza

Date post: 28-Nov-2014
Category:
Upload: twilio
View: 3,575 times
Download: 0 times
Share this document with a friend
Description:
Tim Milliron's talk from Heroku's Waza event on "7 Principles of API Design at Twilio"
15
twilio CLOUD COMMUNICATIONS Designing the Best Telecommunications API Tim Milliron, Director of Engineering @timmilliron
Transcript
Page 1: 7 Principles of API Design - Waza

twilioCLOUD COMMUNICATIONS

Designing the Best Telecommunications API

Tim Milliron, Director of Engineering@timmilliron

Page 2: 7 Principles of API Design - Waza

SMS Phone Numbers

Voice

Who is twilio?

• Inbound• Outbound• Mobile VoIP• Browser VoIP

RESTful web APIs to automateVoice & SMS communications

• Incoming• Outgoing• Short Codes

• PhoneNumber Provisioning

• ShortCode Applications

Page 3: 7 Principles of API Design - Waza

(415) 233-WAZA• Find & buy a number:

curl -u $U:$Phttps://api.twilio.com/2010-04-01/Accounts/AC123/AvailablePhoneNumbers/US/Local?Contains=415***WAZA

curl -u $U:$P -d “PhoneNumber=415233WAZA”https://api.twilio.com/2010-04-01/Accounts/AC123/IncomingPhoneNumbers/

• Make an outgoing call:curl -u $U:$P -d “Url=www.example.com/outgoing.xml”-d “From=4152339292” -d “To=4158675309”https://api.twilio.com/2010-04-01/Accounts/AC123/Calls/

• Receive an incoming call:<Response> <Say>Thanks for calling the Waza Twilio number! Huzzah!</Say> <Sms>Heroku’s Waza Rocks!</Sms></Response>

Page 4: 7 Principles of API Design - Waza

7 Principles

Page 5: 7 Principles of API Design - Waza

#1 APIs are for Abstraction

Example: DIDsDID  (Direct  Inward  Dial)  —  Inbound-­‐only  phone  number  assigned  to  a  group  of  phone  lines  that  allows  a  phone  system  to  route  to  a  unique  location  or  person.  A  group  of  DIDs  is  often  assigned  to  a  single  trunk  group.  DID  numbers  are  not  sent  out  as  the  ANI  when  the  caller  places  an  outbound  call.

Developers don’t give a f*** about DIDstwilio’s API talks PhoneNumbers(they work for incoming & outgoing)

Page 6: 7 Principles of API Design - Waza

#2 What’s the noun?Speak resources:

GET api.twilio.com/.../Calls

GET api.twilio.com/.../Calls/CA123

POST api.twilio.com/.../Calls

Not RPC:

GET api.twilio.com/.../GetCalls/

POST api.twilio.com/.../PlaceCall

Page 7: 7 Principles of API Design - Waza

#3 Be RESTfulHypermedia for sub-resource traversal:

<Account><Sid>AC123</Sid><OwnerAccountSid>AC456</OwnerAccountSid><FriendlyName>[email protected]'s Account</FriendlyName><Status>active</Status>...<Uri>

/2010-04-01/Accounts/AC123</Uri><SubresourceUris>

<AvailablePhoneNumbers>/2010-04-01/Accounts/AC123/AvailablePhoneNumbers

</AvailablePhoneNumbers><Calls>

/2010-04-01/Accounts/AC123/Calls</Calls>...

</SubresourceUris></Account>

Page 8: 7 Principles of API Design - Waza

#3 Be RESTfulHypermedia for list traversal:

<SMSMessages page="0" numpages="16" pagesize="50" total="780" start="0" end="49" uri="/2010-04-01/Accounts/AC123/SMS/Messages" firstpageuri="/2010-04-01/Accounts/AC123/SMS/Messages?Page=0&PageSize=50" previouspageuri="" nextpageuri="/2010-04-01/Accounts/AC123/SMS/Messages?Page=1&PageSize=50" lastpageuri="/2010-04-01/Accounts/AC123/SMS/Messages?Page=15&PageSize=50">

...</SMSMessages>

Page 9: 7 Principles of API Design - Waza

#4 The API Giveth...... but the API can’t (usually) taketh away

It’s much easier to add somethingthan to remove something

➡ Get it in developers’ hands,see what use cases develop.

➡ Then, aggressively addfrequently-requested features

Page 10: 7 Principles of API Design - Waza

/Calls?access_token=xxxyyyzzz/IncomingPhoneNumbers?access_token=xxxyyyzzz...

#5 The Smallest API Possible...

twilio.com/authorize

access_token=xxxyyyzzz

Page 11: 7 Principles of API Design - Waza

/Calls/IncomingPhoneNumbers...

#5 The Smallest API Possible...

twilio.com/authorize

account_sid=AC678

Page 12: 7 Principles of API Design - Waza

#6 ...But No Smaller“As close to C as possible, but no closer” - Bjarne Stroustrup, creator of C++

Make the common case easy.

This works, and it’s generic:curl api.twilio.com/.../AvailablePhoneNumbers?Contains=510*******

But, this is what most developers want:curl api.twilio.com/.../AvailablePhoneNumbers?AreaCode=510

Page 13: 7 Principles of API Design - Waza

#7 Don’t Settle

• Late changes are OK

• Don’t be afraid to version(with good reason)

• Get feedback early, often, & throughout

Discuss, spec, write, try it, rewrite discuss it some more, rewrite again

Page 14: 7 Principles of API Design - Waza

Process PerspectiveDiscuss

Spec

Build

Developers

Developers

Developers

Page 15: 7 Principles of API Design - Waza

twilioCLOUD COMMUNICATIONS

Tim Milliron, Director of Engineering@timmilliron


Recommended