Top Banner
Versioning APIs Marcelo Cure
26

TDC2016POA | Trilha Arquitetura - Versioning APIs

Jan 10, 2017

Download

Education

tdc-globalcode
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: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Versioning APIs

Marcelo Cure

Page 2: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Why do I care?

● Distributed components● Isolation● Microservices evolving independently● Deploy anytime

Page 3: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Contracts break

Page 4: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Why contracts break?

Page 5: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Consumers set expectations

Page 6: TDC2016POA | Trilha Arquitetura -  Versioning APIs

APIs evolve

Page 7: TDC2016POA | Trilha Arquitetura -  Versioning APIs

We need to change them

Page 8: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Non breaking changes

Page 9: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Breaking changes

Page 10: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Breaks consumer :’(

Page 11: TDC2016POA | Trilha Arquitetura -  Versioning APIs

And now?

Page 12: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Version it!

Page 13: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Communication

Page 14: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Be cautious● Too many versions;● Complexity;● Bugs;

Page 15: TDC2016POA | Trilha Arquitetura -  Versioning APIs

How to version my API?

Page 16: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Version as path/query parameter

https://host/api/v1/bands/1/albuns https://host/api/bands/albuns?version=1 ● Explicit

● Cleaner for consumers● Harder to identify● Intrusive

Page 17: TDC2016POA | Trilha Arquitetura -  Versioning APIs
Page 18: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Version as a header

Accept: application/json; version=1.0

● Less intrusive● Does not polute URL● Easier to identify● No specification for that

or use a custom header

Page 19: TDC2016POA | Trilha Arquitetura -  Versioning APIs
Page 20: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Take care of your contracts

● It’s your front door● Care about your design● Discuss contract changes, do it cautiously● Postpone decisions● Test your contracts

Page 21: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Bad design -> contract break -> versioning

Page 22: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Don’t have a lot of versions

Page 23: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Remove deprecated versions

Page 24: TDC2016POA | Trilha Arquitetura -  Versioning APIs

You need to get used...

Contracts break, it’s natural

Page 25: TDC2016POA | Trilha Arquitetura -  Versioning APIs

But not so often

Page 26: TDC2016POA | Trilha Arquitetura -  Versioning APIs

Thanks

Marcelo Cure - Software Engineer at ilegra

[email protected]

Twitter: @__cure

http://marcelo-cure.blogspot.com.br