randomstate/laravel-api

randomstate/api 与 Laravel 的集成

v2.1.0 2021-09-03 14:39 UTC

README

randomstate/api 的 Laravel 集成。

注意,对于无框架的入门级应用,请使用 randomstate/api。您需要做一些重要的配置,以便使其像这个 Laravel 包一样有用。

它做什么

LaravelApi 是一个 API 版本控制包,允许您轻松地命名空间和版本化您的 API(Web、Ajax、REST 等)。它自带对出色的 league/fractal 包的支持和集成。

本质上,这个包允许您标准化 API 的输出,同时保持灵活性;使用命名空间来改变上下文。再加上您可以版本化 API 响应以针对特定用户,这就是构建愉悦 API 体验的开始。

安装和设置

composer require randomstate/laravel-api

\RandomState\LaravelApi\LaravelApiServiceProvider::class 添加到您的 app.php 配置文件中。

通过运行以下命令发布配置文件: php artisan vendor:publish --tag=laravel-api

由于需要深度路由集成以实现魔法效果,您需要替换 Http Kernel 为本包提供的。您应该将 app/Http/Kernel.php 类更改为扩展 RandomState\LaravelApi\Http\Kernel 而不是 HttpKernel 默认。

命名空间设置

为了命名空间您的路由,您可以使用 RandomsState\LaravelApi\Http\Middleware\ApiNamespace 中间件类。将以下内容添加到您的 Kernel 类上的 $routeMiddleware 属性。

protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    // ...
    'namespace' => RandomsState\LaravelApi\Http\Middleware\ApiNamespace::class,
];

用法

命名空间

如果您遵循了设置说明,您将添加一个 'namespace' 中间件。您可以使用它如下

Route::group(['middleware' => ['namespace:web'], function() {});
Route::group(['middleware' => ['namespace:web,1.0'], function() {}); // Forces version 1.0 to be used (must be specified in your laravel-api.php config file.

动态版本化

由于此包的预期用途是根据用户的目标版本动态提供 API,我建议以下自动版本化路由的方式:在一个服务提供程序的注册方法中(例如 AppServiceProvider),您可以添加以下内容

$this->app->bind(\RandomState\LaravelApi\VersionSwitch::class, function() {
    return new class implements \RandomState\LaravelApi\VersionSwitch::class {
        public function getVersionIdentifier() {
            return Auth::user()->getApiVersion();
        }
    }
});

您必须自己实现存储和 getApiVersion 方法 - 这只是一个示例,说明您应该如何操作。