energon7/laravel-swagger-docs

Laravel API 的 Swagger 文档生成器

0.0.2 2024-07-15 12:58 UTC

This package is auto-updated.

Last update: 2024-09-15 13:22:25 UTC


README

简单易用的 OAS3 兼容文档生成器。
还包括 Swagger UI。

关于

此包深受 darki73/laravel-swaggerkevupton/laravel-swagger 的启发。
使用方式与 mtrajano/laravel-swagger 类似,不同之处在于

  1. OAS3 支持
  2. 自定义装饰器
  3. 自定义响应
  4. 自动生成(假设已开启相关配置选项)
  5. 包含 Swagger UI
  6. 模型生成
  7. 根据路由前缀或控制器名称生成操作标签

安装

通过 composer 安装包

composer require energon7/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 属性来引用模型,您也可以用 [] 包裹该模型来引用该模型的数组,或者使用完整模型路径,最后,您可以使用 schema builder
/**
* @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) {}
注意:您可以看到所有可用的 schema builder 或创建自己的 schema builder,探索 swagger.schema_builders 配置以获取更多信息。

自定义验证器

这些验证器纯粹是为了视觉目的而制作的,然而,其中一些实际上可以进行验证

swagger默认

$rules = [
    'locale'        =>  'swagger_default:en_GB'
];

swagger最小

$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最大

$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
];