SlideShare a Scribd company logo
Versioning in a Microservice
Architecture
Stephan Schulze | 5 April 2019
Contact with me
Email
stephan.schulze@project-a.com
Twitter
twitter.com/nahpeps
LinkedIn
linkedin.com/in/stephan-schulze-24115957/
Website
www.project-a.com
2
Stephan Schulze
CTO - Project A
Talk to me
Everytime at this conference
Project A - The operational VC
We empower tomorrow’s digital winners - www.project-a.com
The fund:
260mio
Assets under management
The people:
100
hands-on professionals
3
Stephan Schulze - @nahpeps | 5 April 2019
4
Stephan Schulze - @nahpeps | 5 April 2019
This talk buzzwords about
Versioning, APIs, Datastructures and Microservices
Thinking of and
introducing a proper versioning and
dependency management early, will
may save your life.
5
Stephan Schulze - @nahpeps | 5 April 2019
What is a Microservice?
6
Stephan Schulze - @nahpeps | 5 April 2019
What is a microservice?
At least in the scope of this talk
7
Stephan Schulze - @nahpeps | 5 April 2019
▪ There is an isolated vertical
infrastructure per service
▪ Communication happens via APIs
only
▪ A service can provide different
frontends (e.g. Customer Facing
and Backoffice)
▪ Each service serves a specific
business domain/need
Frontend
Backend
Application
Infrastructure DB Queues Webserver
API API API
FE 1 FE 2
Microservice
8
Stephan Schulze - @nahpeps | 5 April 2019
Let’s see a more complex
complete picture
Microservice based application
You have many services
9
Stephan Schulze - @nahpeps | 5 April 2019
Service2Service Communication
To provide functionality, they will talk to each other
10
Stephan Schulze - @nahpeps | 5 April 2019
Frontend
People want to see something
11
Stephan Schulze - @nahpeps | 5 April 2019
Frontend composition
Multiple Services contributing to single Frontend Pages
12
Stephan Schulze - @nahpeps | 5 April 2019
Naming the things
13
Stephan Schulze - @nahpeps | 5 April 2019
Backend Layer
Frontend Layer
Infrastructure Layer
This is what we call an application
14
Stephan Schulze - @nahpeps | 5 April 2019
Frontend Layer
Backend Layer
Product/A
pplication
Infrastructure Layer
15
Stephan Schulze - @nahpeps | 5 April 2019
What should we version?
Versioning within a Microservice
16
Stephan Schulze - @nahpeps | 5 April 2019
Microservice
Frontend
Backend
Application
Infrastructure DB Queues Webserver
API API API
FE 1 FE 2
V V V
V
V
V V
V
VV
V
▪ Every Layer has components with independent versioning (Code, Infrastructure component, Libraries, etc.)
▪ The combination of Versions within a Layer, results in a Version for that Layer
▪ The combination of Versions of Layers, results in a Version for the Microservice itself
▪ This all can be seen as a vector that exactly describes the Microservice itself
V
What is this Microservice Vector?
17
Stephan Schulze - @nahpeps | 5 April 2019
DB: 11.1.2
WS: 2.4.5
...
r-36
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-164
Seeing it in larger scale
This are just eight microservices
18
Stephan Schulze - @nahpeps | 5 April 2019
DB: 11.1.2
WS: 2.4.5
...
r-3
6
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-16
4
DB: 11.1.2
WS: 2.4.5
...
r-3
6
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-16
4
DB: 11.1.2
WS: 2.4.5
...
r-3
6
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-16
4
DB: 11.1.2
WS: 2.4.5
...
r-3
6
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-16
4
DB: 11.1.2
WS: 2.4.5
...
r-3
6
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-16
4
DB: 11.1.2
WS: 2.4.5
...
r-3
6
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-16
4
Application Vector:
{
“Service 1”: “r-19”,
“Service 2”: “r-176”,
“Service 3”: “r-15”,
“Service 4”: “r-2”,
...
“Service n”: “r-n”
}
This combination is actually
a working setup of your
application
Hopefully!
DB: 11.1.2
WS: 2.4.5
...
r-3
6
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-16
4
DB: 11.1.2
WS: 2.4.5
...
r-3
6
Bundle A - 1.5.4
Bundle ...
App Code ...
r-15
Other Service Client - 1.4
FE Component A - 1.3.7
FE Component B - 3.6.1
FE Component ...
r-17
r-16
4
Dangerous if invisible - APIs
19
Stephan Schulze - @nahpeps | 5 April 2019
Microservice
Frontend
Backend
Application
Infrastructure DB Queues Webserver
API API API
FE 1 FE 2
V V V
V
V
V V
V
V
▪ Frontend: is providing and using a “Frontend API” ⇒ Hello Dependency!
▪ Backend: is maybe using external APIs and/or providing APIs to externals ⇒ Hello Dependency!
▪ Having dependencies is necessary but makes your live much harder
V
V
20
Stephan Schulze - @nahpeps | 5 April 2019
Broken dependencies
will break your system
The problem with external dependencies
21
Stephan Schulze - @nahpeps | 5 April 2019
▪ You don’t who uses them ⇒ just deleting e.g. an API version is not an option
▪ You have no control about them
▪ To introduce BC Breaks in an API you must somehow maintain multiple versions of the same API
▪ This can be everything from super easy to hell
22
Stephan Schulze - @nahpeps | 5 April 2019
An example
Example - A service with a very simple API
23
Stephan Schulze - @nahpeps | 5 April 2019
DB
API - /customer/create - 1.0.0
persist Customer
{
“email”: “mandatory”,
“firstname”: “optional”,
“lastname”: “optional”
}
24
Stephan Schulze - @nahpeps | 5 April 2019
Marketing says:
Let’s send a welcome mail!
You say: No problem!
Services are in place already!
25
Stephan Schulze - @nahpeps | 5 April 2019
Customer ServiceEmail Service
Adding a dependency to another service is easy
Maintaining this dependency is not
26
Stephan Schulze - @nahpeps | 5 April 2019
DB
persist Customer
{
“email”: “mandatory”,
“firstname”: “optional”,
“lastname”: “optional”
}
API - /customer/create - 2.0.0
{
“email”: “mandatory”,
“firstname”: “mandatory”,
“lastname”: “mandatory”
}
▪ You become user of another external service
/mail/send -
1.0
{
“email”: “mandatory”,
“firstname”: “mandatory”,
“lastname”: “mandatory”,
“type”: “customer_welcome”
}
API - /customer/create - 1.0.0
▪ This affects your API (because of requirements of the new service)
▪ You have no idea, who is using your “old” API ⇒ so you will have to support two APIs for a while
27
Stephan Schulze - @nahpeps | 5 April 2019
This is a ticking bomb!
28
Stephan Schulze - @nahpeps | 5 April 2019
How could you avoid this?
A solution approach
Creating machine readable transparency
29
Stephan Schulze - @nahpeps | 5 April 2019
Offering Service
▪ That information could be validated
during/before a deployment process
▪ Deployments will fail, if they would
remove an API that is still in usage
Consumer Service 1
Consumer Service 2
30
Stephan Schulze - @nahpeps | 5 April 2019
Whatever you do:
You must know your
Dependency Graph
31
Stephan Schulze - @nahpeps | 5 April 2019
Datastructures
You are not alone!
Seeing your application embedded in a larger IT Landscape
32
Stephan Schulze - @nahpeps | 5 April 2019
Infrastructure Layer
Frontend Layer
Backend Layer
Product/A
pplication
Products {
“Product”: “Data”
}
Stock
{
“Stock”: “Data”
}
Prices
{
“Price”: “Data”
}
ERP
{
“Order”: “Data”
}
RPC based communication
Endpoints are called and data is submitted
33
Stephan Schulze - @nahpeps | 5 April 2019
Infrastructure Layer
The version of an API Endpoint
defines how the Datastructure
must look like.
34
Stephan Schulze - @nahpeps | 5 April 2019
Event based communication
Datastructures are communicated via e.g. Queues, PubSub or via EventStreaming
35
Stephan Schulze - @nahpeps | 5 April 2019
Infrastructure Layer
Queues
Define a Datastructure as an API!
If you have no versioned Endpoint
doing the validation,
you must version the Datastructure itself!
36
Stephan Schulze - @nahpeps | 5 April 2019
Versioning Datastructures
Every versioning is ok, unless you version your documents in general!
37
Stephan Schulze - @nahpeps | 5 April 2019
Product Data Example Travel Data Example Order Data Example
38
Stephan Schulze - @nahpeps | 5 April 2019
Don’t forget:
You still must know your
Dependency Graph!
39
Stephan Schulze - @nahpeps | 5 April 2019
Frontend
Frontend composition
Multiple Services contributing to single Frontend Pages
40
Stephan Schulze - @nahpeps | 5 April 2019
FE-1FE-3FE-12
An example with different Frontend Versions
Concurrent versions
41
Stephan Schulze - @nahpeps | 5 April 2019
Customer Service Price Service
Service A
fe-components r-1
Service B
fe-components r-12
Service C
fe-components r-3
CSS* CSS* CSS*
Problems with multiple FE versions
Concurrent versions
42
JS*
JS
JS
JS
JS*
JS
JS
JS
JS*
JS
JS
JS
Stephan Schulze - @nahpeps | 5 April 2019
NOT PERFECT!
43
Conclusions
Stephan Schulze - @nahpeps | 5 April 2019
44
Stephan Schulze - @nahpeps | 5 April 2019
Under the Assumptions of
▪ Your Datastructures will change
▪ You don’t know who else is using your Datastructures or you don’t have control over them
▪ You want to be able to differentiate between two Datastructures of the same type
(e.g. Customer)
▪ You want to be able to survive a Datastructure change (especially BC breaks)
Thinking of and
introducing a proper versioning and
dependency management early, will
may save your life.
45
Stephan Schulze - @nahpeps | 5 April 2019
Thank you for listening.
Time for questions

