SlideShare a Scribd company logo
Versioning for Open Source services in Clouds
Sean Dague - Open Source Developer Advocate
@sdague
sean.dague@ibm.com / sean@dague.net
Nov 2nd
2017
REST API Microversions
@sdague
Typical REST Versioning
Some time T1
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"ips": ["10.42.100.1"]
}
}
Some time T2
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"ips": ["10.42.100.1"]
}
}
Generally accepted rules:
● clients should not break on additional keys
● adding new attributes is backwards compatible
● there is only ever going to be one version publicly accessable*
● the API will never roll back once in production (i.e. description can't just disappear once it's out there)
Generally accepted rules:
● clients should not break on additional keys
● adding new attributes is backwards compatible
● there is only ever going to be one version publicly accessable*
● the API will never roll back once in production (i.e. description can't just disappear once it's out there)
@sdague
Typical REST Versioning
Some time T1
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"ips": ["10.42.100.1"]
}
}
Some time T2
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"ips": ["10.42.100.1"]
}
}
Some time T3
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"tags": ["db", "ha"],
"ips": ["10.42.100.1"]
}
}
All works very well for single vendor services
● Github
● AWS
● Meetup
● etc
@sdague
Typical REST Versioning
Some time T1
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"ips": ["10.42.100.1"]
}
}
Some time T2
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"ips": ["10.42.100.1"]
}
}
Some time T3
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"tags": ["db", "ha"],
"ips": ["10.42.100.1"]
}
}
Development Workflow
push to prod push to prod push to prod
@sdague
Upstream Versioning
Upstream Development Workflow
push to release push to release push to releasepush to releasepush to release
PikeOcataNewtonMitakaLiberty
@sdague
Liberty Mitaka Newton
Liberty
Mitaka Pike
Upstream Code going into Clouds and Products
PikeOcataNewtonMitakaLiberty
Upstream Releases
Cloud Product A
Public Cloud B
Public Cloud C
@sdague
Liberty Mitaka Newton
Liberty
Mitaka Pike
Client Perspective
PikeOcataNewtonMitakaLiberty
Upstream Releases
Cloud Product A
Public Cloud B
Public Cloud C
T1 T2 T3
@sdague
Client Experiencing A → B → C
Cloud C
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"ips": ["10.42.100.1"]
}
}
Cloud A
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"ips": ["10.42.100.1"]
}
}
Cloud B
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"tags": ["db", "ha"],
"ips": ["10.42.100.1"]
}
}
Time's Arrow seems to go backwards.
Software is made to work on Cloud A, points at Cloud B still works, Cloud C is missing parameters
leading to possibly confusing late failures.
@sdague
The Assumed Good Enough Rules
don't account for a
Different Team Developing the Software
than Deploying it
REST API Microversions
@sdague
Client Experiencing A → B → C
Cloud C
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"ips": ["10.42.100.1"]
}
}
Cloud A
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"ips": ["10.42.100.1"]
}
}
Cloud B
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"description": "….",
"tags": ["db", "ha"],
"ips": ["10.42.100.1"]
}
}
Time's Arrow seems to go backwards.
Software is made to work on Cloud A, points at Cloud B still works, Cloud C is missing parameters
leading to possibly confusing late failures.
2.25 2.40 Base
@sdague
Client Experiencing A → B → C
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"ips": ["10.42.100.1"]
}
}
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"ips": ["10.42.100.1"]
}
}
GET /server/1
{
"server": {
"id": 1,
"name": "myserver",
"ips": ["10.42.100.1"]
}
}
At time T3 with Microversions
Cloud A Cloud B Cloud C
GET /server/1
OpenStack-Version: compute 2.25
Status: 400
Version not found
GET /server/1
OpenStack-Version: compute 2.25
{
"server": {
"id": 1,
"name": "myserver",
"description": "great server",
"ips": ["10.42.100.1"]
}
}
GET /server/1
OpenStack-Version: compute 2.25
{
"server": {
"id": 1,
"name": "myserver",
"description": "great server",
"ips": ["10.42.100.1"]
}
}
Cloud A Cloud B Cloud C
Base
2.25
@sdague
REST API Microversions
● Concept
– Inspired by HTTP Content negotiation
– Allow incremental feature roll out in API instead of waiting for major version bump
– Introduced in 2014 in OpenStack Nova / Ironic (expanded to 6 projects now)
● Technical Details
– Discoverable in root version document
– An explicit version header on each request
– Global incrementing version for entire service
– Defaults to minimum value
– Services continue to support old versions
– Hard 400 fail if version not found
● Blog writeup including personas - https://dague.net/api-mv
Very long history of
getting here available
at bar later upon
request
@sdague
Questions for the Future
● Raising minimum versions?
● How much compat code do we need to
keep?
● Machine specifications?
OpenStack Nova Compute:
GET /
{
"versions": [
{
"id": "v2.0",
"links": [
{
"href": "http://openstack.example.com/v2/",
"rel": "self"
}
],
"status": "SUPPORTED",
"version": "",
"min_version": "",
},
{
"id": "v2.1",
"links": [
{
"href": "http://openstack.example.com/v2.1/",
"rel": "self"
}
],
"status": "CURRENT",
"version": "2.53",
"min_version": "2.1",
}
]
}
OpenStack and OpenAPI
@sdague
OpenStack APIs vs OpenAPI
● Many OpenStack APIs evolved around WADL
● Attempt to retrofit OpenAPI definitions in 2015 to many core APIs, 2 key issues
– Duplicate actions that don't map to Swagger/OpenAPI
● POST /servers/{id}/action
{"reboot": ""}
● POST /servers/{id}/action
{"resize": {"flavor": "m1.large"}}
– Micro versions also don't really fit
● Could they?
@sdague
Parting Thoughts
● There are specific challenges to Open Source network consumable services being
deployed in multiple organizationally controlled clouds
– Tooling today largely doesn't consider that
● If we don't consider it, we make it harder to do non single vendor Open Source all the
way to the edge
– How do we prevent that?
THANKS!
Sean Dague
dague.net
sean.dague@ibm.com / sean@dague.net
https://dague.net/api-mv

