SlideShare a Scribd company logo
GET /presentation HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"what": "Versioning is a Red Herring",
"where": "NDC Lightning",
"when": "2017-10-26"
}
Asbjørn Ulsberg
Business Architect
Web, API, Interfaces
Some people, when confronted
with a problem, think “I know, I’ll
use versioning.”
Now they have 2.1.0 problems.
Assert.That(claim, Is.Correct);
All software should have a version number
The version number identifies
the capabilities of the software
60 Years
API Change Strategy
Without a version number, chaos ensues
should have version numbersWeb
Right?
sitesAPIs
https://www.example.com/
https://www.example.com/v1/
https://api.example.com/v1/
Web APIs are not statically
linked at compile time
A globally distributed web service
is not like a local software library
Thought experiment
https://www.example.com/v1/
https://api.example.com/v1/
Thought experiment
https://www.example.com/v1/
https://api.example.com/v1/
Thought experiment
https://www.example.com/v1/
https://api.example.com/v1/
Thought experiment
https://www.example.com/
https://api.example.com/
Hidden costs of versioning
?
Time
Cost
Scrap your versioning strategyVersioning is a Red Herring
Versioning StragegyChange
Change Strategy
1 2 3 4 5
Change Strategy
1. What to version
✓ ✓ ✓ ✓
Change Strategy
1. What to version
✗ ✗ ✗
{…}
Change Strategy
1. You must not take anything away
2. You must not change processing rules
3. You must not make optional things required
4. Anything you add must be optional
2. Extension rules
Change Strategy
1. You must not take anything away
2. You must not change processing rules
3. You must not make optional things required
4. Anything you add must be optional
2. Extension rules
Change Strategy
3. Breaking changes
{…}*URI
{…}
Change Strategy
3. Breaking changes
Change Strategy
4. Monitoring
.LOG
Change Strategy
5. Communication plan
POST /ndc HTTP/1.1
Content-Type: application/json
{
"aquire": "Knowledge",
"from": "NDC Lightning",
"when": "2017-10-26"
}
API Change Strategy
Change Strategy
To The Rescue!
acquire acquireaquire
1 2 3 4
5678
$ …⬆acquireaquire
9
10
Thank You!
@asbjornu
asbjorn.ulsberg@payex.com
slack.httpapis.com
Asbjørn Ulsberg

More Related Content

PDF
Serverless computing con Azure Functions
PDF
Building Composable Serverless Apps with IOpipe
PPTX
Serverless by examples and case studies
PPTX
Web-centric application architectures
PDF
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
PDF
[DevDay 2017] Serverless Architecture - Speaker: Trung Huynh - Software Engin...
PDF
Олександр Краковецький - UWP
PDF
Ryan Brown - Open Community
Serverless computing con Azure Functions
Building Composable Serverless Apps with IOpipe
Serverless by examples and case studies
Web-centric application architectures
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] Serverless Architecture - Speaker: Trung Huynh - Software Engin...
Олександр Краковецький - UWP
Ryan Brown - Open Community

What's hot (18)

