lukepolo / laravel-api-migrations
API 迁移
Requires
- php: ^7.0
- illuminate/config: 5.4.*|5.5.*
- illuminate/contracts: 5.4.*|5.5.*
- illuminate/http: 5.4.*|5.5.*
- illuminate/support: 5.4.*|5.5.*
Requires (Dev)
- orchestra/testbench: ~3.4
- phpunit/phpunit: ^6.0
README
本包基于 Stripe 使用的 API 版本控制方案。用户传递一个版本头,然后系统会自动迁移请求和响应数据以匹配当前代码版本。
TLDR
使用 API 迁移更新您的 API,无需担心用户应用程序会中断。
您编写这些递增迁移,以便将请求/响应数据回溯到以前的时间,以便您的用户应用程序能够完美运行。
特性
- 用户版本锁定
- 支持主要 API 版本控制
- 通过 artisan 命令提供约定
如何在日常开发中使用
在发布您的 API 时,应创建发布版本(包括您的当前版本)。这允许系统知道如何迁移请求/响应到旧版本的 API。
例如
当前 发布版本 V1 - 2017-08-31 预期响应
[ 'firstname' => 'Dwight', 'lastname' => 'Schrute', 'title' => 'Assistant to the Regional Manager' ]
发布 V1 - 2017-08-01 预期响应
[ 'firstname' => 'Dwight', 'lastname' => 'Schrute', 'title' => 'Assistant to the Regional Manager', 'secret_title' => 'Assistant Regional Manager', ]
当您的用户使用旧 API 时,他们希望看到那个秘密标题。
然后它将请求 2017-08-31 迁移到 2017-08-01。
这是一个简单的例子,但您可以看到这些迁移的强大功能,它们可以轻松地创建步骤来迁移您的当前 API 版本到旧版本。
安装
composer require lukepolo/laravel-api-migrations
服务提供者 & Facade
此包支持 Laravel 5.5 自动加载,因此服务提供者和 Facade 将自动加载。
如果您使用的是 Laravel 的早期版本或已禁用自动加载,您需要将服务提供者和 Facade 添加到 config/app.php
。
'providers' => [ ... \LukePOLO\LaravelApiMigrations\ServiceProvider::class, ]
'aliases' => [ ... 'LaravelApiMigrations' => \LukePOLO\LaravelApiMigrations\Facades\LaravelApiMigrations::class, ]
中间件
将中间件添加到您的 Http Kernel app/Http/Kernel.php
。
您有几个选择在哪里放置它,建议放在 api 中间件下面!
protected $middlewareGroups = [ 'api' => [ ... \LukePOLO\LaravelApiMigrations\LaravelApiMigrationsMiddleware::class, ]; ]
配置
运行以下 Artisan 命令,将包配置发布到 config/request-migrations.php
。
php artisan vendor:publish --provider="LukePOLO\LaravelApiMigrations\ServiceProvider" --tag=config
使用方法
创建发布版本
您可以使用 Artisan CLI 生成新的发布版本。
php artisan make:api-release
创建迁移
您可以使用 Artisan CLI 生成新的 API 迁移。
php artisan make:api-migration ExampleMigration
该命令将生成一个 API 迁移并将其发布到 App/Http/ApiMigrations/V{VersionNumber}/Release_{YYYY_MM_DD}/{MigrationName}
。
缓存迁移
一旦您迁移到生产环境,您应该缓存结果
php artisan cache:api-migrations
制作 HTTP 请求
默认情况下,当向您的 API 发送请求时,不会运行任何迁移。
要使用您 API 的不同版本,只需附加一个头
'Api-Version' : '2017-08-31'
编写 API 迁移
migrateRequest
方法:用于将您的请求转换为对当前路由有效的请求
migrateResponse
方法:用于将响应转换为该版本应预期的响应
示例:-- 链接到 gist --
版本控制
您应使用上述 artisan 命令创建发布版本,包括您的当前版本。您还可以在配置中设置您的当前版本。
您可以通过以下方式在配置中标记当前版本
'current_versions' => [ 'V1' => '2017-01-31', ],
``### 用户版本锁定
php artisan vendor:publish --provider="LukePOLO\LaravelApiMigrations\ServiceProvider" --tag=migrations
!!!! 注意 !!!!!
您还必须在您的 User
模型中将列 api_version
设置为可填充的!
变更日志
请参阅CHANGELOG获取更多关于最近更改的信息。
测试
composer test
贡献
请参阅CONTRIBUTING获取详细信息。
安全
如果您发现任何与安全相关的问题,请发送电子邮件至luke@lukepolo.com,而不是使用问题跟踪器。
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。
鸣谢
此软件包最初是由Tom Schlick构思的,但经过了大量修改。