API versioning is important to balance the needs of API providers who want to frequently update their APIs, and API consumers who want APIs to remain stable. API versioning allows both groups to work together by allowing providers to release new versions while maintaining backwards compatibility for consumers. It provides a standard way (Semantic Versioning) to increment version numbers based on the type of changes - major for incompatible changes, minor for backwards-compatible new features, and patch for backwards-compatible bug fixes. This allows consumers to control when they upgrade to a new version.
Arabic Toolkit Services that will help researcher and students
who need to make some operation on Arabic text such as Named Entity recognition, Part of speech tagging
Morphological Analysis, Parsing and Parse trees
Converting colloquial word and sentence into Modern standard Arabic
Using the Java Client Library by Noah Crowley, DevRel | InfluxDataInfluxData
InfluxDB 2.0 brings in support for many new client libraries. In this session, Noah will walk through how to use the new Java client library to access InfluxDB 2.0. InfluxDB comes with a new set of client libraries to allow you to insert time series data from your applications into the new InfluxDB 2.0. Specifically, Noah will share how to use the Java client library to insert data and query it in your applications.
Slides from the workshop delivered at the Evolution of Technical Communication 2018 conference. The workshop features an introduction to REST APIs followed by hands-on activities in which the participants (technical communication professionals) put themselves in developers' shoes used and some APIs and API tools like developers.
Arabic Toolkit Services that will help researcher and students
who need to make some operation on Arabic text such as Named Entity recognition, Part of speech tagging
Morphological Analysis, Parsing and Parse trees
Converting colloquial word and sentence into Modern standard Arabic
Using the Java Client Library by Noah Crowley, DevRel | InfluxDataInfluxData
InfluxDB 2.0 brings in support for many new client libraries. In this session, Noah will walk through how to use the new Java client library to access InfluxDB 2.0. InfluxDB comes with a new set of client libraries to allow you to insert time series data from your applications into the new InfluxDB 2.0. Specifically, Noah will share how to use the Java client library to insert data and query it in your applications.
Slides from the workshop delivered at the Evolution of Technical Communication 2018 conference. The workshop features an introduction to REST APIs followed by hands-on activities in which the participants (technical communication professionals) put themselves in developers' shoes used and some APIs and API tools like developers.
Web service APIs are everywhere. In this talk we will show different visualizations obtained from a collection of real-world APIs, highlighting some design primitives, patterns and anti-patterns for API structures. We will also take the audience on a tour of how API evolve over the years and how the relationship between APIs and the Web continues to change over the decades.
Mocking APIs Collaboratively with PostmanNordic APIs
Postman’s Mock Servers are an excellent tool to design APIs by setting expected responses based on your API endpoints and parameters. They allow teams to be more agile by removing the need to wait for an API producer to deliver a MVP of the service. Consumers of the API can thus set their expectations on what they need from the API producer. This demo will show how you can generate mock servers in Postman from scratch, through Postman Collections and return conditional responses.
apidays LIVE Australia 2020 - Have your cake and eat it too: GraphQL? REST? W...apidays
apidays LIVE Australia 2020 - Building Business Ecosystems
Have your cake and eat it too: GraphQL? REST? Why not have both!
Roy Mor, Technical Lead at Sisense
A latest testing framework for Java. Lambda Behave vows to make testing a pleasing experience. An ideal choice for a Java developer who has worked with specification frameworks earlier
GraphQL has made an excellent entree on the API scene. It is reintroducing the original concepts of RPC-style architecture with a revolutionary API consumer-oriented approach. It brought a new option to the stalled waters of RESTful APIs. But more importantly, GraphQL brought back the principal question: What is the right API architectural style for my project?
If you are building an API, this talk should give you enough of the theoretical background to make the right API-decision for your product.
In this talk, we will take a critical look at predominant API architectural style – RESTful APIs and put it in contrast to GraphQL and Hypermedia APIs. We will discuss the expected properties of distributed systems, the consequences of choosing a particular API style, and reflect these findings in the pros and cons of the popular methods.
Data Driven API Testing: Best Practices for Real-World Testing ScenariosSmartBear
Exceptional API delivery requires extensive testing – You test for function and performance. You test SOAP and REST. You test all of the things. But inevitably, real-world scenarios will vastly outnumber those designed in your automated testing process. How can you ensure that your testing covers the scenarios your API will encounter in the wild?
Beyond 49x Transformers: Don't be afraid of (the) Python!Safe Software
This session gives a short introduction for the usage of Python scripts in FME Desktop processes. First it will be demonstrated how to compute buildings’ roof heights at certain ground points with the PythonCaller and an external Python package. The second demo shows how to persist the FME logfile and the runtime statistics into a central database via Python shutdown script for all those who do not have a FME Server at hand (for now).
See more presentations and videos at: www.safe.com/fmeuc
API Testing: Answers to Your Top 3 QuestionsQASource
Want more? Visit our official blog, QALounge.com! Brought to you by QASource.com.
Pursuing API testing or API test automation for your product? Our engineers have answers to the top 3 questions about API automation testing in this slide deck.
Analyzing speech data and transforming speech content into valuable transcription with high, fast, and reliable recognition rates using innovative technologies. For more information, visit us at: https://rdi-eg.ai/speech-technologies/
A Journey from API Versioning to Canary Release | APIDays Zurich 2017Patrice Krakow
Presentation given at APIDays Zurich, the 27th of September 2017, about how an API Versioning guidelines becomes a proposal to unify Canary Release, Confidence Check and A/B testing on APIs.
A Journey from API Versioning to Canary Release | Nordic APIs Platform Summit...Patrice Krakow
Presentation given at Nordic APIs Platform Summit in Stockholm, the 10th of October 2017, about how an API Versioning guidelines becomes a proposal to unify Canary Release, Confidence Check and A/B testing on APIs.
Web service APIs are everywhere. In this talk we will show different visualizations obtained from a collection of real-world APIs, highlighting some design primitives, patterns and anti-patterns for API structures. We will also take the audience on a tour of how API evolve over the years and how the relationship between APIs and the Web continues to change over the decades.
Mocking APIs Collaboratively with PostmanNordic APIs
Postman’s Mock Servers are an excellent tool to design APIs by setting expected responses based on your API endpoints and parameters. They allow teams to be more agile by removing the need to wait for an API producer to deliver a MVP of the service. Consumers of the API can thus set their expectations on what they need from the API producer. This demo will show how you can generate mock servers in Postman from scratch, through Postman Collections and return conditional responses.
apidays LIVE Australia 2020 - Have your cake and eat it too: GraphQL? REST? W...apidays
apidays LIVE Australia 2020 - Building Business Ecosystems
Have your cake and eat it too: GraphQL? REST? Why not have both!
Roy Mor, Technical Lead at Sisense
A latest testing framework for Java. Lambda Behave vows to make testing a pleasing experience. An ideal choice for a Java developer who has worked with specification frameworks earlier
GraphQL has made an excellent entree on the API scene. It is reintroducing the original concepts of RPC-style architecture with a revolutionary API consumer-oriented approach. It brought a new option to the stalled waters of RESTful APIs. But more importantly, GraphQL brought back the principal question: What is the right API architectural style for my project?
If you are building an API, this talk should give you enough of the theoretical background to make the right API-decision for your product.
In this talk, we will take a critical look at predominant API architectural style – RESTful APIs and put it in contrast to GraphQL and Hypermedia APIs. We will discuss the expected properties of distributed systems, the consequences of choosing a particular API style, and reflect these findings in the pros and cons of the popular methods.
Data Driven API Testing: Best Practices for Real-World Testing ScenariosSmartBear
Exceptional API delivery requires extensive testing – You test for function and performance. You test SOAP and REST. You test all of the things. But inevitably, real-world scenarios will vastly outnumber those designed in your automated testing process. How can you ensure that your testing covers the scenarios your API will encounter in the wild?
Beyond 49x Transformers: Don't be afraid of (the) Python!Safe Software
This session gives a short introduction for the usage of Python scripts in FME Desktop processes. First it will be demonstrated how to compute buildings’ roof heights at certain ground points with the PythonCaller and an external Python package. The second demo shows how to persist the FME logfile and the runtime statistics into a central database via Python shutdown script for all those who do not have a FME Server at hand (for now).
See more presentations and videos at: www.safe.com/fmeuc
API Testing: Answers to Your Top 3 QuestionsQASource
Want more? Visit our official blog, QALounge.com! Brought to you by QASource.com.
Pursuing API testing or API test automation for your product? Our engineers have answers to the top 3 questions about API automation testing in this slide deck.
Analyzing speech data and transforming speech content into valuable transcription with high, fast, and reliable recognition rates using innovative technologies. For more information, visit us at: https://rdi-eg.ai/speech-technologies/
A Journey from API Versioning to Canary Release | APIDays Zurich 2017Patrice Krakow
Presentation given at APIDays Zurich, the 27th of September 2017, about how an API Versioning guidelines becomes a proposal to unify Canary Release, Confidence Check and A/B testing on APIs.
A Journey from API Versioning to Canary Release | Nordic APIs Platform Summit...Patrice Krakow
Presentation given at Nordic APIs Platform Summit in Stockholm, the 10th of October 2017, about how an API Versioning guidelines becomes a proposal to unify Canary Release, Confidence Check and A/B testing on APIs.
The Schema-first API design approach advocates for writing your API definition first in one of many API Specification languages before writing any code. This talk introduces you to the realm of Schema-First API design and how to get started with the OpenAPI ecosystem.
API integrations can be a pain. Anyone who has worked on API integrations has probably observed that, as a general rule, no API server survives first contact with the client. Reasons vary, from badly written API documentation to complete lack of API documentation. In this presentation, I want to address this problem by showing how developers can minimize the risk of API integration failures by using an approach called documentation-driven development. In documentation-driven development, we write the API specification first using a standard specification format. I'll show how we can leverage documentation to test and validate our API implementations before we release them. I'll show how we can use tools from the current ecosystem, such as Dredd, to automatically generate tests that validate our APIs.
apidays LIVE Hong Kong 2021 - Multi-Protocol APIs at Scale in Adidas by Jesus...apidays
apidays LIVE Hong Kong 2021 - API Ecosystem & Data Interchange
August 25 & 26, 2021
Multi-Protocol APIs at Scale in Adidas
Jesus de Diego, API Evangelist at Adidas
Practices and tools for building better API (JFall 2013)Peter Hendriks
Een belangrijke voorwaarde om goede en leesbare Java code te schrijven is om gebruik te maken van een goede API. Een goede API helpt ontwikkelaars om sneller hoogwaardige code te schrijven. Het ontwerp van een API is daarom belangrijk, zeker als er grotere systemen worden gerealiseerd in teamverband. Moderne ontwikkeltools als Eclipse, IntelliJ IDEA en FindBugs helpen met het schrijven van goede API, en het detecteren van slecht gebruik. Deze sessie gaat in op de laatste ontwikkelingen en mogelijkheden, inclusief nieuwe taalmogelijkheden in Java 8. Er wordt hierbij gebruik gemaakt van praktische situaties en concrete codevoorbeelden, gebaseerd op echte ervaringen in grote codebases. Met praktische tips en toegankelijke tools kan al een grote stap gemaakt worden om in de praktijk beter met API ontwerp om te gaan!
As soon as we start working on an API, architecture issues arise. Many mistaken common beliefs turn out to be fiction in this area. A poorly designed API architecture will lead to misuse or – even worse – not be used at all by its intended clients: application developers.
To facilitate and accelerate design and development of your APIs, we share our vision and beliefs with you in this Reference Card. They come from our direct experience on API projects.
With Apache Kafka’s rise for event-driven architectures, developers require a specification to design effective event-driven APIs. AsyncAPI has been developed based on OpenAPI to define the endpoints and schemas of brokers and topics. For Kafka applications, the broker’s design to handle high throughput serialized payloads brings challenges for consumers and producers managing the structure of the message. For this reason, a registry becomes critical to achieve schema governance. Apicurio Registry is an end-to-end solution to store API definitions and schemas for Kafka applications. The project includes serializers, deserializers, and additional tooling. The registry supports several types of artifacts including OpenAPI, AsyncAPI, GraphQL, Apache Avro, Google protocol buffers, JSON Schema, Kafka Connect schema, WSDL, and XML Schema (XSD). It also checks them for validity and compatibility.
In this session, we will be covering the following topics:
● The importance of having a contract-first approach to event-driven APIs
● What is AsyncAPI, and how it helps to define Kafka endpoints and schemas
● The Kafka challenges on message structure when serializing and deserializing
● Introduction to Apicurio Registry and schema management for Kafka
● Examples of how to use Apicurio Registry with popular Java frameworks like Spring and Quarkus
APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...Restlet
This workshop explained how to craft an API using the first multi-language dedicated Web IDE, host and scale the API with Platform as a Service for web APIs and manage access to this API; including: documentation, client SDKs, access management, firewall and analytics.
In this community call, we will discuss the highlights of WSO2 API Manager 4.0 including
- Why we moved from WSO2 API Manager 3.2.0 to 4.0.0.
- New architectural changes
- Overview of the new features with a demo
- Improvements to the existing features and deprecated features
Recording: https://youtu.be/_ks4zEeRFdk
Sign up to get notified of future calls: https://bit.ly/373f4ae
WSO2 API Manager Community Channels:
- Slack: https://apim-slack.wso2.com
- Twitter: https://twitter.com/wso2apimanager
Gateway APIs, Envoy Gateway, and API GatewaysMatt Turner
Up until now, Ingress routes into K8s clusters have been defined by the Ingress kind, or by vendor-specific CRDs. Neither of these were satisfactory, so a new set of built-in k8s APIs was developed - the Gateway API.
In this talk, Matt will cover the motivation for a new API, its design, and show some examples of its use. He’ll then also cover implimentations of it today and in the future, and talk about the exciting merging of several of the existing ingress controllers into one new de facto standard - Envoy Gateway.
Best practices and advantages of REST APIsAparna Sharma
In this article, I am going to share the best practices and the advantages of REST APIs, as I am working with a team on a REST-based web application. Newsdata.io news API is a REST-based API that fetches news data from thousands of news websites in JSON format. Therefore, I have a basic understanding of REST APIs that I am going to share with you.
Similar to API Versioning for Zero Downtime | Devoxx Belgium 2017 (20)
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Shahin Sheidaei
Games are powerful teaching tools, fostering hands-on engagement and fun. But they require careful consideration to succeed. Join me to explore factors in running and selecting games, ensuring they serve as effective teaching tools. Learn to maintain focus on learning objectives while playing, and how to measure the ROI of gaming in education. Discover strategies for pitching gaming to leadership. This session offers insights, tips, and examples for coaches, team leads, and enterprise leaders seeking to teach from simple to complex concepts.
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
Large Language Models and the End of ProgrammingMatt Welsh
Talk by Matt Welsh at Craft Conference 2024 on the impact that Large Language Models will have on the future of software development. In this talk, I discuss the ways in which LLMs will impact the software industry, from replacing human software developers with AI, to replacing conventional software with models that perform reasoning, computation, and problem-solving.
How Recreation Management Software Can Streamline Your Operations.pptxwottaspaceseo
Recreation management software streamlines operations by automating key tasks such as scheduling, registration, and payment processing, reducing manual workload and errors. It provides centralized management of facilities, classes, and events, ensuring efficient resource allocation and facility usage. The software offers user-friendly online portals for easy access to bookings and program information, enhancing customer experience. Real-time reporting and data analytics deliver insights into attendance and preferences, aiding in strategic decision-making. Additionally, effective communication tools keep participants and staff informed with timely updates. Overall, recreation management software enhances efficiency, improves service delivery, and boosts customer satisfaction.
Cyaniclab : Software Development Agency Portfolio.pdfCyanic lab
CyanicLab, an offshore custom software development company based in Sweden,India, Finland, is your go-to partner for startup development and innovative web design solutions. Our expert team specializes in crafting cutting-edge software tailored to meet the unique needs of startups and established enterprises alike. From conceptualization to execution, we offer comprehensive services including web and mobile app development, UI/UX design, and ongoing software maintenance. Ready to elevate your business? Contact CyanicLab today and let us propel your vision to success with our top-notch IT solutions.
Developing Distributed High-performance Computing Capabilities of an Open Sci...Globus
COVID-19 had an unprecedented impact on scientific collaboration. The pandemic and its broad response from the scientific community has forged new relationships among public health practitioners, mathematical modelers, and scientific computing specialists, while revealing critical gaps in exploiting advanced computing systems to support urgent decision making. Informed by our team’s work in applying high-performance computing in support of public health decision makers during the COVID-19 pandemic, we present how Globus technologies are enabling the development of an open science platform for robust epidemic analysis, with the goal of collaborative, secure, distributed, on-demand, and fast time-to-solution analyses to support public health.
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxrickgrimesss22
Discover the essential features to incorporate in your Winzo clone app to boost business growth, enhance user engagement, and drive revenue. Learn how to create a compelling gaming experience that stands out in the competitive market.
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
Utilocate offers a comprehensive solution for locate ticket management by automating and streamlining the entire process. By integrating with Geospatial Information Systems (GIS), it provides accurate mapping and visualization of utility locations, enhancing decision-making and reducing the risk of errors. The system's advanced data analytics tools help identify trends, predict potential issues, and optimize resource allocation, making the locate ticket management process smarter and more efficient. Additionally, automated ticket management ensures consistency and reduces human error, while real-time notifications keep all relevant personnel informed and ready to respond promptly.
The system's ability to streamline workflows and automate ticket routing significantly reduces the time taken to process each ticket, making the process faster and more efficient. Mobile access allows field technicians to update ticket information on the go, ensuring that the latest information is always available and accelerating the locate process. Overall, Utilocate not only enhances the efficiency and accuracy of locate ticket management but also improves safety by minimizing the risk of utility damage through precise and timely locates.
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaYara Milbes
Discover the transformative power of the WhatsApp API in our latest SlideShare presentation, "Top 7 Unique WhatsApp API Benefits." In today's fast-paced digital era, effective communication is crucial for both personal and professional success. Whether you're a small business looking to enhance customer interactions or an individual seeking seamless communication with loved ones, the WhatsApp API offers robust capabilities that can significantly elevate your experience.
In this presentation, we delve into the top 7 distinctive benefits of the WhatsApp API, provided by the leading WhatsApp API service provider in Saudi Arabia. Learn how to streamline customer support, automate notifications, leverage rich media messaging, run scalable marketing campaigns, integrate secure payments, synchronize with CRM systems, and ensure enhanced security and privacy.
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Globus
The Earth System Grid Federation (ESGF) is a global network of data servers that archives and distributes the planet’s largest collection of Earth system model output for thousands of climate and environmental scientists worldwide. Many of these petabyte-scale data archives are located in proximity to large high-performance computing (HPC) or cloud computing resources, but the primary workflow for data users consists of transferring data, and applying computations on a different system. As a part of the ESGF 2.0 US project (funded by the United States Department of Energy Office of Science), we developed pre-defined data workflows, which can be run on-demand, capable of applying many data reduction and data analysis to the large ESGF data archives, transferring only the resultant analysis (ex. visualizations, smaller data files). In this talk, we will showcase a few of these workflows, highlighting how Globus Flows can be used for petabyte-scale climate analysis.
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...informapgpstrackings
Keep tabs on your field staff effortlessly with Informap Technology Centre LLC. Real-time tracking, task assignment, and smart features for efficient management. Request a live demo today!
For more details, visit us : https://informapuae.com/field-staff-tracking/
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
7. We want to be a tech company with
a banking license!
Ralph Hamers, CEO and chairman Executive Board ING Group
source: https://www.ing.com/Newsroom/All-news/We-want-to-be-a-tech-company-with-a-banking-license-Ralph-Hamers.htm
10. Patrice Krakow
10
Nordic API 2017 | A Journey from API Versioning to Canary Release
https://youtu.be/Yke6Vut2Shc
11. Patrice Krakow
11
• Sep 2016 – Present
• ING | Lead Architect of the API Platform
• Jul 2012 – Aug 2016
• ING Belgium | SOA Architect
• Jun 2012 – Apr 2013
• Eligible | Co-founder
• Aug 2001 – Jun 2012
• SCA Package (DS Smith) | System Integration Coordinator
…
• Sep 1990 – Jun 1995
• University of Liège | Master of Physics
Nordic API 2017 | A Journey from API Versioning to Canary Release
https://youtu.be/Yke6Vut2Shc
12. Patrice Krakow
12
• Sep 2016 – Present
• ING | Lead Architect of the API Platform
• Jul 2012 – Aug 2016
• ING Belgium | SOA Architect
• Jun 2012 – Apr 2013
• Eligible | Co-founder
• Aug 2001 – Jun 2012
• SCA Package (DS Smith) | System Integration Coordinator
…
• Sep 1990 – Jun 1995
• University of Liège | Master of Physics
EDIFACT
X12
SGML
CORBA
DCOM
XML
WS
SOA
ESB
REST APIs
13. Why API Versioning?
13
“Many API designers include versioning information (e.g., numbers in the URL, HTTP headers,
or response body) without much thought about the assumption behind that practice.”
RESTful Web Clients by Mike Amundsen
How?
14. Why API Versioning?
14
“Many API designers include versioning information (e.g., numbers in the URL, HTTP headers,
or response body) without much thought about the assumption behind that practice.”
RESTful Web Clients by Mike Amundsen
How?
@mamund
15. Why API Versioning?
15
2nd How?1st Why?
“Many API designers include versioning information (e.g., numbers in the URL, HTTP headers,
or response body) without much thought about the assumption behind that practice.”
RESTful Web Clients by Mike Amundsen
16. Why API Versioning?
16
2nd How?1st Why?
Versioning = Handling change over time
“Many API designers include versioning information (e.g., numbers in the URL, HTTP headers,
or response body) without much thought about the assumption behind that practice.”
RESTful Web Clients by Mike Amundsen
19. Why API Versioning?
19
want to change their
APIs as soon as they
have a new brilliant idea
API Consumers API Providers
20. Why API Versioning?
20
want to change their
APIs as soon as they
have a new brilliant idea
want the APIs they are
using to stay stable as long
as they are not interested
by the new brilliant ideas of
the API Providers!
API Consumers API Providers
21. Why API Versioning?
21
What!?
API Consumers API Providers
want to change their
APIs as soon as they
have a new brilliant idea
want the APIs they are
using to stay stable as long
as they are not interested
by the new brilliant ideas of
the API Providers!
22. Why API Versioning?
22
API
Versionin
g
API Consumers API Providers
want to change their
APIs as soon as they
have a new brilliant idea
want the APIs they are
using to stay stable as long
as they are not interested
by the new brilliant ideas of
the API Providers!
23. Why API Versioning?
23
DON’
T
API Consumers API Providers
want to change their
APIs as soon as they
have a new brilliant idea
want the APIs they are
using to stay stable as long
as they are not interested
by the new brilliant ideas of
the API Providers!
27. • API is a set of API endpoints.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of the
API endpoints part of the API. We use the OpenAPI/Swagger standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
27
Meta-Model and Terminology for APIs
Service
API
28. • API is a set of API endpoints.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of the
API endpoints part of the API. We use the OpenAPI/Swagger standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
28
Meta-Model and Terminology for APIs
Service
API
29. • API is a set of API endpoints.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of the
API endpoints part of the API. We use the OpenAPI/Swagger standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
29
Meta-Model and Terminology for APIs
API endpoint
Service
API
30. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of the
API endpoints part of the API. We use the OpenAPI/Swagger standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
30
Meta-Model and Terminology for APIs
API endpoint
Service
API
1
0..n
31. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
31
Meta-Model and Terminology for APIs
API endpoint
API specification
Service
API
1
0..n
1
1
32. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
32
Meta-Model and Terminology for APIs
API endpoint
API specification
Service
API
1
0..n
1
1
1
1..n
33. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
33
Meta-Model and Terminology for APIs
API endpoint
API specification
Service
API
1
0..n
1
1
1
1..n
1
34. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
34
Meta-Model and Terminology for APIs
API endpoint
API specification
Service
Service version
API
1
0..n
1
1
1
1..n
1
1
0..n
35. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
35
Meta-Model and Terminology for APIs
API endpoint
API specification
Service
Service version
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
36. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
36
Meta-Model and Terminology for APIs
API endpoint
API specification
Service
Service version
Xs.Ys.Zs
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
37. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
37
Meta-Model and Terminology for APIs
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
38. Semantic Versioning is a de-facto standard way – proposed by Tom Preston-Werner, co-
founder of GitHub – to format version numbers of software packages. You can find the full
specification at http://semver.org/.
Semantic Versioning for both API Specifications and Services
38
39. Semantic Versioning is a de-facto standard way – proposed by Tom Preston-Werner, co-
founder of GitHub – to format version numbers of software packages. You can find the full
specification at http://semver.org/.
MAJOR.MINOR.PATCH or X.Y.Z where X, Y and Z are non-negative integers
1. MAJOR version when you make incompatible API changes,
2. MINOR version when you add functionality in a backwards-compatible manner, and
3. PATCH version when you make backwards-compatible bug fixes.
Semantic Versioning for both API Specifications and Services
39
40. Semantic Versioning is a de-facto standard way – proposed by Tom Preston-Werner, co-
founder of GitHub – to format version numbers of software packages. You can find the full
specification at http://semver.org/.
MAJOR.MINOR.PATCH or X.Y.Z where X, Y and Z are non-negative integers
1. MAJOR version when you make incompatible API changes,
2. MINOR version when you add functionality in a backwards-compatible manner, and
3. PATCH version when you make backwards-compatible bug fixes.
Software using Semantic Versioning MUST declare a public API. This API could be declared
in the code itself or exist strictly in documentation. However it is done, it should be precise
and comprehensive.
Semantic Versioning for both API Specifications and Services
40
41. Semantic Versioning is a de-facto standard way – proposed by Tom Preston-Werner, co-
founder of GitHub – to format version numbers of software packages. You can find the full
specification at http://semver.org/.
MAJOR.MINOR.PATCH or X.Y.Z where X, Y and Z are non-negative integers
1. MAJOR version when you make incompatible API changes,
2. MINOR version when you add functionality in a backwards-compatible manner, and
3. PATCH version when you make backwards-compatible bug fixes.
Software using Semantic Versioning MUST declare a public API. This API could be declared
in the code itself or exist strictly in documentation. However it is done, it should be precise
and comprehensive.
Swagger/OpenAPI 2.0 specification – https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md
Semantic Versioning for both API Specifications and Services
41
42. 10. Patch version Z(a) (x(a).y(a).Z(a) | x(a) > 0) of the Swagger/OpenAPI file MUST be incremented if
changes that do not require any services implementing the API to be changed, are introduced.
11. Patch version Z(s) (x(s).y(s).Z(s) | x(s) > 0) of a service MUST be incremented if only backwards
compatible bug fixes are introduced. A bug fix is defined as an internal change that fixes incorrect
behavior and MUST NOT require any changes to the Swagger/OpenAPI file. The patch
version Z(s) of a service MUST NOT be constrained by the patch version Z(a) of the
Swagger/OpenAPI file, and vice-versa.
12. Minor version Y(a) (x(a).Y(a).z(a) | x(a) > 0) of the Swagger/OpenAPI file MUST be incremented if
new, backwards compatible functionality is introduced to the API. It MUST be incremented if
any API functionality is marked as deprecated. It MAY include patch level changes. Patch version
MUST be reset to 0 when minor version is incremented.
13. Minor version Y(s) (x(s).Y(s).z(s) | x(s) > 0) of a service MUST be incremented, together with the
Swagger/OpenAPI file one, if new, backwards compatible functionality is introduced by the API
changes. It MUST NOT be incremented if the minor version of the Swagger/OpenAPI file is not
incremented. It MAY include patch level changes. Patch version MUST be reset to 0 when minor
version is incremented. The minor version Y(s) of a service MUST always be less than or equal
to the minor version Y(a) of the Swagger/OpenAPI file, Y(s) ≤ Y(a).
Semantic Versioning for both API Specifications and Services
42
43. 10. Patch version Z(a) (x(a).y(a).Z(a) | x(a) > 0) of the Swagger/OpenAPI file MUST be incremented if
changes that do not require any services implementing the API to be changed, are introduced.
11. Patch version Z(s) (x(s).y(s).Z(s) | x(s) > 0) of a service MUST be incremented if only backwards
compatible bug fixes are introduced. A bug fix is defined as an internal change that fixes incorrect
behavior and MUST NOT require any changes to the Swagger/OpenAPI file. The patch
version Z(s) of a service MUST NOT be constrained by the patch version Z(a) of the
Swagger/OpenAPI file, and vice-versa.
12. Minor version Y(a) (x(a).Y(a).z(a) | x(a) > 0) of the Swagger/OpenAPI file MUST be incremented if
new, backwards compatible functionality is introduced to the API. It MUST be incremented if
any API functionality is marked as deprecated. It MAY include patch level changes. Patch version
MUST be reset to 0 when minor version is incremented.
13. Minor version Y(s) (x(s).Y(s).z(s) | x(s) > 0) of a service MUST be incremented, together with the
Swagger/OpenAPI file one, if new, backwards compatible functionality is introduced by the API
changes. It MUST NOT be incremented if the minor version of the Swagger/OpenAPI file is not
incremented. It MAY include patch level changes. Patch version MUST be reset to 0 when minor
version is incremented. The minor version Y(s) of a service MUST always be less than or equal
to the minor version Y(a) of the Swagger/OpenAPI file, Y(s) ≤ Y(a).
Semantic Versioning for both API Specifications and Services
43
44. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
44
Meta-Model and Terminology for APIs
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
46. Our Journey to Zero Downtime
46
Meta-Model and
Terminology for APIs
47. Our Journey to Zero Downtime
47
Meta-Model and
Terminology for APIs
API Gateway
48. Our Journey to Zero Downtime
48
Meta-Model and
Terminology for APIs
API Gateway
API Service Discovery
49. Our Journey to Zero Downtime
49
Meta-Model and
Terminology for APIs
API Gateway
API Service Discovery
API Registry
50. Our Journey to Zero Downtime
50
Meta-Model and
Terminology for APIs
API Gateway
API Service Discovery
API Registry
51. Our Journey to Zero Downtime
51
Meta-Model and
Terminology for APIs
API Gateway
API Service Discovery
Routing
API Registry
52. Our Journey to Zero Downtime
52
Meta-Model and
Terminology for APIs
API Gateway
API Service Discovery
Routing
Canary Release
API Registry
53. Our Journey to Zero Downtime
53
Meta-Model and
Terminology for APIs
Zero Downtime
API Gateway
API Service Discovery
Routing
Canary Release
API Registry
54. Our Journey to Zero Downtime
54
Meta-Model and
Terminology for APIs
API Gateway
API Service Discovery
Routing
Canary Release
Zero Downtime
API Registry
67. API Service Discovery and Client-Side Load Balancing
67
API Service
Discovery
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
68. API Service Discovery and Client-Side Load Balancing
68
Service~1
API Service
Discovery
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
69. API Service Discovery and Client-Side Load Balancing
69
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
70. API Service Discovery and Client-Side Load Balancing
70
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
72. API Service Discovery and Client-Side Load Balancing
72
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
73. API Service Discovery and Client-Side Load Balancing
73
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
74. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
74
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
75. Logical Address Physical Address
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
API Service Discovery and Client-Side Load Balancing
75
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
76. Logical Address Physical Address
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
76
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
77. Logical Address Physical Address
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
{
"method": "get",
"host": "10.0.0.1:9001",
"urlPathTemplate": "/accounts"
}
API Service Discovery and Client-Side Load Balancing
77
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
78. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
78
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
79. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
79
Instance of
Service~1
10.0.0.1:9001
Instance of
Application~1
API Service
Discovery
80. Router
Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
80
Instance of
Service~1
10.0.0.1:9001
Instance of
Application~1
API Service
Discovery
81. Router
Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
81
Instance of
Service~1
10.0.0.1:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
82. Router
Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
82
Instance of
Service~1
10.0.0.1:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
83. Router
Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
83
Instance of
Service~1
10.0.0.1:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
84. Router
Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
84
Instance of
Service~1
10.0.0.1:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
85. Router
Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
85
Instance of
Service~1
10.0.0.1:9001
Instance of
Application~1
API Service
Discovery
86. Router
Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
86
Instance of
Service~1
10.0.0.1:9001
Instance of
Application~1
Instance of
Service~1
10.0.0.2:9001
API Service
Discovery
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
87. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.2:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
87
Router
Instance of
Service~1
Instance of
Service~1
10.0.0.1:9001
10.0.0.2:9001
Instance of
Application~1
API Service
Discovery
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
88. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.2:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
88
Router
Instance of
Service~1
Instance of
Service~1
10.0.0.1:9001
10.0.0.2:9001
Instance of
Application~1
API Service
Discovery
89. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.2:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
89
Router
Instance of
Service~1
10.0.0.2:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
90. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.2:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
90
Router
Instance of
Service~1
10.0.0.2:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
91. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.2:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
91
Router
Instance of
Service~1
10.0.0.2:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
92. Logical Address Physical Address
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.1:9001",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
{
"method": “get",
"host": “10.0.0.2:9001",
"urlPathTemplate": “/accounts"
}
API Service Discovery and Client-Side Load Balancing
92
Router
Instance of
Service~1
10.0.0.2:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
93. Logical Address Physical Address
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
{
"method": "get",
"host": "10.0.0.1:9001",
"urlPathTemplate": "/accounts"
}
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
{
"method": "get",
"host": "10.0.0.2:9001",
"urlPathTemplate": "/accounts"
}
API Service Discovery and Client-Side Load Balancing
93
Router
Instance of
Service~1
10.0.0.2:9001
Instance of
Application~1
{
"method": “get",
"host": “api.ing.com",
"urlPathTemplate": “/accounts"
}
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
105. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
• Service version is a version of a service.
• Instance is a running process of a service version. As the running
processes are addressable on TCP/IP network, you can call them via a
socket identified by an IP address and a TCP port.
105
API Service Discovery and Client-Side Load Balancing
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
106. • API is a set of API endpoints that share a common purpose.
• API endpoint is an interface; when using HTTP, an API endpoint is
identified by the triplet {HTTP method, host, URL Path Template}.
• API specification is a precise and comprehensive documentation of
the API endpoints part of the API. We use the OpenAPI/Swagger
standard.
• Service is a piece of software, a piece of code, to be run in an out-of-
process component, so it cannot be a library!
106
API Service Discovery and Client-Side Load Balancing
API endpoint
Service
1
1..n
API
1
0..n
1
135. In particular, [Baker Street] creates a simpler management model: there is a 1:1 mapping
between a microservice instance and local load balancer (no central load balancer required!),
which means every microservice can be configured and set up in exactly the same way using
a default configuration that works for most services. In addition, the distributed architecture
exhibits linear scale: each new microservice instance adds new load balancing capacity.
Thus, the system is self-provisioning and automatically provides the capacity needed to
handle the available instances of a service. Finally, by storing availability information locally
with each load balancer instance, [Baker Street] ensures that all active microservice
instances can still route traffic, even if some instances of the microservice or instances of
[Baker Street] components.
Source: https://thenewstack.io/baker-street-avoiding-bottlenecks-with-a-client-side-load-balancer-for-microservices/
API Service Discovery and Client-Side Load Balancing
135
158. API Registry
158
Router
Instance of
Application~1
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
Is this service
allowed to implement
this API endpoint?
Is this application
allowed to call
this API endpoint?
API ProviderAPI Consumer
API Registry
162. Within our organization, we want to control which service is
implementing which part of an API.
The Manifest
162
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
163. Within our organization, we want to control which service is
implementing which part of an API.
We can implement this control by creating a structure
making an explicit link between a service and a list of API
endpoints part of an API. We will call such a structure
our manifest.
The Manifest
163
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
Manifest
164. Within our organization, we want to control which service is
implementing which part of an API.
We can implement this control by creating a structure
making an explicit link between a service and a list of API
endpoints part of an API. We will call such a structure
our manifest.
When we generate a manifest, we store/remember the
version of the API specification that documents API
endpoint at the moment the manifest is generated.
The Manifest
164
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
Manifest
165. {
"serviceName": "<Name of the Service>",
"endpoints": [
{
"method": "<paths/{path}/get|post|put|patch|delete from Swagger/OpenAPI>",
"host": "<host from Swagger/OpenAPI>",
"urlPathTemplate": "<paths/{path} from Swagger/OpenAPI>",
"apiSpecificationVersion": "<info/version from Swagger/OpenAPI>"
},
...
]
}
The Manifest
165
166. {
"serviceName": "<Name of the Service>",
"endpoints": [
{
"method": "<paths/{path}/get|post|put|patch|delete from Swagger/OpenAPI>",
"host": "<host from Swagger/OpenAPI>",
"urlPathTemplate": "<paths/{path} from Swagger/OpenAPI>",
"apiSpecificationVersion": "<info/version from Swagger/OpenAPI>"
},
...
]
}
The Manifest
166
Service~1
{
"method": "get",
"host": "api.ing.com",
"urlPathTemplate": "/accounts"
}
169. When a software package wants to call
an API endpoint, it has first to declare its
intention to do so.
Subscription and Peer-Token
169
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
170. When a software package wants to call
an API endpoint, it has first to declare its
intention to do so.
We call subscription this relation
between the software package, called an
application, and a specific API
endpoint.
Subscription and Peer-Token
170
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
SubscriptionApplication
172. When a software package wants to call
an API endpoint, it has first to declare its
intention to do so.
We call subscription this relation
between the software package, called an
application, and a specific API
endpoint.
When we generate a peer-token, we
store/remember the version of the API
specification that documents the API
endpoint at the moment the
subscription is created.
Subscription and Peer-Token
172
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
(Subscription)
Peer-Token
Application
173. {
“applicationName": "<Name of the Application>",
"endpoints": [
{
"method": "<paths/{path}/get|post|put|patch|delete from Swagger/OpenAPI>",
"host": "<host from Swagger/OpenAPI>",
"urlPathTemplate": "<paths/{path} from Swagger/OpenAPI>",
"apiSpecificationVersion": "<info/version from Swagger/OpenAPI>"
},
...
]
}
Subscription and Peer-Token
173
174. {
“applicationName": "<Name of the Application>",
"endpoints": [
{
"method": "<paths/{path}/get|post|put|patch|delete from Swagger/OpenAPI>",
"host": "<host from Swagger/OpenAPI>",
"urlPathTemplate": "<paths/{path} from Swagger/OpenAPI>",
"apiSpecificationVersion": "<info/version from Swagger/OpenAPI>"
},
...
]
}
Subscription and Peer-Token
174
This is the exact same structure as the manifest ;-)
185. API Platform
185
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Service~1
Manifest
Manifest
186. API Platform
186
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Service~1
Manifest
Manifest
187. API Platform
187
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Service~1
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
188. API Platform
188
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Service~1
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
189. API Platform
189
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
190. API Platform
190
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
191. API Platform
191
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
192. API Platform
192
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
Router
Instance of
Application~1
API Consumer
193. API Platform
193
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
Router
Instance of
Application~1
API Consumer
194. API Platform
194
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
Router
Instance of
Application~1
API Consumer
Peer-Token
(Subscription)
Peer-Token
Application
195. API Platform
195
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
Router
Instance of
Application~1
API Consumer
Peer-Token
(Subscription)
Peer-Token
Application
196. Router
API Platform
196
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
Instance of
Application~1
API Consumer
Peer-Token
(Subscription)
Peer-Token
Application
API SDK
197. Router
API Platform
197
API endpoint
API specification
Xa.Ya.Za
API
1
0..n
1
1
API Registry
API Developer
Portal
Service
1
1..n
Manifest
Manifest
Service version
Xs.Ys.Zs
1
0..n
API Provider
Instance
1
0..n
Instance of
Service~1
10.0.0.1:9001
API Service
Discovery
Instance of
Application~1
API Consumer
Peer-Token
(Subscription)
Peer-Token
Application
API SDK SDK
198. API Platform
198
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
Router
Instance of
Application~1
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
API ProviderAPI Consumer
API Registry
API Developer
Portal
API SDK SDK
Peer-Token
Manifest
(Subscription)
Peer-Token
Application
Manifest
200. Routing Conjecture
200
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
Router
Instance of
Application~1
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
API ProviderAPI Consumer
API Registry
API Developer
Portal
API SDK SDK
Peer-Token
Manifest
(Subscription)
Peer-Token
Application
Manifest
201. Routing Conjecture
201
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
Router
Instance of
Application~1
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
API ProviderAPI Consumer
API Registry
API Developer
Portal
API SDK SDK
Peer-Token
Manifest
(Subscription)
Peer-Token
Application
Manifest
202. Routing Conjecture
202
API endpoint
API specification
Xa.Ya.Za
Service
Service version
Xs.Ys.Zs
Instance
API
1
0..n
1
1
1
1..n
1
1
0..n
1
0..n
Router
Instance of
Application~1
API Service
Discovery
Instance of
Service~1
10.0.0.1:9001
API ProviderAPI Consumer
API Registry
API Developer
Portal
API SDK SDK
Peer-Token
Manifest
(Subscription)
Peer-Token
Application
Manifest
203. The canary release is a technique to reduce the risk of introducing a new software version in
production by slowly rolling out the change to a small subset of users before making it
available to everybody.
Canary Release
203
204. The canary release is a technique to reduce the risk of introducing a new software version in
production by slowly rolling out the change to a small subset of users before making it
available to everybody.
The name for this technique originates from miners who would carry a canary in a cage down
the coal mines. If toxic gases leaked into the mine, it would kill the canary before killing the
miners.
A canary release provides a similar form
of early warning for potential problems
before impacting your user base.
Canary Release
204
Source: https://martinfowler.com/bliki/CanaryRelease.html
211. We can now implement the Canary Release, but let’s be careful
Application (API Specification x.Y.z) (Yes)API endpoint (API Specification x.Y.z)
Application (API Specification x.Y.z) (Yes)API endpoint (API Specification x.Y+1.z)
Application (API Specification x.Y+1.z) (Yes)API endpoint (API Specification x.Y+1.z)
Application (API Specification x.Y+1.z) (No) API endpoint (API Specification x.Y.z)
But, we can handle that by building the routing rules with information form both
the API Registry and the API Service Discovery ;-)
Routing
211
212. We can now implement the Canary Release, but let’s be careful
1. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y.z)
Application (API Specification x.Y.z) (Yes)API endpoint (API Specification x.Y+1.z)
Application (API Specification x.Y+1.z) (Yes)API endpoint (API Specification x.Y+1.z)
Application (API Specification x.Y+1.z) (No) API endpoint (API Specification x.Y.z)
But, we can handle that by building the routing rules with information form both
the API Registry and the API Service Discovery ;-)
Routing
212
213. We can now implement the Canary Release, but let’s be careful
1. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y.z)
2. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y+1.z)
Application (API Specification x.Y+1.z) (Yes)API endpoint (API Specification x.Y+1.z)
Application (API Specification x.Y+1.z) (No) API endpoint (API Specification x.Y.z)
But, we can handle that by building the routing rules with information form both
the API Registry and the API Service Discovery ;-)
Routing
213
214. We can now implement the Canary Release, but let’s be careful
1. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y.z)
2. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y+1.z)
3. Application (API Specification x.Y+1.z) (Yes)service (API Specification x.Y+1.z)
Application (API Specification x.Y+1.z) (No) API endpoint (API Specification x.Y.z)
But, we can handle that by building the routing rules with information form both
the API Registry and the API Service Discovery ;-)
Routing
214
215. We can now implement the Canary Release, but let’s be careful
1. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y.z)
2. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y+1.z)
3. Application (API Specification x.Y+1.z) (Yes)service (API Specification x.Y+1.z)
4. Application (API Specification x.Y+1.z) (No) service (API Specification x.Y.z)
But, we can handle that by building the routing rules with information form both
the API Registry and the API Service Discovery ;-)
Routing
215
216. We can now implement the Canary Release, but let’s be careful
1. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y.z)
2. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y+1.z)
3. Application (API Specification x.Y+1.z) (Yes)service (API Specification x.Y+1.z)
4. Application (API Specification x.Y+1.z) (No) service (API Specification x.Y.z)
But, we can handle that by building the routing rules with information form both
the API Registry and the API Service Discovery ;-)
Routing
216
217. We can now implement the Canary Release, but let’s be careful
1. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y.z)
2. Application (API Specification x.Y.z) (Yes)service (API Specification x.Y+1.z)
3. Application (API Specification x.Y+1.z) (Yes)service (API Specification x.Y+1.z)
4. Application (API Specification x.Y+1.z) (No) service (API Specification x.Y.z)
But, we can handle that by building the routing rules with information from both
API Registry and API Service Discovery ;-)
Routing
217