Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Header-based Versioning in a REST API
📖 Scenario: You are building a simple REST API for a book store. You want to support different versions of the API using HTTP headers. This way, clients can specify which version of the API they want to use by sending a custom header.
🎯 Goal: Create a REST API endpoint that returns book information. Implement header-based versioning so that when the client sends X-API-Version: 1, the API returns the book title only, and when the client sends X-API-Version: 2, the API returns the book title and author.
📋 What You'll Learn
Create a dictionary called book with keys title and author and values 'The Great Gatsby' and 'F. Scott Fitzgerald' respectively.
Create a variable called version_header that simulates reading the 'X-API-Version' header from a request.
Use an if-elif-else statement to check the value of version_header and create a dictionary called response with the correct data for version 1 or 2.
Print the response dictionary.
💡 Why This Matters
🌍 Real World
APIs often need to support multiple versions so that old clients keep working while new features are added. Header-based versioning is one way to do this cleanly.
💼 Career
Understanding how to handle API versioning is important for backend developers and anyone working with web services to ensure smooth upgrades and backward compatibility.
Progress0 / 4 steps
1
DATA SETUP: Create the book data
Create a dictionary called book with these exact entries: 'title': 'The Great Gatsby' and 'author': 'F. Scott Fitzgerald'.
Rest API
Hint
Use curly braces {} to create a dictionary with the keys and values exactly as shown.
2
CONFIGURATION: Simulate reading the version header
Create a variable called version_header and set it to the string '1' to simulate the 'X-API-Version' header value.
Rest API
Hint
Assign the string '1' to the variable version_header.
3
CORE LOGIC: Create response based on version header
Use an if-elif-else statement to check if version_header is '1' or '2'. Create a dictionary called response that contains only 'title' from book if version is '1', or both 'title' and 'author' if version is '2'. If the version is neither, set response to {'error': 'Unsupported API version'}.
Rest API
Hint
Use if to check for version '1', elif for version '2', and else for unsupported versions.
4
OUTPUT: Print the response
Write a print statement to display the response dictionary.
Rest API
Hint
Use print(response) to show the final output.
Practice
(1/5)
1. What is the main purpose of header-based versioning in REST APIs?
easy
A. To change the API URL structure for each version
B. To specify the API version using HTTP headers instead of URLs
Header-based versioning uses HTTP headers to indicate which API version the client wants.
Step 2: Compare with other versioning methods
Unlike URL or query parameter versioning, header-based keeps URLs clean and uses headers instead.
Final Answer:
To specify the API version using HTTP headers instead of URLs -> Option B
Quick Check:
Header versioning = version in HTTP headers [OK]
Hint: Remember: header versioning hides version in HTTP headers [OK]
Common Mistakes:
Confusing header versioning with URL versioning
Thinking version is in request body
Assuming query parameters are used
2. Which HTTP header is commonly used to specify API version in header-based versioning?
easy
A. Content-Type
B. User-Agent
C. Accept
D. Authorization
Solution
Step 1: Identify common headers for versioning
The Accept header is often used to specify the desired API version by content negotiation.
Step 2: Exclude unrelated headers
Content-Type specifies data format sent, Authorization is for credentials, and User-Agent identifies client software.
Final Answer:
Accept -> Option C
Quick Check:
Version in Accept header = D [OK]
Hint: Version info usually goes in the Accept header [OK]
Common Mistakes:
Using Content-Type instead of Accept for versioning
Confusing Authorization with version header
Thinking User-Agent controls version
3. Given this HTTP request header: Accept: application/vnd.example.v2+json Which API version is the client requesting?
medium
A. Version 2
B. Version 1
C. Version 3
D. No version specified
Solution
Step 1: Parse the Accept header value
The value application/vnd.example.v2+json includes v2, indicating version 2.
Step 2: Confirm version number meaning
The v2 part is a common pattern to specify version 2 of the API.
Final Answer:
Version 2 -> Option A
Quick Check:
v2 in Accept header means version 2 [OK]
Hint: Look for 'v' followed by number in Accept header [OK]
Common Mistakes:
Ignoring the 'v2' part and guessing version 1
Assuming no version if not in URL
Confusing +json suffix with version
4. A developer wrote this code snippet to check API version from headers:
version = request.headers.get('Content-Type')
if version == 'application/vnd.example.v1+json':
return 'Version 1'
else:
return 'Unknown version'
What is the main issue here?
medium
A. Using request.headers.get instead of request.get_header
B. Comparing version string incorrectly
C. Missing else condition
D. Using Content-Type header instead of Accept header for versioning
Solution
Step 1: Identify header used for versioning
Header-based versioning typically uses the Accept header, not Content-Type.
Step 2: Explain why Content-Type is wrong here
Content-Type describes the data format sent by the client, not the requested API version.
Final Answer:
Using Content-Type header instead of Accept header for versioning -> Option D
Quick Check:
Version header should be Accept, not Content-Type [OK]
Hint: Version info is in Accept header, not Content-Type [OK]
Common Mistakes:
Checking Content-Type for version info
Assuming request.headers.get is invalid
Ignoring else branch
5. You want to support two API versions (v1 and v2) simultaneously using header-based versioning. Which approach correctly handles this in your server code?
hard
A. Check the Accept header for 'application/vnd.example.v1+json' or 'application/vnd.example.v2+json' and route accordingly
B. Use URL paths like /v1/resource and /v2/resource to separate versions
C. Ignore headers and always serve the latest version
D. Use query parameters like ?version=1 or ?version=2 to select version
Solution
Step 1: Understand header-based versioning goal
It requires checking the HTTP headers to determine which API version to serve.
Step 2: Identify correct version detection method
Checking the Accept header for specific version strings and routing requests accordingly is the right approach.
Final Answer:
Check the Accept header for 'application/vnd.example.v1+json' or 'application/vnd.example.v2+json' and route accordingly -> Option A
Quick Check:
Route by Accept header version strings [OK]
Hint: Route requests by Accept header version values [OK]
Common Mistakes:
Mixing header versioning with URL or query parameter versioning
Ignoring version headers and serving one version only