lanser/laravel-openapi-generator

使用 spatia Laravel 数据生成 Api Swagger 文档

1.6.5 2024-05-06 05:50 UTC

This package is auto-updated.

Last update: 2024-09-06 06:30:25 UTC


README

从 Laravel 路由和 Laravel 数据对象生成 OpenAPI 规范

此存储库仅是从原始存储库分叉而来。感谢此人。原始 xolvio/laravel-data-openapi-generator 和此包与 spatie/laravel-dataphpdocumentor/reflection-docblock 一起工作

安装

composer.json 中添加此存储库

    "require": {
          "lanser/laravel-openapi-generator" : "^1.5"
    },

    composer update

版本

app.php 中添加一个 app.version 配置,以在 OpenAPI 规范中设置版本

    'version' => env('APP_VERSION', '1.0.0'),

用法

配置

php artisan vendor:publish --tag=openapi-generator-config

生成

php artisan openapi:generate

查看

Swagger 可在 APP_URL/api/openapi 查看文档

在您的请求上

use Lanser\LaravelApiGenerator\Request\RequestData;

class UserRequest extends RequestData
{

    public function __construct(
        public string $name,
        public string $email
    )
    {
    }


    public static function rules(ValidationContext $context): array
    {
        return [
            'name' => ['required', 'string'],
            'email' => ['required', 'email'],
        ];
    }

}

在您的资源上

use Lanser\LaravelApiGenerator\Response\ResponseData;

class UserResponse extends ResponseData
{

    public function __construct(
        public string $name,
        public string $email
    )
    {
    }
}

示例

namespace App\Http\Controllers;

use App\Http\Requests\UserRequest;
use App\Response\UserResponse;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Auth\User;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, ValidatesRequests;

    /**
     * @param UserRequest $request
     * @return UserResponse
     */
    public function show(UserRequest $request): UserResponse
    {
        $user = User::query()->first();
        return UserResponse::from($user);
    }
}

最终结果

img.png

对于路由分组

Route::group(['as' => 'user'], function () {
    Route::post('/', [Controller::class, 'show']);
});

对于添加认证

Route::group(['as' => 'user'], function () {
    Route::post('/', [Controller::class, 'show']);
})->middleware('auth:sanctum');

如果您想记录错误,可以使用属性 ErrorMessage

    use Lanser\LaravelApiGenerator\OpenApi\Attributes\ErrorMessage;


    #[ErrorMessage(["User not found", "User is not active"])]
    public function show(UserRequest $request): UserResponse
    {
        $user = User::query()->first();
        return UserResponse::from($user);
    }

点击模式,如果您想查看在此路由中存在的异常类型

img_2.png