Versioning (API)

API versioning is a very complicated topic that is occasionally dismissed as purely a theological argument. Different organizations handle it in a different ways, and teams within organizations frequently behave differently. When you implement modifications to the code, a proper API versioning technique ensures that an API version remains operational.

We will cover the following:

  1. What is API Versioning?
  2. Why is API Versioning Important?
  3. Types of API Versioning
  4. When to Create an API Version?
  5. How to Do API Versioning?

What is API Versioning?

Since an API represents a legal agreement between you and the customers who use it, it needs to be dependable, consistent, well-documented, and managed. Ideally, developers are not permitted to violate this agreement.

However, there are some situations where they are required to make a breaking change, therefore this isn't always the case. When this occurs, you must make sure that you have put in place safeguards to ensure that your API users are not impacted by the change.

Versioning is the process of creating collaborative data sharing and editing controls to ensure that your product continues to give users new choices without having to update to the latest version. The design of the API includes versioning as a key component.

It gives developers the power to improve their API when new versions are created without causing the client's apps to break. Versioning enables users to continue using an existing REST API while only updating or migrating their applications when they are ready to do so.

In short, the process of controlling API updates and ensuring that they are made without obstructing customers is known as versioning an API. A solid API versioning technique makes the changes known and allows API users to choose when to update to the most recent version at their convenience.

Why is API Versioning Important?

Take a look at some consumer software. They frequently update tools to fix bugs and provide new features they believe users will find useful. The average customer is typically not inconvenienced when a new function is offered. Most likely, a user doesn't have to stop doing anything to adapt to this change.

With APIs, this is not the case. When a third-party application developer utilizes your API to create an integration, they anticipate stability from the API. Clients are compelled to update their software if API updates are made without considering their needs. If updates aren't taken into account, their applications can malfunction.

Of course, you can't expect every API user to stop using your API when updates are made. People already have plenty on their plates, and making them focus on your integration will take time and money away from them.

This is why altering an API's version number is only one aspect of API versioning. When possible, big updates should be avoided, but when they must be made, they should be announced to customers via the website, emails, and documentation.

Importantly, versioning also entails maintaining older versions of your API so that client integrations continue to work even if they are unable to upgrade to the most recent version of your API quite yet. As a result, developers can enhance the API without harming user experience or disrupting client apps.

Types of API Versioning

Respecting agreements with your current API customers is the most frequent justification for API versioning. When they set up your API, their apps may rely on how it works. They might not be prepared to change their apps in the same way just because you need to update your API.

API versioning allows for a smooth transition between releases. Since you can still use the out-of-date functionality in earlier versions, it's the best way to sunset an asset or endpoint. Your development timeline can also be noted in your API documentation, which will assist your users to stay informed and make the appropriate adjustments.

You can construct different versions of your API in a variety of ways. The following list includes some of the most prevalent API versioning.

#1 URI Versioning

The most popular technique for API versioning is to include the API version right in the URI. It's the most popular approach since it works the best.

Take into account the following potential endpoint:

https://www.imaginaryapi.com/api/1/catalog

Simple, right?

All that is necessary is the setup of API endpoints, which you would already be doing. Additionally, if there is ever an update, it enables your clients to store assets.

Although it's a fine way, it also goes against one of the rules of good API architecture, which states that each URI should point to a different resource. Additionally, URI versioning is prone to becoming out of control, which could result in a significant URI footprint.

Additionally, URI versioning can be highly rigid and inflexible.

A single resource or a smaller section of the entire API cannot be updated. URI versioning is therefore all-or-nothing. It can be difficult to create a new version, which might cause production timelines to lag.

Last but not least, URI versioning can interfere with HTTP caching. Each version would need to be kept in an HTTP cache.

#2 Query Parameter Versioning

A query parameter versioning strategy is also quite successful. It allows you to use a query variable to indicate the API version.

For example:

https://www.imaginaryapi.com/api/products?version=1

It is also pretty easy to put this strategy into practice. It also makes it simple to set a default API version that will be used until a different version is given.

#3 Custom Headers Versioning

By adding custom headers with version numbers embedded in them as a property, this technique enables developers to version APIs.

For example:

Curl -H "accepts-versions: 1:

https://www.imaginaryapi.com/api/products

By not extending the URI with extraneous filler stuff, this approach differentiates from querying and URI versioning.

#4 Content Negotiation Versioning

This approach allows developers to version a specific resource representation rather than the entire API. This gives more accurate control and significantly modifies the code base.

For example:

Accept: application/vnd.example.v1+json

Accept: application/vnd.example+json;version=1.0

Furthermore, the URI routing rules that versioning via the URI path introduces are not necessary with this approach. Comparatively speaking, this strategy is less user-friendly than URI-versioned APIs.

Additionally, content negotiation can allow you to have a tidy fixed URL, but eventually, you'll have to deal with the difficulty of serving many versions of the same piece of content.

When to Create an API Version?

Generally speaking, you should develop a new API version whenever you alter your API. But it goes deeper than that.

More particularly, API versioning should take place whenever you:

  • Modify fields or routing after an API is released.
  • Modify the payload structures, for example, by altering an integer variable to a float.
  • Endpoints should be removed to improve an HTTP implementation or design issue.

It may be necessary to release a new version of your API if you need to make any of these changes after your API has already been made public. Your current customers' digital products won't break or be impacted in this way.

Additional factors, such as the addition of endpoints or new parameters to answers, may also require the creation of an API version. It's possible that these adjustments don't call for a brand-new release.

A small update would likely do. Regardless, keeping track of minor updates could be helpful when troubleshooting a client's technical issues.

The API contract must change when an existing API is modified. Let's take a moment to think about the API contract before we dig into the various ways to establish an API version.

How to Do API Versioning?

Realistically, your API will need to periodically release new versions. There will be issues that need to be altered but can't be fixed without making a breaking change, including significant bugs, security vulnerabilities, or performance enhancements. Or perhaps the API requires revision since it was poorly conceived from the start.

One of the most crucial things you can do when developing a versioning system is to permit backward compatibility. Maintain support for older versions of your API so that users can continue to use them until they decide to upgrade. In essence, you're creating a new version of your API while maintaining the functionality of the old one.

Clients should be informed of all changes to your API, from minor updates to brand-new releases. Always let clients know when the functionality or version of your API needs to be discontinued and give them enough advance notice. Expect to annoy some people as well as lose some users—hopefully not too many.

Conclusion

An API update is risky but required. Things break without appropriate versioning. And when things break, customers lose trust and look for a more stable option.

The ultimate purpose of proper API versioning is to reduce the burden on the customer as much as possible with each change. Your users will appreciate it.

Further Reading:

AWS Monitoring

Cloud Access Security Broker (CASB)

DevSecOps

IIS Log Viewer

Technology Stack


Atatus API Monitoring and Observability

Atatus provides Powerful API Observability to help you debug and prevent API issues. It monitors the user experience and is notified when abnormalities or issues arise. You can deeply understand who is using your APIs, how they are used, and the payloads they are sending.

Atatus's user-centric API observability monitors the functionality, availability, and performance of your internal, external, and third-party APIs to see how your actual users interact with the API in your application. It also validates rest APIs and keeps track of metrics like latency, response time, and other performance indicators to ensure your application runs smoothly. Customers can easily get metrics on their quota usage, SLAs, and more.

Try your 14-day free trial of Atatus.