tenantcloud/laravel-api-versioning

简单的 Laravel API 版本控制实现

v1.2.0 2024-04-25 12:25 UTC

README

Laravel API 版本控制包。

使用 composer require tenantcloud/laravel-api-versioning 安装此包。

命令

安装依赖项: docker run -it --rm -v $PWD:/app -w /app composer install

运行测试: docker run -it --rm -v $PWD:/app -w /app php:8.1-cli vendor/bin/pest

在本地运行 php-cs-fixer: docker run -it --rm -v $PWD:/app -w /app composer cs-fix

用法

如果没有版本需求或端点在任何版本中都相同,请使用默认的 Laravel 路由定义。

// Api-Version: 1.0 -> CacToolCampaignController
// Api-Version: latest -> CacToolCampaignController
Route::post('cac/campaigns', [CacToolCampaignController::class, 'create']);

如果路由具有版本,请创建一些版本规则。

// Api-Version: 4.0 -> 404
// Api-Version: 3.0 -> CacToolCampaignTemplateController
// Api-Version: 1.0 -> CacToolCampaignTemplateController
Route::get('cac/campaigns/template', CacToolCampaignTemplateController::class)
->versioned('<=3.0');

如果我们进行了破坏性更改并希望为新版本提供新的操作,我们应该注册两个规则 - 一个用于旧版本,一个新的用于新版本和未来的版本。

// Api-Version: 3.0 -> CacToolCampaignTemplateController
// Api-Version: 4.0 -> CacToolCampaignTemplateForNewVersionController
// Api-Version: latest -> CacToolCampaignTemplateForNewVersionController
Route::get('cac/campaigns/template', CacToolCampaignTemplateController::class)
->versioned('<=3.0')
->versioned('>=4.0', [CacToolCampaignTemplateForNewVersionController::class, 'index'])

在某些情况下,我们可能需要为某些端点获取多个破坏性更改。

// Api-Version: 3.0 -> CacToolCampaignTemplateController
// Api-Version: 4.0 -> error
// Api-Version: 5.0 -> CacToolCampaignVersion5Controller
// Api-Version: latest -> CacToolCampaignVersion5Controller
Route::get('cac/campaigns/template', CacToolCampaignTemplateController::class)
->versioned('<=3.0')
->versioned('>=5.0', [CacToolCampaignVersion5Controller::class, 'index'])

所有由 APIVersioningServiceProvider::class 注册的解析。