API World 2016 - A five-sided prism polarizing Web API development

47
A five-sided prism polarizing Web API development Jerome Louvel Chief Geek & Founder @jlouvel

Transcript of API World 2016 - A five-sided prism polarizing Web API development

Page 1: API World 2016 - A five-sided prism polarizing Web API development

A five-sided prism polarizing Web API

development

Jerome LouvelChief Geek & Founder

@jlouvel

Page 2: API World 2016 - A five-sided prism polarizing Web API development

We know about

APIs!

http://restlet.com

Page 3: API World 2016 - A five-sided prism polarizing Web API development

Pink Floyd

Dark side of the moon

DATA

API

PRISM

Page 4: API World 2016 - A five-sided prism polarizing Web API development

DRIVEN

TEST

APIprism

Page 5: API World 2016 - A five-sided prism polarizing Web API development

Code-first

Page 6: API World 2016 - A five-sided prism polarizing Web API development

Fire up IDE

Setup favorite

tech stack

Start coding!

Easy to get

started with for

a developer

Page 7: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel7

Java annotation hell…

Often annotation

heavy in Java:

Annotation driven

development

Page 8: API World 2016 - A five-sided prism polarizing Web API development

No code, only

annotations, just the

method signature!

And that’s real life code!

Page 9: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel9

Brittle API contract

Refactoring might

easily break the

implicit contract

Page 10: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel10

Spaghetti coding

Cross-cutting

concerns

intermixed

Mixing URL paths, logging,

business logic, security

constraints, API related

annotations…

Page 11: API World 2016 - A five-sided prism polarizing Web API development

Logging, security,

transactions, session

management,

exception handling…

One line of

business logic!

Page 12: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel12

You don’t always have the choice

Inheriting existing code bases, services, Web APIs?

• not a choice, you’ll work code-first!

Mitigation: safe-guards

• derive a contract

• build step to check

contract conformance

An API contract diff

tool would be handy,

any taker?

Page 13: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel13

Textual diff vs semantic diff?

– Renamed path /users/{user_id} into /v1/users/{user_id}

+ Added path /v1/users

Also messages

warning the changes

are backward

incompatible?

Page 14: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel14

Pros and cons

Easy to get

started with for

a developer

Refactoring might

easily break the

implicit contract

Cross-cutting

concerns

intermixed

Often annotation

heavy in Java:

Annotation driven

development

Page 15: API World 2016 - A five-sided prism polarizing Web API development

DATA-first

Page 16: API World 2016 - A five-sided prism polarizing Web API development

Existing database:

relational,

NoSQL,graph

Data schema:

SQL schema,

IDL,

JSON schema…

Spreadsheet:

CSV, Excel,

Google Sheets

Existing CRUD:

CRUD Web API,

3rd party Web API

Handy to

expose

existing data

Page 17: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel17

Pretty tabular…

Not much

control on the

API contract

Page 18: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel18

Dumb API

Dumb API:

no business

logic out of

the box

Page 19: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel19

Pros and cons

Handy to

expose

existing data

Not much

control on the

API contract

Dumb API: no

business logic

out of the box

Page 20: API World 2016 - A five-sided prism polarizing Web API development

Contract-first

Page 21: API World 2016 - A five-sided prism polarizing Web API development
Page 22: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel22

Twitter poll

Not statistically

significant :-)

Interesting

feedback!

Page 23: API World 2016 - A five-sided prism polarizing Web API development

Contract as

the source

of truth

Also a key

communication

element!

Page 24: API World 2016 - A five-sided prism polarizing Web API development

Can derive &

generate

useful artifacts

Client SDKs Server skeletons

Static, dynamic,

live mocks

Test stubs

Sandbox & live

playgrounds

Static

documentation

Documentation

portal

Page 25: API World 2016 - A five-sided prism polarizing Web API development

Facilitate

team

collaboration

Page 26: API World 2016 - A five-sided prism polarizing Web API development

👨🏾

👩🏼Backend

team

Frontend

team

Collaborate on

contractContract ready,

mock generated

Yay! Shorter time

to market!

Page 27: API World 2016 - A five-sided prism polarizing Web API development

Code generation

can overwrite

customization

Favor composition over

inheritance!

Page 28: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel28

Pros and cons

Contract as

the source of

truth

Facilitate

team

collaboration

Can derive &

generate useful

artifacts

Code generation

can overwrite

customization

Page 29: API World 2016 - A five-sided prism polarizing Web API development

TEST-first

Page 30: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel30

Test Driven Development

RED

GREENREFACTOR

Page 31: API World 2016 - A five-sided prism polarizing Web API development

Behavior driven:

clarifies how the

API is working

