PHP使用Swagger生成好看的API文檔
PHP使用Swagger生成好看的API文檔不是不可能,而是非常簡單。
首先本人使用Laravel框架,所以在Laravel上安裝swagger-php。
一、安裝swagger-php
composer require zircote/swagger-php
swagger-php提供瞭命令行工具,所以可以全局安裝,然後把工具的路徑加到PATH裡去。
composer global require zircote/swagger-php
然後把zircote/swagger-php/bin 目錄加到PATH裡。這個東西本人用不到,就不研究瞭。
二、設置一個輸出api文檔數據的接口
a)、生成一個控制器: SwaggerController
b)、添加一個方法: getJSON()
public function getJSON() { $swagger = \OpenApi\Generator::scan([app_path('Http/Controllers/')]); return response()->json($swagger, 200); }
有的文章裡寫 \Swagger\scan(),但我這裡報錯,說找不到這個類。查瞭官方文檔,要用 \OpenApi\Generator::scan()。有可能是新版本做瞭修改。
c)、設置路由
api.php 或者 web.php都行,路徑不同而已。本人選擇api.php。所以訪問路徑要加個前綴:/api。
Route::group(['prefix' => 'swagger'], function () { Route::get('json', [\App\Http\Controllers\SwaggerController::class, 'getJSON']); });
d)、測試訪問
訪問 http://localhost:8000/api/swagger/json 如果看到頁面正常輸出json,說明配置成功瞭。不然就按錯誤提示一項項去修改吧。
三、使用
GET方法
/** * @OA\Get( * tags={"數據管理"}, * summary="數據查詢", * path="/api/data/search", * @OA\Response(response="200", description="Display a listing of projects."), * @OA\Parameter( * description="數據名稱", * in="query", * name="name", * required=false, * @OA\Schema(type="string"), * ), * @OA\Parameter( * description="狀態", * in="query", * name="status", * required=false, * @OA\Schema(type="integer"), * ), * @OA\Parameter( * description="每頁記錄數", * in="query", * name="page-size", * required=false, * @OA\Schema(type="integer"), * ), * @OA\Parameter( * description="當前頁碼", * in="query", * name="current-page", * required=false, * @OA\Schema(type="integer"), * ), * ) */
這裡面:
in 表示該參數出現在哪裡。 query的話就是用&拼在url後面; path 類似於 /api/data/search/{param} ; header就是包含在 request header裡;cookie 自然是放在cookie裡。
這個版本裡formData, body這些都沒有瞭。
required 看名字就知道 true是必填項,false是選填項。
POST方法
/** * @OA\Post( * tags={"數據管理"}, * summary="添加數據", * path="/api/data", * @OA\Response(response="200", description="Display a listing of projects."), * @OA\RequestBody( * @OA\MediaType( * mediaType="x-www-form-urlencoded", * @OA\Schema( * ref="#/components/schemas/DataModel", * ), * ), * ), * ) */
因為本人的前端代碼post都是表單提交,所以這裡的post方法要用@OA\RequestBody。
@OA\Parameter是參數,是可以放到url上,但是post的表單提交,數據是不出現在url上的。
@OA\MediaType 這個: x-www-form-urlencoded 表單提交;application/json 提交json格式的數據;multipart/form-data 文件上傳;
* @OA\Schema( * ref="#/components/schemas/DataModel", * ),
這個是關聯到一個已經定義好的schema上,省得使用相同數據的每個接口註釋裡都寫一遍。
這裡也可以單獨寫:
* @OA\Schema( * required={"name", "code"}, * @OA\Property(property="name", type="string", title="姓名", description="這是姓名"), * @OA\Property(property="code", type="string", title="代碼", description="這是代碼"), * @OA\Property(property="phone", type="string", title="電話", description="這是電話"), * ),
上面這樣,有多少個參數就寫多少個@OA\Property。
這裡的required是個數組,寫在裡面的都是必填項。
其它方法都差不多,以後有用到瞭再記錄。
四、顯示swagger ui
下載swagger ui的代碼: https://github.com/swagger-api/swagger-ui/releases
解壓後,把目錄裡的dist目錄,復制到laravel的public目錄下面,改名為swagger-ui。文件名隨便取,不沖突就行。
找開這個swagger-ui目錄下的swagger-initializer.js,內容大概如下:
window.onload = function() { //<editor-fold desc="Changeable Configuration Block"> // the following lines will be replaced by docker/configurator, when it runs in a docker-container window.ui = SwaggerUIBundle({ url: "/api/swagger/json", dom_id: '#swagger-ui', deepLinking: true, presets: [ SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset ], plugins: [ SwaggerUIBundle.plugins.DownloadUrl ], layout: "StandaloneLayout" }); //</editor-fold> };
主要是改 url這項。改成前面設的路由地址。這裡是 "/api/swagger/json"。
完成後訪問 http://localhost:8000/swagger-ui/ 就能看到swagger形成的api文檔瞭。
到此這篇關於PHP使用Swagger生成好看的API文檔的文章就介紹到這瞭,更多相關PHP Swagger內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 在nodejs中使用swagger方式
- SpringBoot中使用Swagger的超簡單方法
- Flask實現swagger在線文檔與接口測試流程詳解
- Nest框架中集成使用Swagger示例說明
- Spring集成Swagger常見錯誤及解決辦法