How to build API Versioning for zero downtime

The versioning of an API is probably one of the most, if not the most, controversial subject around APIs. On one hand, you have a lot of people debating about what is the best way to communication which version of the API you want to call: via the URL, via the Accept header, via a custom header, via the media-type, and probably more… But, on the other hand, you have famous quote from Roy Fielding, the guy who invented REST: "What is the best practice for versioning a REST API? DON’T." These two extremes could be understood as the natural tension between “API Providers” and “API Consumers”. API Providers want to change their APIs as soon as they have a new brilliant idea. While, on the other side, API Consumers want the APIs they use to stay stable. Combining design principles coming from the way changes have been handled over time on the Internet, together with new ideas such as version-pinning introduced by Stripe, we are trying to build an API Platform targeting zero down time! Indeed, when was the last time the Internet has been rebooted to apply a change?

Patrice Krakow is currently the lead architect of the new API Platform of ING. He starts focusing on integration 20 years ago, going through various technologies such as EDIFACT, X12, SGML, CORBA, DCOM, XML, SOA, ESB, before reaching REST APIs. In 2012, he joined ING to participate in the implementation of an SOA Architecture. But, he also continued to explore new technologies during his ‘night-shift’, and co-founded an API company based in the Silicon Valley, Eligible. After one year without enough sleep, he decided to keep his day-job in the bank and re-focus, grudgingly, to SOA. Luckily, in 2015, REST made his journey from the Silicon Valley to the world of big companies, such as Banks, allowing Patrice to work back on web APIs during his day-job!