mezatsong / laravel-swagger-docs
Laravel api 的 Swagger 文档生成器
Requires
- php: >=7.3 || 8.*
- doctrine/dbal: *
- phpdocumentor/reflection-docblock: ^5.2
Requires (Dev)
- laravel/passport: ^10.0
Suggests
- ext-yaml: Required to generate YAML
This package is auto-updated.
Last update: 2024-09-05 07:47:30 UTC
README
简单易用的 OAS3 兼容文档生成器。
还包括 Swagger UI。
关于
此包深受 darki73/laravel-swagger 和 kevupton/laravel-swagger 的启发。
用法与 mtrajano/laravel-swagger 类似,但有所不同
- OAS3 支持
- 自定义装饰器
- 自定义响应
- 自动生成(假设已开启相关配置选项)
- 包含 Swagger UI
- 模型生成
- 基于路由前缀或控制器名称生成操作标签
安装
通过 composer 安装包
composer require mezatsong/laravel-swagger-docs
发布配置文件和视图
php artisan vendor:publish --provider "Mezatsong\SwaggerDocs\SwaggerServiceProvider"
编辑 swagger.php
配置文件以满足您的需求
用法
Laravel Swagger Docs 基于Laravel的推荐实践。它会解析您的路由并为每个路由生成一个路径对象。如果您的控制器操作中注入了表单请求类作为请求验证,它也会为具有这些类的每个请求生成参数。对于参数,它会考虑请求是 GET/HEAD/DELETE 还是 POST/PUT/PATCH 请求,并尽力猜测应生成哪种参数对象类型。它还会生成包含在路由中的路径参数。最后,此包还会扫描您操作方法中的任何文档,并将其作为摘要和描述添加到该路径中,同时添加任何适当的注释,如 @deprecated。
需要注意的是,此库倾向于明确性。即使有默认值,它也会选择包含键。例如,它选择说明路由有 deprecated 的值为 false,而不是将其省略。我认为这使文档更容易阅读,因为它不会省略重要信息。如果用户选择省略默认值,文件可以轻松地进行清理。
命令行
生成 Swagger 文档非常简单,只需在项目根目录中运行 php artisan swagger:generate
即可。命令的输出将存储在配置文件中链接的存储路径。
如果您只想为您的部分路由生成文档,可以使用 --filter
传递过滤器,例如: php artisan swagger:generate --filter="/api"
您还可以配置您的 swagger.php 文件,以便在访问 Swagger UI 时始终生成模式,或者只需在 .env 文件中添加此行: SWAGGER_GENERATE_ALWAYS=true
默认情况下,laravel-swagger 以 JSON 格式打印文档,如果要以 YAML 格式打印,可以使用 --format
标志覆盖格式。如果您选择这样做,请确保已安装 yaml 扩展。
格式选项为: json
yaml
@Request() 装饰器
您只能有一个 @Request()
装饰器。
/** * You can also do this, first line will be "summary" * * And anything 1 * apart from the "summary" will count as "description" * * @Request({ * summary: Title of the route, * description: This is a longer description for the route which will be visible once the panel is expanded, * tags: Authentication,Users * }) */ public function someMethod(Request $request) {}
@Response() 装饰器
您可以有多个 @Response
装饰器
- 必须包含且必须首先指定
code
属性。 - 您可以使用可选的
description
属性来描述您的响应 - 您可以使用可选的
ref
属性来引用一个模型,您也可以将该模型用 [] 括起来以引用该模型的一个数组,或者在内部使用完整的模型路径,最后您可以使用模式构建器
/** * @Response({ * code: 200 * description: return user model * ref: User * }) * @Response({ * code: 400 * description: Bad Request, array of APIError model * ref: [APIError] * }) * @Response({ * code: 302 * description: Redirect * }) * @Response({ * code: 500 * description: Internal Server Error * }) */ public function someMethod(Request $request) {} /** * You can also refer object directly * * * @Response({ * code: 200 * description: direct user model reference * ref: #/components/schemas/User * }) */ public function someMethod2(Request $request) {} /** * Using P schema builder for Laravel Pagination * * @Response({ * code: 200 * description: a laravel pagination instance with User model * ref: P(User) * }) */ public function someMethod3(Request $request) {}
注意:您可以看到所有可用的模式构建器或创建您自己的模式构建器,探索 swagger.schema_builders 配置以获取更多信息。
自定义验证器
这些验证器纯粹是为了视觉目的而制作的,然而,其中一些实际上可以进行验证
swagger_default
$rules = [ 'locale' => 'swagger_default:en_GB' ];
swagger_min
$rules = [ 'page' => 'swagger_default:1|swagger_min:1', // This will simply display the 'minimum' value in the documentation 'page' => 'swagger_default:1|swagger_min:1:fail' // This will also fail if the `page` parameter will be less than 1 ];
swagger_max
$rules = [ 'take' => 'swagger_default:1|swagger_min:1|swagger_max:50', // This will simply display the 'maximum' value in the documentation 'take' => 'swagger_default:1|swagger_min:1|swagger_max:50:fail' // This will also fail if the `take` parameter will be greater than 50 ];