uttamrabadiya / api-version-manager
轻松简化Laravel API版本管理。不再需要单独的控制器——只需灵活性、回退和特定版本的组件。
0.3.0
2024-01-08 18:28 UTC
Requires
- laravel/framework: ^8.0|^9.0|^10.0
Requires (Dev)
- nunomaduro/collision: ^5.10
- orchestra/testbench: ^6.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.0|^10.0
README
Laravel API版本管理器包简化了Laravel应用程序中API端点版本的管理。此包使您能够轻松处理API版本管理,无需为每个版本创建单独的控制器。其设计提供了一种灵活且高效的解决方案,使您能够定义回退版本并轻松生成特定版本的请求和资源。
特性
- 回退版本:为您的API路由定义回退版本,确保平稳过渡并保持向后兼容性。
- 单个控制器:消除为每个API版本创建单独控制器的需求。我们的包将动态地将特定版本的请求和资源类注入到您的现有控制器中。
- 轻松版本管理:通过路由配置轻松管理API版本。包将自动处理特定组件的解析,简化您的开发过程。
安装
您可以通过Composer安装此包
composer require uttamrabadiya/api-version-manager
配置
发布配置文件
在使用此包之前,必须发布配置文件。您可以使用以下命令发布配置文件
php artisan vendor:publish --tag=api-version-manager
必选配置
- 在配置中定义可用的
versions
数组 - 在配置中定义默认版本
version
其他可能的配置
app_http_namespace
(默认:App\Http
)- 通常我们使用App\Http
命名空间来存储所有我们的请求和资源类,但如果您使用不同的命名空间,则可以在此处定义它。api_prefix
(默认:api
)- 所有版本化路由的API前缀。use_fallback_entity
(默认:true
)- 如果您想对所有请求和资源类使用回退实体,则将其设置为true
,否则设置为false
。例如,您在V1
中定义了SampleRequest
,现在您想在V2
中使用相同的请求,则可以将此选项设置为true
,它将自动使用V1
中的SampleRequest
。
可用命令
创建一个新的版本化请求
php artisan make:versioned-request {name}
可能选项
--force
:如果请求已存在,则覆盖请求。
创建一个新的版本化资源
php artisan make:versioned-resource {name}
可能选项
--collection
:创建资源集合而不是单个资源。--force
:如果资源已存在,则覆盖资源。
用法
api.php
文件示例
Route::prefix('v1')->group(function () { Route::get('endpoint1', [SomeController::class, 'endpoint1']); // Available on v1 & v2 (Via default fallback) Route::get('endpoint2', [SomeController::class, 'endpoint2']); // Available on v1 & v2 (Via default fallback) }); Route::prefix('v2')->group(function () { Route::get('new-endpoint', [SomeController::class, 'endpoint3']); // Available only on v2 });
SomeController.php
文件示例
<?php namespace App\Http\Controllers\API; use App\Http\Controllers\Controller; use App\Http\Resources\Versioned\EndpointResource; // Mandatory to use versioned resource only. Don't use `App\Http\Resources\V1\EndpointResource` or `App\Http\Resources\V2\EndpointResource` use App\Http\Requests\Versioned\NewEndpointRequest; // Mandatory to use versioned request only. Don't use `App\Http\Requests\V1\NewEndpointRequest` or `App\Http\Requests\V2\NewEndpointRequest` use Illuminate\Http\Request; class SomeController extends Controller { public function endpoint1(Request $request) { return DashboardResource::item(['some' => 'data']); // Replacement of native `new DashboardResource(['some' => 'data'])` resource } public function endpoint1(Request $request) { return DashboardResource::collection(['some' => 'data']); } public function endpoint3(NewEndpointRequest $request) { return DashboardResource::item(['some' => 'data']); } }
变更日志
请参阅变更日志以获取更多有关最近更改的信息。
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。