api-tools/api-version-manager

轻松简化Laravel API版本管理。无需单独的控制器——只需灵活性、回退和版本特定组件。

0.0.1 2024-01-09 15:33 UTC

This package is auto-updated.

Last update: 2024-08-30 00:10:30 UTC


README

License: MIT

Laravel API版本管理器 包简化了Laravel应用程序中API端点版本的管理。此包使您能够轻松处理API版本,无需为每个版本创建单独的控制器。其设计提供了一种灵活且高效的解决方案,使您能够定义回退版本并轻松生成版本特定的请求和资源。

功能

  • 回退版本:为您的API路由定义回退版本,确保平稳过渡并保持向后兼容。
  • 单个控制器:消除为每个API版本创建单独控制器的需求。我们的包将动态地将版本特定的请求和资源类注入到您的现有控制器中。
  • 轻松版本管理:通过路由配置轻松管理API版本。该包将自动处理版本特定组件的解析,简化您的开发过程。

安装

您可以通过Composer安装此包

composer require api-tools/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)。有关更多信息,请参阅许可证文件