你是否也被沒有文檔的項目折磨?你是否也由於項目須要寫文檔而頭疼?你是否也被年久失修的文檔坑害?少年,吃下我這發安利吧!經過部署 Swagger,這些問題都將遠離你,精美、易讀、可測試、時效性高的文檔,不想試試麼?php
閒言少敘,咱們直接來看最終的效果,黑喂狗!laravel
step1.給接口添加註釋 git
註釋語句的語法後續有機會再討論,這裏不作贅述。step2.查看根據註釋自動生成的Json結構 github
step3.根據Json結構自動生成文檔 web
step4.能夠經過文檔進行接口調用測試 chrome
做爲一名開發人員,寫文檔真的是一件很痛苦的事情,主要痛點有以下幾個(我的觀點):json
其實總結一下,就一個字——懶。api
基於以上幾點,樓主開始思考,有沒有什麼工具,能夠以註釋爲基礎自動生成文檔?若是有的話,就能夠減小研發生產文檔的時間,避免重複工做,而且能夠保證文檔的可用性(避免文檔年久失修)。app
首先來看下官方定義composer
Swagger is a simple yet powerful representation of your RESTful API. With the largest ecosystem of API tooling on the planet, thousands of developers are supporting Swagger in almost every modern programming language and deployment environment. With a Swagger-enabled API, you get interactive documentation, client SDK generation and discoverability.
簡單來講,Swagger 實際上是一種接口的描述規範,只要按照這個規範對接口進行描述,添加註釋,即可以產出結構化的數據,而後使用 Swagger 官方提供的工具即可以產出精美的接口文檔。因此引言中提到的 '部署Swagger' ,準確來講,應該是 '部署Swagger規範'。
項目中引入SDK
composer require zircote/swagger-php
複製代碼
接口添加註釋
引入後直接按照 SDK的規範在接口上添加註釋便可,能夠參考:
Swagger-php-example
提供一個簡單例子,以laravel/lumen框架爲例
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ExampleController extends Controller
{
/**
* 這個一個須要實現的API
*
* 這部分是項目的基本描述,對於一個項目來講必需要有
* 因爲是示例代碼,因此把項目描述也放在了接口描述中,其實能夠將這部分拆離到單獨的文件中
* @SWG\Swagger(
* schemes={"http"},
* host="somehost.webdev.com",
* basePath="/api",
* @SWG\Info(
* title="這是一個測試項目",
* version="1.0.0",
* @SWG\Contact(
* email="test@email.com"
* )
* )
* )
*
* 接下來是針對接口的描述
* @SWG\Get(
* path="/v1/getsomething",
* summary="這裏是接口描述",
* produces={"application/json"},
* 參數1
* @SWG\Parameter(
* description="頁碼",
* in="query",
* name="pageNum",
* type="number",
* required=true
* ),
* 參數2
* @SWG\Parameter(
* description="頁面內容數",
* in="query",
* name="pageSize",
* type="number"
* ),
* 響應體
* @SWG\Response(
* response=200,
* description="Success",
* // 也能夠添加返回數據的示例,這裏不作贅述
* )
* 響應體
* @SWG\Response(
* response=404,
* description="Not Found",
* )
* )
*/
public function getSomeThing(Request $request)
{
// todo 待實現
}
}
複製代碼
複製上邊的例子,此時咱們便有了一個擁有標準結構註釋的接口。
構造調用接口
註釋構建好了之後,那麼接下來就是產出 Swagger標準的數據了,這裏咱們選用 Json作爲產出結構。
爲了方便起見,咱們將得到 Json數據的邏輯封裝爲接口,這樣就能夠隨時隨地拿到這個標準 Swagger Json了,以 Laravel/Lumen框架爲例,簡單例子以下:
<?php
namespace App\Http\Controllers;
class SwaggerController extends Controller
{
public function getSwaggerJson()
{
// 該函數會掃描配置的目錄地址下的文件,並將其中標準化的註釋渲染爲json數據
$swagger = \Swagger\scan(['須要掃描的目錄1', '須要掃描的目錄2', ...]);
return response()->json($swagger, 200);
}
}
複製代碼
再提供一個官方 Json數據做參考:官方參考
此時即可以經過該接口獲取標準 Swagger Json了,接下來就是作數據展現的問題了。
接口文檔展現
起初想到的展現方法是將官方提供的 Swagger-ui搭建成一個服務,而後提供統一入口,後來以爲這種方法過於侷限,沒法隨時隨地去查看文檔,還要去記錄服務地址。
後來設想,是否可使用 Chrome插件來實現這個事情?調研了一番,果真有前人走了這條路,已經有現成的插件可使用。
安裝好插件後,如文章開頭展現的,在接口頁面的基礎上,點擊打開 Swagger-ui插件便可獲得文檔,而且能夠進行接口測試等操做。
至此,一個簡單、高效的 Swagger環境就搭建好了,具體怎麼使用,就看你們本身的喜愛了。Hope you enjoy it!
Swagger-ui 有須要的同窗能夠本身搭建Swagger-ui