More Related Content

What's hot (20)

PPTX
Luca Relandini - Microservices and containers networking: Contiv, deep dive a...
Codemotion
 
PDF
NATS: Simple, Secure and Scalable Messaging For the Cloud Native Era
wallyqs
 
PDF
Secrets management vault cncf meetup
Juraj Hantak
 
PPTX
Serverless and Servicefull Applications - Where Microservices complements Ser...
Red Hat Developers
 
PDF
Vault Secrets Via API for the REST of Us
Mitchell Pronschinske
 
PDF
Unity Makes Strength
Xavier Mertens
 
PDF
CDK Meetup: Rule the World through IaC
smalltown
 
PDF
Cloud Native Microservices with Spring Cloud
Conor Svensson
 
PDF
Secrets in Kubernetes
Jerry Jalava
 
PDF
Netflix Open Source: Building a Distributed and Automated Open Source Program
aspyker
 
PDF
Openstack 101
POSSCON
 
PPTX
网易云K8S应用实践 | practices for kubernetes cluster provisioning, management and ap...
Xiaohui Chen
 
PDF
Kubernetes Summit 2019 - Harden Your Kubernetes Cluster
smalltown
 
PPTX
Pulsar 101 at devoxx
Quentin Adam
 
PDF
Your Java Journey into the Serverless World
Kamesh Sampath
 
PPTX
Apache Kafka Security
DataWorks Summit/Hadoop Summit
 
PDF
Kubernetes Multi-cluster without Federation - Kubecon EU 2018
Rob Szumski
 
PDF
Hashicorp Vault: Open Source Secrets Management at #OPEN18
Kangaroot
 
PPTX
What's New in NGINX Plus R8
NGINX, Inc.
 
PDF
New Features of Kubernetes v1.2.0 beta
Giragadurai Vallirajan
 
Luca Relandini - Microservices and containers networking: Contiv, deep dive a...
Codemotion
 
NATS: Simple, Secure and Scalable Messaging For the Cloud Native Era
wallyqs
 
Secrets management vault cncf meetup
Juraj Hantak
 
Serverless and Servicefull Applications - Where Microservices complements Ser...
Red Hat Developers
 
Vault Secrets Via API for the REST of Us
Mitchell Pronschinske
 
Unity Makes Strength
Xavier Mertens
 
CDK Meetup: Rule the World through IaC
smalltown
 
Cloud Native Microservices with Spring Cloud
Conor Svensson
 
Secrets in Kubernetes
Jerry Jalava
 
Netflix Open Source: Building a Distributed and Automated Open Source Program
aspyker
 