More Related Content

PDF
CMAM_Documentation_Report
PPTX
Brandy Goudreau Vaginal Candidiasis
PDF
TOPdesk product update webinar Q3 2019.pdf
PPTX
SplunkLive! London 2017 - Happy Apps, Happy Users
PPTX
PED_Channel_Tools ABB Fresh Market .pptx
PPTX
Partner Exec Summit 2018 - Frankfurt: Splunk Business Flow Beta
PDF
It's gonna be PowerApps and Flow - are you ready?
PDF
#askSAP Analytics Innovations Community Call: SAP Analytics 2019 Strategy and...
CMAM_Documentation_Report
Brandy Goudreau Vaginal Candidiasis
TOPdesk product update webinar Q3 2019.pdf
SplunkLive! London 2017 - Happy Apps, Happy Users
PED_Channel_Tools ABB Fresh Market .pptx
Partner Exec Summit 2018 - Frankfurt: Splunk Business Flow Beta
It's gonna be PowerApps and Flow - are you ready?
#askSAP Analytics Innovations Community Call: SAP Analytics 2019 Strategy and...

Similar to Versioning in a microservice architecture (20)

PDF
Sap analytics creating smart business processes
PDF
Unveiling an All-New Support Portal
PDF
RIPE NCC Measurements Tools Workshop: RIPEstat and RIPE Atlas
PDF
API-Consumption compressed (1)
PPT
SAP Systems Integration by SAP PI (XI)
PPT
What is Enterprise Resource Planning, SAP and SAP FIORI?
PDF
Splunk Discovery Day Milwaukee 9-14-17
PPT
Sap pi overview
PPTX
Roadmap Lightning Updates (November 3, 2016)
PPTX
Microsoft Dynamics 365 Business Central April'19 release
PPTX
Synergy2017 — Synergy v4 Highlights — Melanie Bunting, Total Synergy
PDF
How SAP uses Flowable as its BPMN engine for SAP CP Workflow
PDF
apart Framework: Porting from VisualWorks
PDF
Neuerungen in den strategischen planungs und konsolidierungslösungen
PDF
SAP Developers Update
PDF
Collecting and Analyzing API Statistics
PDF
ASP NET Professional Projects 1st Edition Hersh Bhasin
PDF
Realize the value of SAP BusinessObjects BI 4.1
PDF
Supplier Integration to Ariba Network: Cloud Integration Gateway
PDF
APIs for your Business + Stages of the API Lifecycle
Sap analytics creating smart business processes
Unveiling an All-New Support Portal
RIPE NCC Measurements Tools Workshop: RIPEstat and RIPE Atlas
API-Consumption compressed (1)
SAP Systems Integration by SAP PI (XI)
What is Enterprise Resource Planning, SAP and SAP FIORI?
Splunk Discovery Day Milwaukee 9-14-17
Sap pi overview
Roadmap Lightning Updates (November 3, 2016)
Microsoft Dynamics 365 Business Central April'19 release
Synergy2017 — Synergy v4 Highlights — Melanie Bunting, Total Synergy
How SAP uses Flowable as its BPMN engine for SAP CP Workflow
apart Framework: Porting from VisualWorks
Neuerungen in den strategischen planungs und konsolidierungslösungen
SAP Developers Update
Collecting and Analyzing API Statistics
ASP NET Professional Projects 1st Edition Hersh Bhasin
Realize the value of SAP BusinessObjects BI 4.1
Supplier Integration to Ariba Network: Cloud Integration Gateway
APIs for your Business + Stages of the API Lifecycle
Ad