Page 32: API World 2016 - A five-sided prism polarizing Web API development

Can ensure API

implementation

and behavior

are in sync

Page 33: API World 2016 - A five-sided prism polarizing Web API development

Harder to derive

& generate

useful artifacts

Not impossible, but

not available yet

Page 34: API World 2016 - A five-sided prism polarizing Web API development

Hard to define

tests without

anything to test

Mitigation:

Solutions with live mocks

can ease authoring tests

for defining the behavior

Page 35: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel35

Pros and cons

Behavior driven:

clarifies how the

API is working

Harder to derive

& generate

useful artifacts

Hard to define

tests without

anything to test

Can ensure API

implementation

and behavior

are in sync

Page 36: API World 2016 - A five-sided prism polarizing Web API development

DOC-first

Page 37: API World 2016 - A five-sided prism polarizing Web API development

Use case

driven, great for

onboarding

Page 38: API World 2016 - A five-sided prism polarizing Web API development

Doesn’t necessarily

generate a useful

contract

Page 39: API World 2016 - A five-sided prism polarizing Web API development

Natural

language is

ambiguous

ORANGE

Page 40: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel40

Pros and cons

Use case

driven, great for

onboarding

Doesn’t necessarily

generate a useful

contract

Natural

language is

ambiguous

Page 41: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel

Summary

Page 42: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel42

Five-sided prism polarizing APIs development

APIprism

TEST

No good or one way of

tackling Web API

development,

just tradeoffs! Pick your side,

but do it well!

Page 43: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel43

Master API DevOps at our Restlet meetup

Thursday, September 22nd - 7pm at our Palo Alto office

With 2 million developers on the Restlet Platform and decades of experience with API

development, Jerome will quickly catch you up with the latest in API design, testing, and

deployment.

For this hands-on workshop, you will craft your first API with the help of an API guru and the best visual API

designer on the market. You just need to come with your laptop, there’s nothing to install!

Interested? Register by clicking the link in our

pinned tweet. You will receive all the information

required prior to the meetup.

Page 44: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel

Thanks for your attention

Page 45: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel45

Image credits

• Pink Floyd’s Dark Side of the Moon prism

https://i.ytimg.com/vi/NJQnzmH6jgc/maxresdefault.jpg

• Thumb-up

https://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Thumbs_up.svg/2000px-Thumbs_up.svg.png

• Thumb-down

https://upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Thumbs_down.svg/1000px-

Thumbs_down.svg.png

• Engine start

https://www.flickr.com/photos/npobre/2601582256

• Data graph

https://upload.wikimedia.org/wikipedia/commons/9/9b/Social_Network_Analysis_Visualization.png

• Spaghetti

https://upload.wikimedia.org/wikipedia/commons/4/4a/Pollo_funghi_spaghetti_-_Paesano_Restaurant.jpg

• Northern mocking birg

https://upload.wikimedia.org/wikipedia/commons/c/cf/Northern_Mocking_bird_-

_Mimus_polyglottos.JPG

Page 46: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel46

Image credits

• Boarding

https://c2.staticflickr.com/4/3024/2503923533_8381d55537_b.jpg

• Contract

https://pixabay.com/static/uploads/photo/2014/08/26/19/20/document-428333_960_720.jpg

• Orange paint

http://www.publicdomainpictures.net/pictures/20000/velka/painting-wall-11291581001pYx.jpg

• Orange fruit

https://www.flickr.com/photos/manicomi/2260527943

• Handbook

http://www.intexte.net/docenligne/carnet_autie.jpg

• Behavior

http://www.thebluediamondgallery.com/pictures/behavior.jpg

• Orsay Museum clock

https://www.flickr.com/photos/davidden/2320748091

• Factory workers

https://upload.wikimedia.org/wikipedia/commons/0/08/Seagate_Wuxi_China_Factory_Tour.jpg

Page 47: API World 2016 - A five-sided prism polarizing Web API development

@jlouvel47

Image credits

• Hell

https://upload.wikimedia.org/wikipedia/commons/f/f5/An_angel_leading_a_soul_into_hell._Oil_painting_

by_a_followe_Wellcome_L0030887.jpg

• Excel

https://i.ytimg.com/vi/nbYi2x84EW0/maxresdefault.jpg

• Broken glass

https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Broken_glass.jpg/1280px-Broken_glass.jpg

• Truth

https://pixabay.com/static/uploads/photo/2013/07/25/11/52/truth-166853_960_720.jpg

• Car assembly line

https://upload.wikimedia.org/wikipedia/commons/f/f1/Hyundai_car_assembly_line.jpg

• Team collaboration

https://static.pexels.com/photos/7092/desk-office-hero-workspace.jpg