tenantcloud / laravel-api-versioning
简单的 Laravel API 版本控制实现
v1.2.0
2024-04-25 12:25 UTC
Requires
- php: >=8.2
- illuminate/contracts: ^10.0
- illuminate/routing: ^10.0
- illuminate/support: ^10.0
Requires (Dev)
- nunomaduro/larastan: ^2.6
- orchestra/testbench: ^8.5
- pestphp/pest: ^2.8
- php-cs-fixer/shim: ~3.19.2
- phpstan/phpstan: ~1.10.21
- phpstan/phpstan-mockery: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-webmozart-assert: ^1.2
- tenantcloud/php-cs-fixer-rule-sets: ~3.0.0
This package is not auto-updated.
Last update: 2024-09-23 18:42:01 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
注册的解析。