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里。這個(gè)東西本人用不到,就不研究了。
二、設(shè)置一個(gè)輸出api文檔數(shù)據(jù)的接口
a)、生成一個(gè)控制器: SwaggerController
b)、添加一個(gè)方法: getJSON()
public function getJSON()
{
$swagger = \OpenApi\Generator::scan([app_path('Http/Controllers/')]);
return response()->json($swagger, 200);
}有的文章里寫 \Swagger\scan(),但我這里報(bào)錯(cuò),說找不到這個(gè)類。查了官方文檔,要用 \OpenApi\Generator::scan()。有可能是新版本做了修改。
c)、設(shè)置路由
api.php 或者 web.php都行,路徑不同而已。本人選擇api.php。所以訪問路徑要加個(gè)前綴:/api。
Route::group(['prefix' => 'swagger'], function () {
Route::get('json', [\App\Http\Controllers\SwaggerController::class, 'getJSON']);
});d)、測試訪問
訪問 http://localhost:8000/api/swagger/json 如果看到頁面正常輸出json,說明配置成功了。不然就按錯(cuò)誤提示一項(xiàng)項(xiàng)去修改吧。
三、使用
GET方法
/**
* @OA\Get(
* tags={"數(shù)據(jù)管理"},
* summary="數(shù)據(jù)查詢",
* path="/api/data/search",
* @OA\Response(response="200", description="Display a listing of projects."),
* @OA\Parameter(
* description="數(shù)據(jù)名稱",
* in="query",
* name="name",
* required=false,
* @OA\Schema(type="string"),
* ),
* @OA\Parameter(
* description="狀態(tài)",
* in="query",
* name="status",
* required=false,
* @OA\Schema(type="integer"),
* ),
* @OA\Parameter(
* description="每頁記錄數(shù)",
* in="query",
* name="page-size",
* required=false,
* @OA\Schema(type="integer"),
* ),
* @OA\Parameter(
* description="當(dāng)前頁碼",
* in="query",
* name="current-page",
* required=false,
* @OA\Schema(type="integer"),
* ),
* )
*/這里面:
in 表示該參數(shù)出現(xiàn)在哪里。 query的話就是用&拼在url后面; path 類似于 /api/data/search/{param} ; header就是包含在 request header里;cookie 自然是放在cookie里。
這個(gè)版本里formData, body這些都沒有了。
required 看名字就知道 true是必填項(xiàng),false是選填項(xiàng)。
POST方法
/**
* @OA\Post(
* tags={"數(shù)據(jù)管理"},
* summary="添加數(shù)據(jù)",
* 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",
* ),
* ),
* ),
* )
*/因?yàn)楸救说那岸舜apost都是表單提交,所以這里的post方法要用@OA\RequestBody。
@OA\Parameter是參數(shù),是可以放到url上,但是post的表單提交,數(shù)據(jù)是不出現(xiàn)在url上的。
@OA\MediaType 這個(gè): x-www-form-urlencoded 表單提交;application/json 提交json格式的數(shù)據(jù);multipart/form-data 文件上傳;
* @OA\Schema(
* ref="#/components/schemas/DataModel",
* ),這個(gè)是關(guān)聯(lián)到一個(gè)已經(jīng)定義好的schema上,省得使用相同數(shù)據(jù)的每個(gè)接口注釋里都寫一遍。
這里也可以單獨(dú)寫:
* @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="這是電話"),
* ),上面這樣,有多少個(gè)參數(shù)就寫多少個(gè)@OA\Property。
這里的required是個(gè)數(shù)組,寫在里面的都是必填項(xiàng)。
其它方法都差不多,以后有用到了再記錄。
四、顯示swagger ui
下載swagger ui的代碼: https://github.com/swagger-api/swagger-ui/releases
解壓后,把目錄里的dist目錄,復(fù)制到laravel的public目錄下面,改名為swagger-ui。文件名隨便取,不沖突就行。
找開這個(gè)swagger-ui目錄下的swagger-initializer.js,內(nèi)容大概如下:
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這項(xiàng)。改成前面設(shè)的路由地址。這里是 "/api/swagger/json"。
完成后訪問 http://localhost:8000/swagger-ui/ 就能看到swagger形成的api文檔了。
到此這篇關(guān)于PHP使用Swagger生成好看的API文檔的文章就介紹到這了,更多相關(guān)PHP Swagger內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
編寫PHP腳本使WordPress的主題支持Widget側(cè)邊欄
這篇文章主要介紹了編寫PHP腳本使WordPress的主題支持Widget側(cè)邊欄的方法,這里以一列兩列的側(cè)邊欄為例可以以此類推更多列的寫法,需要的朋友可以參考下2015-12-12
php中字符集轉(zhuǎn)換iconv函數(shù)使用總結(jié)
這篇文章主要介紹了php中字符集轉(zhuǎn)換iconv函數(shù)使用總結(jié),本文同時(shí)介紹了mb_convert_encoding函數(shù),需要的朋友可以參考下2014-10-10
PHP多維數(shù)組轉(zhuǎn)一維數(shù)組的簡單實(shí)現(xiàn)方法
這篇文章主要介紹了PHP多維數(shù)組轉(zhuǎn)一維數(shù)組的簡單實(shí)現(xiàn)方法,涉及PHP遞歸操作技巧,簡單實(shí)用,需要的朋友可以參考下2015-12-12
php使用str_replace實(shí)現(xiàn)輸入框回車替換br的方法
這篇文章主要介紹了php使用str_replace實(shí)現(xiàn)輸入框回車替換br的方法,可實(shí)現(xiàn)使用\\n替換成br的方法,需要的朋友可以參考下2014-11-11

