最近在新项目开发的过程中我发现 swagger-php 升级了版本,而且和以前的文档注释写法有了蛮多的差别。官方文档也写的不是很详细,在这里我将结合自己封装的案例将 Swagger-PHP v3.x 的一些用法分享给大家。
swagger-php
Swagger-PHP v3.x
升级后的区别 Swagger-PHP v3.x Specification
Swagger-PHP v3.x 官方文档
案例代码演示地址
API 开发目录
composer require darkaonline/l5-swagger
php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider"
composer require laravel/sanctum
@OA\OpenApi
@OA\SecurityScheme
ApiController
在 swagger-php 3.* 以前我们如果 Post 请求参数很多,那么在控制器我们可能写很多的注释。导致代码特别冗余。 swagger-php 3.* 我是通过 表单验证 来解决这个问题的。同时代码也更清晰规范。
swagger-php 3.*
在上面代码中,我们看不到任何需要请求的参数, @OA\RequestBody 通过 ref 关联到 #/components/schemas/RegisterRequest ,而我们刚好有个表单请求类 RegisterRequest 。在 swagger-php 3.* 我们可以把文档 post 参数的注释放到表单请求类 RegisterRequest 。 RegisterRequest 代码如下:
@OA\RequestBody
ref
#/components/schemas/RegisterRequest
RegisterRequest
我们以获取用户列表和获取用户详情,分别演示路由参数和请求参数注释如何编写。
在 Api 返回的时候,有可能是列表,有可能是对象。如果对象参数特别多,按以前我们可能在控制器写很多注释文档,导致代码很难看,我在项目开发中是将返回的注释写到 API 资源 来解决这个问题。
UserResource 代码
从上面我们可以发现 UserResource 是可以复用的,当 @OA\JsonContent(ref="#/components/schemas/UserResource") 里面有 type = array 返回的就是列表,不然就是对象。
UserResource
@OA\JsonContent(ref="#/components/schemas/UserResource")
type = array
我是通过 API 资源 和 表单验证 去拆解注释,同时达到 API 开发目录的规范。在我项目实际开发中,自己也基于这套规范收益良多。