patternMajorpendingCanonical
REST API Versioning Strategies
Viewed 0 times
API versioningRESTbreaking changessunset headerv1 v2backward compatibility
Problem
APIs need to evolve without breaking existing clients. Choosing the wrong versioning strategy leads to maintenance nightmares or forces all clients to update simultaneously.
Solution
Three main versioning approaches:
1. URL path versioning (most common)
Pros: Clear, easy to route, easy to document
Cons: Duplicates controllers/routes
2. Header versioning
Pros: Clean URLs, resource-oriented
Cons: Harder to test in browser, less discoverable
3. Query parameter versioning
Pros: Easy to test, optional (default to latest)
Cons: Pollutes query string, caching complications
Best practices regardless of strategy:
- Adding fields to responses
- Adding optional request parameters
- Adding new endpoints
- Removing or renaming fields
- Changing field types
- Changing validation rules
- Removing endpoints
1. URL path versioning (most common)
GET /api/v1/users
GET /api/v2/usersPros: Clear, easy to route, easy to document
Cons: Duplicates controllers/routes
2. Header versioning
GET /api/users
Accept: application/vnd.myapp.v2+json
# Or custom header:
X-API-Version: 2Pros: Clean URLs, resource-oriented
Cons: Harder to test in browser, less discoverable
3. Query parameter versioning
GET /api/users?version=2Pros: Easy to test, optional (default to latest)
Cons: Pollutes query string, caching complications
Best practices regardless of strategy:
- Version the API, not individual endpoints
- Support at least N-1 (current + previous version)
- Use sunset headers:
Sunset: Sat, 01 Mar 2025 00:00:00 GMT - Document breaking vs non-breaking changes
- Non-breaking changes don't need new version:
- Adding fields to responses
- Adding optional request parameters
- Adding new endpoints
- Breaking changes need new version:
- Removing or renaming fields
- Changing field types
- Changing validation rules
- Removing endpoints
Why
API versioning is about managing change. Good versioning lets you evolve the API while giving clients time to migrate. Bad versioning either breaks clients or prevents API evolution.
Gotchas
- Don't version too aggressively - most changes are additive and don't need a new version
- Content negotiation versioning (Accept header) is REST-purist but pragmatically harder to use
Context
Designing evolvable REST APIs
Revisions (0)
No revisions yet.