PDF
Chris Anderson and Yochay Kiriaty - Serverless Patterns with Azure Functions
PDF
Real World Progressive Web Apps (Building Flipkart Lite)
PDF
Ben Kehoe - Serverless Architecture for the Internet of Things
PDF
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
PDF
Get your mobile app in production in 3 months: DevOps and Infrastructure
PDF
Get your mobile app in production in 3 months: Backend
PDF
Serverless Architecture Patterns - Manoj Ganapathi
PDF
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
PDF
Rob Gruhl and Erik Erikson - What We Learned in 18 Serverless Months at Nords...
PPTX
devworkshop-04_13_2016-ucsdnow-presentation
PDF
"Building Cross-platform Without Sacrificing Performance" by Simon Sturmer (K...
PDF
Vered Flis: Because performance matters! Architecture Next 20
PDF
Combining OpenWhisk (serverless), Open API (swagger) and API Connect to build...
PDF
Introducción al JAMStack - JS Ourense
PPTX
Chris O'Brien - Building AI into Power Platform solutions
PDF
PPTX
Serverless with Azure Functions
PPTX
Azure functions
Chris Anderson and Yochay Kiriaty - Serverless Patterns with Azure Functions
Real World Progressive Web Apps (Building Flipkart Lite)
Ben Kehoe - Serverless Architecture for the Internet of Things
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: DevOps and Infrastructure
Get your mobile app in production in 3 months: Backend
Serverless Architecture Patterns - Manoj Ganapathi
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Rob Gruhl and Erik Erikson - What We Learned in 18 Serverless Months at Nords...
devworkshop-04_13_2016-ucsdnow-presentation
"Building Cross-platform Without Sacrificing Performance" by Simon Sturmer (K...
Vered Flis: Because performance matters! Architecture Next 20
Combining OpenWhisk (serverless), Open API (swagger) and API Connect to build...
Introducción al JAMStack - JS Ourense
Chris O'Brien - Building AI into Power Platform solutions
Serverless with Azure Functions
Azure functions
Ad

Similar to API Change Strategy (20)

PDF
Andriy Vandakurov about "Frontend. Global domination"
PDF
Pivorak.javascript.global domination
PPTX
webdevelopmentppt-210923044639 (1).pptx
PDF
Tutorial: Develop Mobile Applications with AngularJS
PDF
Writing less code with Serverless on AWS at OOP 2022
PPT
Aspnet2.0 Introduction
PDF
Always on! ... or not?
PPT
Openkapow At Mashup Camp 5
PDF
Exploring pwa for shopware
PPTX
Accelerating Application Delivery with OpenShift
PDF
Writing less code with Serverless on AWS at AWS Community Day DACH 2021
PDF
Openshift Container Platform: First ItalyMeetup
PDF
Front-end. Global domination
PDF
Frontend. Global domination.
PPTX
Crosswalk and the Intel XDK
PDF
Building Desktop RIAs with PHP, HTML & Javascript in AIR
PPTX
Best of Microsoft Dev Camp 2015
PPTX
PDF
Making Of PHP Based Web Application
PPTX
Angularjs Tutorial for Beginners
Andriy Vandakurov about "Frontend. Global domination"
Pivorak.javascript.global domination
webdevelopmentppt-210923044639 (1).pptx
Tutorial: Develop Mobile Applications with AngularJS
Writing less code with Serverless on AWS at OOP 2022
Aspnet2.0 Introduction
Always on! ... or not?
Openkapow At Mashup Camp 5
Exploring pwa for shopware
Accelerating Application Delivery with OpenShift
Writing less code with Serverless on AWS at AWS Community Day DACH 2021
Openshift Container Platform: First ItalyMeetup
Front-end. Global domination
Frontend. Global domination.
Crosswalk and the Intel XDK
Building Desktop RIAs with PHP, HTML & Javascript in AIR
Best of Microsoft Dev Camp 2015
Making Of PHP Based Web Application
Angularjs Tutorial for Beginners
Ad

Recently uploaded (20)

PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Machine learning based COVID-19 study performance prediction
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Modernizing your data center with Dell and AMD
PDF
Spectral efficient network and resource selection model in 5G networks
Diabetes mellitus diagnosis method based random forest with bat algorithm
Digital-Transformation-Roadmap-for-Companies.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
Review of recent advances in non-invasive hemoglobin estimation
Mobile App Security Testing_ A Comprehensive Guide.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Machine learning based COVID-19 study performance prediction
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
NewMind AI Monthly Chronicles - July 2025
MYSQL Presentation for SQL database connectivity
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Encapsulation_ Review paper, used for researhc scholars
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation theory and applications.pdf
Network Security Unit 5.pdf for BCA BBA.
Modernizing your data center with Dell and AMD
Spectral efficient network and resource selection model in 5G networks

API Change Strategy

Editor's Notes

  • #2: Hello! I'm going to talk a bit about how, in the world of distributed software, versioning is a red herring.
  • #3: I’m Asbjørn Ulsberg, Business Architect for Web, API design and interfaces. In PayEx.
  • #4: I’ll start off with this quote from Brandon Byars https://martinfowler.com/articles/enterpriseREST.html
  • #5: Now, let me make a few claims about software and versioning some of you might agree with
  • #6: All software should have a version number
  • #7: The version number identifies the capabilities of the software
  • #8: We have been giving software version numbers for approximately 60 years, at least since Fortran II came out in 1958. http://www.technologizer.com/2009/07/14/version-numbers/
  • #9: Even things that aren’t software have version numbers these days http://thisisfivesee.blogspot.no/2013/11/new-media-and-government-relations.html https://twitter.com/eynews/status/791232910766534656
  • #10: Without a version number, chaos ensues
  • #11: APIs should have version numbers Web APIs should also have version numbers Right? What if we replace "APIs" with "sites"? Should web sites have version numbers?
  • #12: When was the last time you saw a web site with a version number?
  • #13: When we never see a v1 in a web site, why is it so common in an API? Aren’t JSON and HTML served over the exact same infrastructure? What’s different?
  • #14: Because web APIs, unlike software libraries, are NOT statically linked at compile time, we should perhaps think differently about how we version them.
  • #15: A globally distributed web service such as a web API is not like a locally linked software library. They are both software, but everything from how they are developed and deployed to how they are hosted is usually completely different. Therefore, shouldn’t how we version it be different too?
  • #16: So, here’s a thought experiment
  • #17: If web sites can exist without a version number
  • #18: Perhaps web APIs can too?
  • #19: Perhaps web APIs can too?
  • #20: There are hidden costs to versioning: There’s a higher maintenance cost, because a versioned codebase is a larger codebase. Each version of your API needs to be independently developed, patched, documented and deployed. Broad-stroke API versioning will give resources in the API that hasn’t changed a new version, creating an exponentially larger API surface to maintain than a more fine-grained strategy. If all versions share the same codebase, all versions needs to be taken into consideration when touching any part of the code, making development slower and more bug-ridden. All of this leads to sad and discontent developers, which are less productive and less engaged, and that can have a huge cost. Since version numbers hide the fact that the new API does not support the features of the old one, there’s little incentive to figure out how to deal with breaking changes other than minting a new version number. And for the same reason, there’s no incentive to figure out answers to questions like how: Customers are notified of changes Or how they are incentivised to upgrade Or how we measure which features the customers are using. “Maintenance Services” by Setyo Ari Wibowo from the Noun Project: https://thenounproject.com/term/maintenance-services/739684/ “Sad” by Adil Siddiqui from the Noun Project: https://thenounproject.com/term/sad/22084/
  • #21: And as we know, the longer we postpone answering questions like these The more difficult and expensive they can become to figure out. Therefore, we should try figure them out early. Picture credit: https://www.pexels.com/photo/brass-round-7-stack-coins-40140/
  • #22: Therefore I’d like to propose that you scrap your simplistic versioning strategy. Because versioning itself is a red herring. Picture credit: http://www.todayifoundout.com/index.php/2016/05/origins-phrase-red-herring/
  • #23: Instead of a Versioning Strategy You should have a Change Strategy
  • #24: A Change Strategy consists of 5 principles. You figure out what to version You define some extension rules You define some rules for how to introduce breaking changes Monitor feature usage And you create a Communication plan Credit to Zdenek Nemec “Rewrite” by Arthur Shlain from the Noun Project: https://thenounproject.com/term/rewrite/104323/ “Puzzle” by Nikita Kozin from the Noun Project: https://thenounproject.com/term/puzzle/683905/ “Unlink” by Icon Depot from the Noun Project: https://thenounproject.com/term/unlink/1196171/ “Find social” by shashank singh from the Noun Project: https://thenounproject.com/term/find-social/670010/ “Communication” by Kamal from the Noun Project: https://thenounproject.com/term/communication/1251620/
  • #25: Client has a version Message format has a version Server has a version The documentation (API description) has a version Credit to Zdenek Nemec “Computer” by Bhima from the Noun Project: https://thenounproject.com/term/computer/1268454/ “Message” by Trident from the Noun Project: https://thenounproject.com/term/message/1215806 “Server” by Agrahara from the Noun Project: https://thenounproject.com/term/server/1124228/ “Document” by andriwidodo from the Noun Project: https://thenounproject.com/term/document/988366/
  • #26: Resources don't have a version Relations between resources don't have a version The API itself doesn’t have a version “Document” by Astonish from the Noun Project: https://thenounproject.com/term/document/1167518/ “Link” by Kavya from the Noun Project: https://thenounproject.com/term/link/1244043/ “API” by Yu luck from the Noun Project: https://thenounproject.com/term/api/410844/
  • #27: The extension rules of a change strategy are simple: You must not take anything away You must not change processing rules You must not make optional things required Anything you add must be optional Credit to Zdenek Nemec.
  • #28: Unless you’re using hypermedia, in which case the two last points don’t apply anymore. Credit to Zdenek Nemec.
  • #29: So, how do you introduce a breaking change? Well, if a change to: Resource Identifier (the URI) including any query parameters and their semantics. Resource metadata (such as the HTTP headers). Resource data (such as the HTTP body) fields and their semantics. Actions the resource affords (e.g., available HTTP Methods). Or relations with other resources (e.g., Links). If any of these violate the extension rules enumerated earlier: ⇒ Create a new resource Credit to Zdenek Nemec. “Document” by Astonish from the Noun Project: https://thenounproject.com/term/document/1167518/ “Tags” by KΛPKLΛM from the Noun Project: https://thenounproject.com/term/tags/148915/ “Press the button” by andriwidodo from the Noun Project: https://thenounproject.com/term/press-the-button/949825/ “New document” by Tomas Knopp from the Noun Project: https://thenounproject.com/term/new-document/511524/
  • #30: If the message format itself changes ⇒ Use content negotiation Credit to Zdenek Nemec. “Business Meeting” by Robiul Alam from the Noun Project: https://thenounproject.com/term/business-meeting/1303450/
  • #31: Monitor usage of your API Identify usage of deprecated features HTTP access logs are a great source of information Especially if you’re using hypermedia, because you’ll have more links and resources in your API, giving you more detail about what’s going on. “Find social” by shashank singh from the Noun Project: https://thenounproject.com/term/find-social/670010/ “Crosshair” by Veronika Krpciarova from the Noun Project: https://thenounproject.com/term/crosshair/449540/ “Document” by Astonish from the Noun Project: https://thenounproject.com/term/document/1167518/
  • #32: When you change your API you should have a clear plan on how to communicate the change to your customers. Newsletter Dashboard the customer sees regularly API Documentation Regardless of whether the communication is due to new features or breaking changes, you need to communicate with your customers. “Newsletter” by Setyo Ari Wibowo from the Noun Project: https://thenounproject.com/term/newsletter/1079396/ “Admin panel” by Creative Stall from the Noun Project: https://thenounproject.com/term/admin-panel/995816/
  • #33: So let’s look at how this might work like in practice. Say we have this JSON document out in the wild. Then we notice the missing ’c’ in “aquire”.
  • #34: What do we do? Image credit: https://www.youtube.com/watch?v=lFjWA5w74nY
  • #35: Change Strategy To The Rescue! Image credit: http://rescuedbycode.com/unix-and-perl-book
  • #36: First we add support for the correct spelling of acquire to the API. Then we fix the spelling in the documentation. Then we notify the customers of the typo and that they should update their client software. Then we add monitoring of the usage of the typo field. Time passes Then we notify customers still using the typo field. More time passes We then incentivise the customers still using the typo field With Money, Plan upgrade Free products Whatever The point here is that keeping old code around costs money. And that’s money better spend at making your customer happy than your developers unhappy. Lastly we can remove the typo field from the API. Making the code lean and both customers and developers happy. “Email Notification” by cathy moser from the Noun Project: https://thenounproject.com/term/email-notification/896369/ “Magnifying Glass” by Nicole Macdonald from the Noun Project: https://thenounproject.com/term/magnifying-glass/160554/ “Time” by BomSymbols from the Noun Project: https://thenounproject.com/term/time/526522/ “Carrot” by Creative Stall from the Noun Project: https://thenounproject.com/term/carrot/105128/ “Celebration” by Llisole from the Noun Project: https://thenounproject.com/term/celebration/1030170/
  • #37: You can reach me on: Twitter E-mail Slack. Join the HTTP API slack! It's full of great people in love with the web and APIs.