laravel-api-versioning maintained by philiprehberger
Description
Laravel middleware for API versioning with multi-source resolution from headers, Accept vendor types, and URL path segments
Author
Last update
2026/04/23 05:42
(dev-main)
License
Downloads
53
Tags
Laravel API Versioning
Laravel middleware for API versioning with multi-source resolution from headers, Accept vendor types, and URL path segments.
Requirements
- PHP 8.2+
- Laravel 11 or 12
Installation
composer require philiprehberger/laravel-api-versioning
Laravel's package auto-discovery registers the service provider automatically.
Publish the config file:
php artisan vendor:publish --tag=api-versioning-config
This creates config/api-versioning.php.
Usage
Configuration
// config/api-versioning.php
return [
'supported_versions' => ['v1', 'v2'],
'default_version' => 'v1',
'latest_version' => 'v2',
'deprecated_versions' => [],
'vendor_name' => 'myapp',
'header' => 'X-API-Version',
'response_headers' => true,
];
Registering the Middleware
// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'api.version' => \PhilipRehberger\ApiVersioning\ApiVersion::class,
]);
})
Route::middleware('api.version')->group(function () {
// ...
});
Accessing the Current Version
use PhilipRehberger\ApiVersioning\ApiVersion;
$version = ApiVersion::current($request); // e.g. 'v2'
Version Resolution Priority
X-API-Versionrequest headerAcceptheader vendor type:application/vnd.{vendor_name}.{version}+json- URL path segment:
/api/{version}/... - Configured default version
API
| Method / Concept | Description |
|---|---|
ApiVersion::current(Request $request) |
Get the resolved API version for the current request |
ApiVersion middleware |
Resolves version, sets request attribute, adds response headers |
X-API-Version response header |
The resolved version for each request |
X-API-Deprecated response header |
true / false — whether this version is deprecated |
Response Headers
| Header | Values | Meaning |
|---|---|---|
X-API-Version |
v1, v2, ... |
The resolved version for this request |
X-API-Deprecated |
true / false |
Whether this version is deprecated |
Unsupported Version Response (400)
{
"error": {
"code": "unsupported_api_version",
"message": "API version 'v99' is not supported.",
"supported_versions": ["v1", "v2"]
}
}
Development
composer install
vendor/bin/phpunit
vendor/bin/pint --test
vendor/bin/phpstan analyse
License
MIT