Openstack 101
POSSCON
 
网易云K8S应用实践 | practices for kubernetes cluster provisioning, management and ap...
Xiaohui Chen
 
Kubernetes Summit 2019 - Harden Your Kubernetes Cluster
smalltown
 
Pulsar 101 at devoxx
Quentin Adam
 
Your Java Journey into the Serverless World
Kamesh Sampath
 
Apache Kafka Security
DataWorks Summit/Hadoop Summit
 
Kubernetes Multi-cluster without Federation - Kubecon EU 2018
Rob Szumski
 
Hashicorp Vault: Open Source Secrets Management at #OPEN18
Kangaroot
 
What's New in NGINX Plus R8
NGINX, Inc.
 
New Features of Kubernetes v1.2.0 beta
Giragadurai Vallirajan
 

Similar to LF_APIStrat17_REST API Microversions (20)

PPTX
Jeffrey Richter
CodeFest
 
PPTX
RESTful Microservices
Shaun Abram
 
PPTX
Tef con2016 (1)
ggarber
 
PDF
Microservices: State of the Union
C4Media
 
PDF
What's Missing? Microservices Meetup at Cisco
Adrian Cockcroft
 
PDF
Docker microservices and the service mesh
Docker, Inc.
 
PPTX
Cloud to hybrid edge cloud evolution Jun112020.pptx
Michel Burger
 
PDF
#ATAGTR2020 Presentation - Microservices – Explored
Agile Testing Alliance
 
PPTX
Microservices approach for Websphere commerce
HARIHARAN ANANTHARAMAN
 
PPTX
Delivering Developer Tools at Scale
Oracle Developers
 
PPTX
OpenStack: Why Is It Gaining So Much Traction?
mestery
 
PDF
Jeff Lindsay: Building Public Infrastructure with Autosustainable Services
it-people
 
PDF
Cloud APIs Overview Tucker
Infrastructure 2.0
 
PPTX
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
Javier García Magna
 
PPTX
Sanger, upcoming Openstack for Bio-informaticians
Peter Clapham
 
PPTX
Flexible compute
Peter Clapham
 
PDF
Introduction and hacking OpenStack, Pycon India
Atul Jha
 
PDF
Microservices: What's Missing - O'Reilly Software Architecture New York
Adrian Cockcroft
 
PDF
Continuously Integrating Distributed Code at Netflix
Atlassian
 
PDF
OSGi Cloud Ecosystems
David Bosschaert
 
Jeffrey Richter
CodeFest
 
RESTful Microservices
Shaun Abram
 
Tef con2016 (1)
ggarber
 
Microservices: State of the Union
C4Media
 
What's Missing? Microservices Meetup at Cisco
Adrian Cockcroft
 
Docker microservices and the service mesh
Docker, Inc.
 
Cloud to hybrid edge cloud evolution Jun112020.pptx
Michel Burger
 
#ATAGTR2020 Presentation - Microservices – Explored
Agile Testing Alliance
 
Microservices approach for Websphere commerce
HARIHARAN ANANTHARAMAN
 
Delivering Developer Tools at Scale
Oracle Developers
 
OpenStack: Why Is It Gaining So Much Traction?
mestery
 
Jeff Lindsay: Building Public Infrastructure with Autosustainable Services
it-people
 
Cloud APIs Overview Tucker
Infrastructure 2.0
 
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
Javier García Magna
 
Sanger, upcoming Openstack for Bio-informaticians
Peter Clapham
 
Flexible compute
Peter Clapham
 
Introduction and hacking OpenStack, Pycon India
Atul Jha
 
Microservices: What's Missing - O'Reilly Software Architecture New York
Adrian Cockcroft
 
Continuously Integrating Distributed Code at Netflix
Atlassian
 
OSGi Cloud Ecosystems
David Bosschaert
 
Ad

More from LF_APIStrat (20)

PDF
LF_APIStrat17_OWASP’s Latest Category: API Underprotection
LF_APIStrat
 
PDF
LF_APIStrat17_Creating Communication Applications using the Asterisk RESTFul ...
LF_APIStrat
 
PDF
LF_APIStrat17_Super-Powered REST API Testing
LF_APIStrat
 
PDF
LF_APIStrat17_How Mature are You? A Developer Experience Maturity Model
LF_APIStrat
 