Recently uploaded (20)

PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
System and Network Administraation Chapter 3
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PPTX
Essential Infomation Tech presentation.pptx
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PPTX
Introduction to Artificial Intelligence
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
VVF-Customer-Presentation2025-Ver1.9.pptx
Upgrade and Innovation Strategies for SAP ERP Customers
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Design an Analysis of Algorithms I-SECS-1021-03
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
System and Network Administraation Chapter 3
2025 Textile ERP Trends: SAP, Odoo & Oracle
How Creative Agencies Leverage Project Management Software.pdf
Which alternative to Crystal Reports is best for small or large businesses.pdf
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Essential Infomation Tech presentation.pptx
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Introduction to Artificial Intelligence
Navsoft: AI-Powered Business Solutions & Custom Software Development
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Reimagine Home Health with the Power of Agentic AI​
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Ad

Versioning in a microservice architecture

  • 1. Versioning in a Microservice Architecture Stephan Schulze | 5 April 2019
  • 3. Project A - The operational VC We empower tomorrow’s digital winners - www.project-a.com The fund: 260mio Assets under management The people: 100 hands-on professionals 3 Stephan Schulze - @nahpeps | 5 April 2019
  • 4. 4 Stephan Schulze - @nahpeps | 5 April 2019 This talk buzzwords about Versioning, APIs, Datastructures and Microservices
  • 5. Thinking of and introducing a proper versioning and dependency management early, will may save your life. 5 Stephan Schulze - @nahpeps | 5 April 2019
  • 6. What is a Microservice? 6 Stephan Schulze - @nahpeps | 5 April 2019
  • 7. What is a microservice? At least in the scope of this talk 7 Stephan Schulze - @nahpeps | 5 April 2019 ▪ There is an isolated vertical infrastructure per service ▪ Communication happens via APIs only ▪ A service can provide different frontends (e.g. Customer Facing and Backoffice) ▪ Each service serves a specific business domain/need Frontend Backend Application Infrastructure DB Queues Webserver API API API FE 1 FE 2 Microservice
  • 8. 8 Stephan Schulze - @nahpeps | 5 April 2019 Let’s see a more complex complete picture
  • 9. Microservice based application You have many services 9 Stephan Schulze - @nahpeps | 5 April 2019
  • 10. Service2Service Communication To provide functionality, they will talk to each other 10 Stephan Schulze - @nahpeps | 5 April 2019
  • 11. Frontend People want to see something 11 Stephan Schulze - @nahpeps | 5 April 2019
  • 12. Frontend composition Multiple Services contributing to single Frontend Pages 12 Stephan Schulze - @nahpeps | 5 April 2019
  • 13. Naming the things 13 Stephan Schulze - @nahpeps | 5 April 2019 Backend Layer Frontend Layer Infrastructure Layer
  • 14. This is what we call an application 14 Stephan Schulze - @nahpeps | 5 April 2019 Frontend Layer Backend Layer Product/A pplication Infrastructure Layer
  • 15. 15 Stephan Schulze - @nahpeps | 5 April 2019 What should we version?
  • 16. Versioning within a Microservice 16 Stephan Schulze - @nahpeps | 5 April 2019 Microservice Frontend Backend Application Infrastructure DB Queues Webserver API API API FE 1 FE 2 V V V V V V V V VV V ▪ Every Layer has components with independent versioning (Code, Infrastructure component, Libraries, etc.) ▪ The combination of Versions within a Layer, results in a Version for that Layer ▪ The combination of Versions of Layers, results in a Version for the Microservice itself ▪ This all can be seen as a vector that exactly describes the Microservice itself V
  • 17. What is this Microservice Vector? 17 Stephan Schulze - @nahpeps | 5 April 2019 DB: 11.1.2 WS: 2.4.5 ... r-36 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-164
  • 18. Seeing it in larger scale This are just eight microservices 18 Stephan Schulze - @nahpeps | 5 April 2019 DB: 11.1.2 WS: 2.4.5 ... r-3 6 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-16 4 DB: 11.1.2 WS: 2.4.5 ... r-3 6 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-16 4 DB: 11.1.2 WS: 2.4.5 ... r-3 6 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-16 4 DB: 11.1.2 WS: 2.4.5 ... r-3 6 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-16 4 DB: 11.1.2 WS: 2.4.5 ... r-3 6 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-16 4 DB: 11.1.2 WS: 2.4.5 ... r-3 6 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-16 4 Application Vector: { “Service 1”: “r-19”, “Service 2”: “r-176”, “Service 3”: “r-15”, “Service 4”: “r-2”, ... “Service n”: “r-n” } This combination is actually a working setup of your application Hopefully! DB: 11.1.2 WS: 2.4.5 ... r-3 6 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-16 4 DB: 11.1.2 WS: 2.4.5 ... r-3 6 Bundle A - 1.5.4 Bundle ... App Code ... r-15 Other Service Client - 1.4 FE Component A - 1.3.7 FE Component B - 3.6.1 FE Component ... r-17 r-16 4
  • 19. Dangerous if invisible - APIs 19 Stephan Schulze - @nahpeps | 5 April 2019 Microservice Frontend Backend Application Infrastructure DB Queues Webserver API API API FE 1 FE 2 V V V V V V V V V ▪ Frontend: is providing and using a “Frontend API” ⇒ Hello Dependency! ▪ Backend: is maybe using external APIs and/or providing APIs to externals ⇒ Hello Dependency! ▪ Having dependencies is necessary but makes your live much harder V V
  • 20. 20 Stephan Schulze - @nahpeps | 5 April 2019 Broken dependencies will break your system
  • 21. The problem with external dependencies 21 Stephan Schulze - @nahpeps | 5 April 2019 ▪ You don’t who uses them ⇒ just deleting e.g. an API version is not an option ▪ You have no control about them ▪ To introduce BC Breaks in an API you must somehow maintain multiple versions of the same API ▪ This can be everything from super easy to hell
  • 22. 22 Stephan Schulze - @nahpeps | 5 April 2019 An example
  • 23. Example - A service with a very simple API 23 Stephan Schulze - @nahpeps | 5 April 2019 DB API - /customer/create - 1.0.0 persist Customer { “email”: “mandatory”, “firstname”: “optional”, “lastname”: “optional” }
  • 24. 24 Stephan Schulze - @nahpeps | 5 April 2019 Marketing says: Let’s send a welcome mail!
  • 25. You say: No problem! Services are in place already! 25 Stephan Schulze - @nahpeps | 5 April 2019 Customer ServiceEmail Service
  • 26. Adding a dependency to another service is easy Maintaining this dependency is not 26 Stephan Schulze - @nahpeps | 5 April 2019 DB persist Customer { “email”: “mandatory”, “firstname”: “optional”, “lastname”: “optional” } API - /customer/create - 2.0.0 { “email”: “mandatory”, “firstname”: “mandatory”, “lastname”: “mandatory” } ▪ You become user of another external service /mail/send - 1.0 { “email”: “mandatory”, “firstname”: “mandatory”, “lastname”: “mandatory”, “type”: “customer_welcome” } API - /customer/create - 1.0.0 ▪ This affects your API (because of requirements of the new service) ▪ You have no idea, who is using your “old” API ⇒ so you will have to support two APIs for a while
  • 27. 27 Stephan Schulze - @nahpeps | 5 April 2019 This is a ticking bomb!
  • 28. 28 Stephan Schulze - @nahpeps | 5 April 2019 How could you avoid this?
  • 29. A solution approach Creating machine readable transparency 29 Stephan Schulze - @nahpeps | 5 April 2019 Offering Service ▪ That information could be validated during/before a deployment process ▪ Deployments will fail, if they would remove an API that is still in usage Consumer Service 1 Consumer Service 2
  • 30. 30 Stephan Schulze - @nahpeps | 5 April 2019 Whatever you do: You must know your Dependency Graph
  • 31. 31 Stephan Schulze - @nahpeps | 5 April 2019 Datastructures
  • 32. You are not alone! Seeing your application embedded in a larger IT Landscape 32 Stephan Schulze - @nahpeps | 5 April 2019 Infrastructure Layer Frontend Layer Backend Layer Product/A pplication Products { “Product”: “Data” } Stock { “Stock”: “Data” } Prices { “Price”: “Data” } ERP { “Order”: “Data” }
  • 33. RPC based communication Endpoints are called and data is submitted 33 Stephan Schulze - @nahpeps | 5 April 2019 Infrastructure Layer
  • 34. The version of an API Endpoint defines how the Datastructure must look like. 34 Stephan Schulze - @nahpeps | 5 April 2019
  • 35. Event based communication Datastructures are communicated via e.g. Queues, PubSub or via EventStreaming 35 Stephan Schulze - @nahpeps | 5 April 2019 Infrastructure Layer Queues
  • 36. Define a Datastructure as an API! If you have no versioned Endpoint doing the validation, you must version the Datastructure itself! 36 Stephan Schulze - @nahpeps | 5 April 2019
  • 37. Versioning Datastructures Every versioning is ok, unless you version your documents in general! 37 Stephan Schulze - @nahpeps | 5 April 2019 Product Data Example Travel Data Example Order Data Example
  • 38. 38 Stephan Schulze - @nahpeps | 5 April 2019 Don’t forget: You still must know your Dependency Graph!
  • 39. 39 Stephan Schulze - @nahpeps | 5 April 2019 Frontend
  • 40. Frontend composition Multiple Services contributing to single Frontend Pages 40 Stephan Schulze - @nahpeps | 5 April 2019 FE-1FE-3FE-12
  • 41. An example with different Frontend Versions Concurrent versions 41 Stephan Schulze - @nahpeps | 5 April 2019 Customer Service Price Service
  • 42. Service A fe-components r-1 Service B fe-components r-12 Service C fe-components r-3 CSS* CSS* CSS* Problems with multiple FE versions Concurrent versions 42 JS* JS JS JS JS* JS JS JS JS* JS JS JS Stephan Schulze - @nahpeps | 5 April 2019 NOT PERFECT!
  • 43. 43 Conclusions Stephan Schulze - @nahpeps | 5 April 2019
  • 44. 44 Stephan Schulze - @nahpeps | 5 April 2019 Under the Assumptions of ▪ Your Datastructures will change ▪ You don’t know who else is using your Datastructures or you don’t have control over them ▪ You want to be able to differentiate between two Datastructures of the same type (e.g. Customer) ▪ You want to be able to survive a Datastructure change (especially BC breaks)
  • 45. Thinking of and introducing a proper versioning and dependency management early, will may save your life. 45 Stephan Schulze - @nahpeps | 5 April 2019
  • 46. Thank you for listening. Time for questions