cdonut / laravel-swagger
Requires
Requires (Dev)
- php: >=7.0
- orchestra/testbench: ~4.0
- phpunit/phpunit: 8.3.*
Suggests
- ext-yaml: Required to use the YAML output option
This package is auto-updated.
Last update: 2021-04-09 05:58:32 UTC
README
此包会扫描您的laravel项目路由并为您自动生成Swagger 2.0文档。如果您在控制器动作中将Form Request类注入为请求验证,它也会为每个有它们的请求生成参数。它会考虑请求是GET/HEAD/DELETE还是POST/PUT/PATCH请求,并尽可能猜测它应该生成的参数对象类型。它还会生成包含在路由中的路径参数。最后,此包还会扫描您的动作方法中的任何文档,并将其作为摘要和描述添加到该路径,同时添加任何适当的注释,如@deprecated。
需要注意的一点是,这个库倾向于明确性。即使有默认值,它也会选择包含键。例如,它选择说一个路由有一个废弃的值为false,而不是将其省略。我认为这通过不省略重要信息使阅读文档变得更加容易。如果用户选择省略默认值,文件可以很容易地进行清理。
安装
可以通过在项目根目录中运行composer require mtrajano/laravel-swagger
轻松安装此包。
如果您正在运行Laravel < 5.5的版本,请确保将Mtrajano\LaravelSwagger\SwaggerServiceProvider::class
添加到config/app.php
中的providers
数组。
这将注册可用的artisan命令。
您还可以通过在项目根目录中运行php artisan vendor:publish --provider "Mtrajano\LaravelSwagger\SwaggerServiceProvider"
来覆盖应用程序提供的默认配置,并更改新创建的config/laravel-swagger.php
文件中的配置。
用法
生成swagger文档非常简单,只需在项目根目录中运行php artisan laravel-swagger:generate
即可。请注意,该命令将简单地将其输出打印到您的控制台。如果您想将文档保存到文件中,可以按如下方式重定向输出:php artisan laravel-swagger:generate > swagger.json
如果您希望为路由子集生成文档,可以使用--filter
传递过滤器,例如:php artisan laravel-swagger:generate --filter="/api"
默认情况下,laravel-swagger以json格式打印文档,如果您想以YAML格式输出,可以使用--format
标志覆盖格式。如果您选择这样做,请确保已安装yaml扩展。
格式选项有
json
yaml
示例
假设您有一个映射到UserController@show
的/api/users/{id}
路由
您的示例控制器可能看起来像这样
/**
* Return all the details of a user
*
* Returns the user's first name, last name and address
* Please see the documentation [here](https://example.com/users) for more information
*
* @deprecated
*/
class UserController extends Controller
{
public function show(UserShowRequest $request, $id)
{
return User::find($id);
}
}
FormRequest类可能看起来像这样
class UserShowRequest extends FormRequest
{
public function rules()
{
return [
'fields' => 'array'
'show_relationships' => 'boolean|required'
];
}
}
运行php artisan laravel-swagger:generate > swagger.json
将生成以下文件
{
"swagger": "2.0",
"info": {
"title": "Laravel",
"description": "Test",
"version": "1.0.1"
},
"host": "http:\/\/localhost",
"basePath": "\/",
"paths": {
"\/api\/user\/{id}": {
"get": {
"summary": "Return all the details of a user",
"description": "Returns the user's first name, last name and address
Please see the documentation [here](https://example.com/users) for more information",
"deprecated": true
"responses": {
"200": {
"description": "OK"
}
},
"parameters": [
{
"in": "path",
"name": "id",
"type": "integer",
"required": true,
"description": ""
},
{
"in": "query",
"name": "fields",
"type": "array",
"required": false,
"description": ""
},
{
"in": "query",
"name": "show_relationships",
"type": "boolean",
"required": true,
"description": ""
}
]
},
...
}
}
}