mnarbash/api-versioning-by-header-request

一个用于使用请求头部管理Laravel API版本的包

1.0.2 2023-01-08 08:25 UTC

This package is auto-updated.

Last update: 2024-09-12 03:41:06 UTC


README

Latest Version on Packagist Software License Total Downloads

此包提供了使用请求头部在Laravel中管理API版本的中间件。

特性

  • 无需更改路由端点。您可以为API的所有版本使用相同的端点。

  • 通过请求头部进行API版本化:此包允许您通过在请求中添加API-VERSION头部来对API进行版本化。您可以在配置文件中指定支持的API版本和默认API版本。

  • 应用版本检查:此包包含一个中间件,它将请求中的APP-VERSION头部与应用支持的版本以及配置文件中指定的最小支持的版本进行比较。如果应用版本不受支持,中间件将返回一个更新应用的错误响应。

  • 可定制的文件夹结构:您可以在配置文件中指定API版本的定制文件夹结构。这允许您以对您的应用程序有意义的方式组织控制器和路由。

  • 基于控制器类的API版本化:该包允许您通过在路由定义中使用多控制器类来对API进行版本化。

YouTube 视频

查看此视频了解如何在项目中使用此包。

Laravel API Versioning By Header Request

https://youtu.be/2HeFCJieVLo

安装

要安装包,请运行以下命令

composer require mnarbash/api-versioning-by-header-request

配置

将ServiceProvider添加到config/app.php中的providers部分

Mnarbash\ApiVersioningByHeaderRequest\ApiVerServiceProvider::class,

要配置包,请使用以下命令发布配置文件

php artisan vendor:publish --provider="Mnarbash\ApiVersioningByHeaderRequest\ApiVerServiceProvider" --tag=config

这将在您的项目中创建一个config/api-versioning.php文件。您可以在该文件中修改以下选项

  • check_app_version_support:此选项告诉包是否检查应用版本支持。如果设置为true,则包将检查应用版本,如果应用版本不受支持,则返回错误响应。

  • api_versioning_enabled:此选项告诉包是否启用API版本化。如果设置为true,则包将检查请求中的API-VERSION头部并使用它来确定要使用的API版本。

  • default_api_version:此选项指定当请求中不存在API-VERSION头部时使用的默认API版本。

  • not_do_anything_when_version_is_not_set:此选项告诉包是否在版本未设置时执行任何操作。如果设置为true,则包将在版本未设置时不会更改控制器名称。

  • default_app_version:此选项指定当请求中不存在APP-VERSION头部时使用的默认应用版本。

  • min_supported_app_version:此选项指定最小支持的应用版本。如果请求中的应用版本小于此版本,则返回错误响应。

  • update_urls:此选项指定显示更新应用的URL。

  • not_support_response_status_code:此选项指定当应用版本不受支持时响应的状态码。

要使用检查API并将重定向到新控制器,请将其应用于以下路由

注意:将新的控制器添加到数组的第一位。我们使用这个顺序来检查版本,如果版本不存在则重定向到旧的控制台。示例:如果您有2个版本为1和2的控制器,并且当版本2不存在时希望重定向到版本1,

    Route::get('testVer', ApiVersioning::UseApiMultiVersions([
        'V1' => [V1TestApiController::class, 'testVer'],
        'V0' => [TestApiController::class, 'testVer'], 
        '0' => [TestApiController::class, 'testVer'] //set default version if not set in header
    ]))

路由文件的完整示例

Route::prefix('test')->group( function () {
    Route::get('func', ApiVersioning::UseApiMultiVersions(
        [
            '0'=> function () {
                return 'version 0 or default version';
            },
            'V1' => function () {
                return 'v1';
            },
            'V2' => function () {
                return 'v2';
            },
            'V3' => function () {
                return 'v3';
            },
            'V5' => function () {
                return 'v5';
            },
        ]
    ));

    Route::get('controller', ApiVersioning::UseApiMultiVersions(
        [
            '0'=> [V0TestController::class, 'index'],
            'V1' =>  [V1TestController::class, 'index'],
            'V2' =>  [V2TestController::class, 'index'],
            'V3' =>  [V3TestController::class, 'index'],
            'V5' =>  [V5TestController::class, 'index'],
        ]
    ));
    Route::resource('res', ApiVersioning::UseApiMultiVersions(
        [
            '0'=> ResourceController::class,
            'V2'=> V2ResourceController::class,
        ]
    ));
});

您也可以像这样在代码的任何地方获取API版本

    $apiVersion = ApiVersioning::getApiVersion();

此包包含CheckAppVersion中间件

  • CheckAppVersion:此中间件检查APP-VERSION请求头中的应用版本。如果版本不受支持,则返回错误。

  • 要使用检查应用的中间件,将其应用到app/Http/Kernel文件中的api $middlewareGroups,如下所示

    use Mnarbash\ApiVersioningByHeaderRequest\Middleware\CheckAppVersion;

    protected $middlewareGroups = [
        'api' => [
        // ...
                  CheckAppVersion::class,
        ],
    ];

许可证

此包采用MIT许可证。有关更多信息,请参阅LICENSE文件。