Implement API versioning strategies -- URL path (/v1/, /v2/), header-based (Accept: application/vnd.api.v2+json), or query parameter (?version=2) -- with backward compatibility layers, deprecation notices, and automated migration paths. Manage concurrent version support, sunset timelines, and breaking change detection across the API surface.
/v1/controllers/, /v2/controllers/) with shared business logic extracted into version-independent service layers.Deprecation: true, Sunset: <date>, and Link: <migration-guide-url>; rel="sunset" per the Sunset HTTP header RFC.See ${CLAUDE_SKILL_DIR}/references/implementation.md for the full implementation guide.
${CLAUDE_SKILL_DIR}/src/routes/v1/ - Version 1 route definitions${CLAUDE_SKILL_DIR}/src/routes/v2/ - Version 2 route definitions${CLAUDE_SKILL_DIR}/src/middleware/version-router.js - Version extraction and routing middleware${CLAUDE_SKILL_DIR}/src/compatibility/ - Request/response transformation layers between versions${CLAUDE_SKILL_DIR}/src/utils/breaking-change-detector.js - OpenAPI diff tool for breaking changes${CLAUDE_SKILL_DIR}/docs/migration-guide-v1-to-v2.md - Consumer migration documentation| Error | Cause | Solution |
|---|---|---|
| 400 Unsupported Version | Client requests a version that does not exist | Return available versions list in error body; suggest closest valid version |
| 410 Gone | Client requests a sunset version past its end-of-life date | Return migration guide URL and recommended current version in error body |
| Compatibility layer failure | v1-to-v2 transform encounters a field with no mapping | Log unmapped fields; return partial response with warning header; alert API team |
| Version header ignored | Client sets version header but reverse proxy strips custom headers | Document required proxy configuration; add URL path fallback for header-based versioning |
| Breaking change undetected | Semantic change (same field name, different meaning) not caught by schema diff | Add contract tests with business-logic assertions beyond schema structure |
Refer to ${CLAUDE_SKILL_DIR}/references/errors.md for comprehensive error patterns.
URL path versioning: Migrate from /api/users to /api/v1/users and /api/v2/users where v2 changes name (string) to firstName/lastName (object), with v1 compatibility layer that joins the fields.
Header-based versioning: Route requests using Accept: application/vnd.myapi.v2+json with a default version fallback for clients omitting the header, and version discovery via OPTIONS responses.
Sunset lifecycle management: Announce v1 deprecation with 6-month sunset timeline, add Sunset headers immediately, log v1 usage metrics to track migration progress, and auto-disable after sunset date.
See ${CLAUDE_SKILL_DIR}/references/examples.md for additional examples.