網上看了看,關於這個擴展介紹很少。今天工作恰好用到,研究了一下,覺得有必要分享一下。
一、 簡介:
這個包是Swagger-php和Swagger-ui的封裝,適用於Laravel5。
二、版本要求
Laravel> = 5.1
三、安裝
Laravel |
Swagger UI |
OpenAPI規范兼容性 |
L5 安裝命令 |
5.1.x版 |
2.2 |
1.1,1.2,2.0 |
php composer require "darkaonline/l5-swagger:~3.0" |
5.2.x |
2.2 |
1.1,1.2,2.0 |
php composer require "darkaonline/l5-swagger:~3.0" |
5.3.x |
2.2 |
1.1,1.2,2.0 |
php composer require "darkaonline/l5-swagger:~3.0" |
5.4.x版本 |
2.2 |
1.1,1.2,2.0 |
php composer require "darkaonline/l5-swagger:~4.0" |
5.4.x版本 |
3 |
2.0 |
php composer require "darkaonline/l5-swagger:5.4.*" |
5.5.X |
3 |
2.0 |
php composer require "darkaonline/l5-swagger:5.5.*" |
或在composer.json中添加"darkaonline/l5-swagger": "~3.0"(以5.1為例),再執行composer update。
四、配置
打開config/app.php注冊一個門面,5.5以上的版本不用。
加入這一行providers節:L5Swagger \ L5SwaggerServiceProvider :: class,
運行php artisan l5-swagger:publish 這一步的意義是將包的內容發布。也可以使用php artisan l5-swagger:publish-config(生成配置文件),php artisan l5-swagger:publish-assets(生成根目錄文件夾),php artisan l5-swagger:publish-views(生成視圖層文件夾)分別發布。執行之后會在根目錄和視圖層生成一個vendor文件夾;並在config/下生成一個l5-swagger.php的文件,這里重點說一下這個文件,在這里可以指定標題,訪問路由,項目路由,生成文件即生成文件路由。可以在.env中設置環境變量如token,key等值。
注:如果在你的項目中你不需要資源文件可將其填入.gitignore中。如./public/vendor/l5-swagger,./resources/views/vendor/l5-swagger等文件每次請求都會生成一次。
五、使用
使用phpartisan l5-swagger:generate生成文檔,此時會在storage/api-docs,生成一個api-docs.json的文件,一會每次生成都會覆蓋此文件。如果需要開啟自動生成,可在配置文件或.env文件中設置generate_always
參數為true
。這個時候訪問你的項目域名+
/ api / documentation。你會看到,如下頁面:
接下來我們建立一個swagger控制器,寫入如下測試數據:
<?php
namespace App\Http\Controllers;
use Swagger\Annotations\Info;
/**
* @Info(
* title="My title",
* version="v1.0.0"
* )
*/
class SwaggerController extends Controller
{
/**
* 假設是項目中的一個API
*
* @SWG\Get(path="/swagger/my-data",
* tags={"project"},
* summary="拿一些神秘的數據",
* description="請求該接口需要先登錄。",
* operationId="getMyData",
* produces={"application/json"},
* @SWG\Parameter(
* in="formData",
* name="reason",
* type="string",
* description="拿數據的理由",
* required=true,
* ),
* @SWG\Response(response="default", description="操作成功")
* )
*/
public function getMyData()
{
}
}
標紅部分@SWG \ Info是必需的,這里聲明了你的版本號,負責會報錯。生成文件看到如下:
接下來可設置中文,默認展開,取消默認圖標:
設置中文:
打開resources/views/vendor/index.blade.php
找的這一行:
// ...
<!-- Some basic translations -->
<!--<script src='lang/translator.js' type='text/javascript'></script>-->
<!--<script src='lang/ru.js' type='text/javascript'></script>-->
<!-- <script src='lang/en.js' type='text/javascript'></script> -->
// ...
改為:
<!-- Some basic translations -->
<scriptsrc='{{config('l5-swagger.paths.assets_public')}}/lang/translator.js'type='text/javascript'></script>
<scriptsrc='{{config('l5-swagger.paths.assets_public')}}/lang/zh-cn.js'type='text/javascript'></script>
默認展開:
onFailure: function(data) {
console.log("Unableto Load SwaggerUI");
},
docExpansion: {!! isset($docExpansion) ? '"' . $docExpansion .'"' : '"none"' !!}
這里設置docExpansion: "none",
去掉error:
window.swaggerUi =
newSwaggerUi({
// ...
validatorUrl:
null,
//添加這個配置
});
接下來就可以正常使用了。