PDF
LF_APIStrat17_Connect Your RESTful API to Hundreds of Others in Minutes (Zapi...
LF_APIStrat
 
PDF
LF_APIStrat17_Things I Wish People Told Me About Writing Docs
LF_APIStrat
 
PDF
LF_APIStrat17_Lifting Legacy to the Cloud on API Boosters
LF_APIStrat
 
PDF
LF_APIStrat17_Contract-first API Development: A Case Study in Parallel API Pu...
LF_APIStrat
 
PDF
LF_APIStrat17_Don't Repeat Yourself - Your API is Your Documentation
LF_APIStrat
 
PDF
LF_APIStrat17_How We Doubled the Velocity of Our Developer Experience Team
LF_APIStrat
 
PDF
LF_APIStrat17_API Marketing: First Comes Usability, then Discoverability
LF_APIStrat
 
PDF
LF_APIStrat17_Standing Taller with Technology: APIs, IoT, and the Digital Wor...
LF_APIStrat
 
PDF
LF_APIStrat17_I Believe You But My Enterprise Don't: Adopting Open Standards ...
LF_APIStrat
 
PDF
LF_APIStrat17_Case Study: Cold Decision Trees
LF_APIStrat
 
PDF
LF_APIStrat17_Getting Your API House In Order
LF_APIStrat
 
PDF
LF_APIStrat17_Diving Deep into the API Ocean with Open Source Deep Learning T...
LF_APIStrat
 
PDF
LF_APIStrat17_Supporting SDKs in 7 Different Programming Languages While Main...
LF_APIStrat
 
PDF
LF_APIStrat17_Open Data vs. the World
LF_APIStrat
 
PDF
LF_APIStrat17_Practical DevSecOps for APIs
LF_APIStrat
 
PDF
LF_APIStrat17_Bulletproofing Your API's
LF_APIStrat
 
LF_APIStrat17_OWASP’s Latest Category: API Underprotection
LF_APIStrat
 
LF_APIStrat17_Creating Communication Applications using the Asterisk RESTFul ...
LF_APIStrat
 
LF_APIStrat17_Super-Powered REST API Testing
LF_APIStrat
 
LF_APIStrat17_How Mature are You? A Developer Experience Maturity Model
LF_APIStrat
 
LF_APIStrat17_Connect Your RESTful API to Hundreds of Others in Minutes (Zapi...
LF_APIStrat
 
LF_APIStrat17_Things I Wish People Told Me About Writing Docs
LF_APIStrat
 
LF_APIStrat17_Lifting Legacy to the Cloud on API Boosters
LF_APIStrat
 
LF_APIStrat17_Contract-first API Development: A Case Study in Parallel API Pu...
LF_APIStrat
 
LF_APIStrat17_Don't Repeat Yourself - Your API is Your Documentation
LF_APIStrat
 
LF_APIStrat17_How We Doubled the Velocity of Our Developer Experience Team
LF_APIStrat
 
LF_APIStrat17_API Marketing: First Comes Usability, then Discoverability
LF_APIStrat
 
LF_APIStrat17_Standing Taller with Technology: APIs, IoT, and the Digital Wor...
LF_APIStrat
 
LF_APIStrat17_I Believe You But My Enterprise Don't: Adopting Open Standards ...
LF_APIStrat
 
LF_APIStrat17_Case Study: Cold Decision Trees
LF_APIStrat
 
LF_APIStrat17_Getting Your API House In Order
LF_APIStrat
 
LF_APIStrat17_Diving Deep into the API Ocean with Open Source Deep Learning T...
LF_APIStrat
 
LF_APIStrat17_Supporting SDKs in 7 Different Programming Languages While Main...
LF_APIStrat
 
LF_APIStrat17_Open Data vs. the World
LF_APIStrat
 
LF_APIStrat17_Practical DevSecOps for APIs
LF_APIStrat
 
LF_APIStrat17_Bulletproofing Your API's
LF_APIStrat
 
Ad

Recently uploaded (20)

PPTX
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
PDF
“Scaling i.MX Applications Processors’ Native Edge AI with Discrete AI Accele...
Edge AI and Vision Alliance
 
PDF
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
PDF
Proactive Server and System Monitoring with FME: Using HTTP and System Caller...
Safe Software
 
PDF
Kubernetes - Architecture & Components.pdf
geethak285
 
PDF
Java 25 and Beyond - A Roadmap of Innovations
Ana-Maria Mihalceanu
 
PDF
DoS Attack vs DDoS Attack_ The Silent Wars of the Internet.pdf
CyberPro Magazine
 
PPTX
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
PDF
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
PPTX
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
PDF
How to Visualize the ​Spatio-Temporal Data Using CesiumJS​
SANGHEE SHIN
 
PDF
Understanding AI Optimization AIO, LLMO, and GEO
CoDigital
 
PPTX
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
GDG Cloud Southlake #44: Eyal Bukchin: Tightening the Kubernetes Feedback Loo...
James Anderson
 
PDF
Hello I'm "AI" Your New _________________
Dr. Tathagat Varma
 
PDF
ArcGIS Utility Network Migration - The Hunter Water Story
Safe Software
 
PDF
My Journey from CAD to BIM: A True Underdog Story
Safe Software
 
PDF
“A Re-imagination of Embedded Vision System Design,” a Presentation from Imag...
Edge AI and Vision Alliance
 
PDF
Pipeline Industry IoT - Real Time Data Monitoring
Safe Software
 
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
“Scaling i.MX Applications Processors’ Native Edge AI with Discrete AI Accele...
Edge AI and Vision Alliance
 
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
Proactive Server and System Monitoring with FME: Using HTTP and System Caller...
Safe Software
 
Kubernetes - Architecture & Components.pdf
geethak285
 
Java 25 and Beyond - A Roadmap of Innovations
Ana-Maria Mihalceanu
 
DoS Attack vs DDoS Attack_ The Silent Wars of the Internet.pdf
CyberPro Magazine
 
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
How to Visualize the ​Spatio-Temporal Data Using CesiumJS​
SANGHEE SHIN
 
Understanding AI Optimization AIO, LLMO, and GEO
CoDigital
 
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
GDG Cloud Southlake #44: Eyal Bukchin: Tightening the Kubernetes Feedback Loo...
James Anderson
 
Hello I'm "AI" Your New _________________
Dr. Tathagat Varma
 
ArcGIS Utility Network Migration - The Hunter Water Story
Safe Software
 
My Journey from CAD to BIM: A True Underdog Story
Safe Software
 
“A Re-imagination of Embedded Vision System Design,” a Presentation from Imag...
Edge AI and Vision Alliance
 
Pipeline Industry IoT - Real Time Data Monitoring
Safe Software
 

LF_APIStrat17_REST API Microversions

  • 1. Versioning for Open Source services in Clouds Sean Dague - Open Source Developer Advocate @sdague [email protected] / [email protected] Nov 2nd 2017 REST API Microversions
  • 2. @sdague Typical REST Versioning Some time T1 GET /server/1 { "server": { "id": 1, "name": "myserver", "ips": ["10.42.100.1"] } } Some time T2 GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "ips": ["10.42.100.1"] } } Generally accepted rules: ● clients should not break on additional keys ● adding new attributes is backwards compatible ● there is only ever going to be one version publicly accessable* ● the API will never roll back once in production (i.e. description can't just disappear once it's out there) Generally accepted rules: ● clients should not break on additional keys ● adding new attributes is backwards compatible ● there is only ever going to be one version publicly accessable* ● the API will never roll back once in production (i.e. description can't just disappear once it's out there)
  • 3. @sdague Typical REST Versioning Some time T1 GET /server/1 { "server": { "id": 1, "name": "myserver", "ips": ["10.42.100.1"] } } Some time T2 GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "ips": ["10.42.100.1"] } } Some time T3 GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "tags": ["db", "ha"], "ips": ["10.42.100.1"] } } All works very well for single vendor services ● Github ● AWS ● Meetup ● etc
  • 4. @sdague Typical REST Versioning Some time T1 GET /server/1 { "server": { "id": 1, "name": "myserver", "ips": ["10.42.100.1"] } } Some time T2 GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "ips": ["10.42.100.1"] } } Some time T3 GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "tags": ["db", "ha"], "ips": ["10.42.100.1"] } } Development Workflow push to prod push to prod push to prod
  • 5. @sdague Upstream Versioning Upstream Development Workflow push to release push to release push to releasepush to releasepush to release PikeOcataNewtonMitakaLiberty
  • 6. @sdague Liberty Mitaka Newton Liberty Mitaka Pike Upstream Code going into Clouds and Products PikeOcataNewtonMitakaLiberty Upstream Releases Cloud Product A Public Cloud B Public Cloud C
  • 7. @sdague Liberty Mitaka Newton Liberty Mitaka Pike Client Perspective PikeOcataNewtonMitakaLiberty Upstream Releases Cloud Product A Public Cloud B Public Cloud C T1 T2 T3
  • 8. @sdague Client Experiencing A → B → C Cloud C GET /server/1 { "server": { "id": 1, "name": "myserver", "ips": ["10.42.100.1"] } } Cloud A GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "ips": ["10.42.100.1"] } } Cloud B GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "tags": ["db", "ha"], "ips": ["10.42.100.1"] } } Time's Arrow seems to go backwards. Software is made to work on Cloud A, points at Cloud B still works, Cloud C is missing parameters leading to possibly confusing late failures.
  • 9. @sdague The Assumed Good Enough Rules don't account for a Different Team Developing the Software than Deploying it
  • 11. @sdague Client Experiencing A → B → C Cloud C GET /server/1 { "server": { "id": 1, "name": "myserver", "ips": ["10.42.100.1"] } } Cloud A GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "ips": ["10.42.100.1"] } } Cloud B GET /server/1 { "server": { "id": 1, "name": "myserver", "description": "….", "tags": ["db", "ha"], "ips": ["10.42.100.1"] } } Time's Arrow seems to go backwards. Software is made to work on Cloud A, points at Cloud B still works, Cloud C is missing parameters leading to possibly confusing late failures. 2.25 2.40 Base
  • 12. @sdague Client Experiencing A → B → C GET /server/1 { "server": { "id": 1, "name": "myserver", "ips": ["10.42.100.1"] } } GET /server/1 { "server": { "id": 1, "name": "myserver", "ips": ["10.42.100.1"] } } GET /server/1 { "server": { "id": 1, "name": "myserver", "ips": ["10.42.100.1"] } } At time T3 with Microversions Cloud A Cloud B Cloud C GET /server/1 OpenStack-Version: compute 2.25 Status: 400 Version not found GET /server/1 OpenStack-Version: compute 2.25 { "server": { "id": 1, "name": "myserver", "description": "great server", "ips": ["10.42.100.1"] } } GET /server/1 OpenStack-Version: compute 2.25 { "server": { "id": 1, "name": "myserver", "description": "great server", "ips": ["10.42.100.1"] } } Cloud A Cloud B Cloud C Base 2.25
  • 13. @sdague REST API Microversions ● Concept – Inspired by HTTP Content negotiation – Allow incremental feature roll out in API instead of waiting for major version bump – Introduced in 2014 in OpenStack Nova / Ironic (expanded to 6 projects now) ● Technical Details – Discoverable in root version document – An explicit version header on each request – Global incrementing version for entire service – Defaults to minimum value – Services continue to support old versions – Hard 400 fail if version not found ● Blog writeup including personas - https://dague.net/api-mv Very long history of getting here available at bar later upon request
  • 14. @sdague Questions for the Future ● Raising minimum versions? ● How much compat code do we need to keep? ● Machine specifications? OpenStack Nova Compute: GET / { "versions": [ { "id": "v2.0", "links": [ { "href": "http://openstack.example.com/v2/", "rel": "self" } ], "status": "SUPPORTED", "version": "", "min_version": "", }, { "id": "v2.1", "links": [ { "href": "http://openstack.example.com/v2.1/", "rel": "self" } ], "status": "CURRENT", "version": "2.53", "min_version": "2.1", } ] }
  • 16. @sdague OpenStack APIs vs OpenAPI ● Many OpenStack APIs evolved around WADL ● Attempt to retrofit OpenAPI definitions in 2015 to many core APIs, 2 key issues – Duplicate actions that don't map to Swagger/OpenAPI ● POST /servers/{id}/action {"reboot": ""} ● POST /servers/{id}/action {"resize": {"flavor": "m1.large"}} – Micro versions also don't really fit ● Could they?
  • 17. @sdague Parting Thoughts ● There are specific challenges to Open Source network consumable services being deployed in multiple organizationally controlled clouds – Tooling today largely doesn't consider that ● If we don't consider it, we make it harder to do non single vendor Open Source all the way to the edge – How do we prevent that? THANKS! Sean Dague dague.net [email protected] / [email protected] https://dague.net/api-mv