色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP使用Swagger生成好看的API文檔

瀏覽:140日期:2022-06-06 16:53:10
目錄
  • 一、安裝swagger-php
  • 二、設(shè)置一個(gè)輸出api文檔數(shù)據(jù)的接口
  • 三、使用
  • 四、顯示swagger ui

PHP使用Swagger生成好看的API文檔不是不可能,而是非常簡(jiǎn)單。

首先本人使用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ò),說(shuō)找不到這個(gè)類。查了官方文檔,要用 \OpenApi\Generator::scan()。有可能是新版本做了修改。

c)、設(shè)置路由

api.php 或者 web.php都行,路徑不同而已。本人選擇api.php。所以訪問(wèn)路徑要加個(gè)前綴:/api。

Route::group(["prefix" => "swagger"], function () {
    Route::get("json", [\App\Http\Controllers\SwaggerController::class, "getJSON"]);
});

d)、測(cè)試訪問(wèn)

訪問(wèn) http://localhost:8000/api/swagger/json 如果看到頁(yè)面正常輸出json,說(shuō)明配置成功了。不然就按錯(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="每頁(yè)記錄數(shù)",
     * in="query",
     * name="page-size",
     * required=false,
     * @OA\Schema(type="integer"),
     *     ),
     *     @OA\Parameter(
     * description="當(dāng)前頁(yè)碼",
     * 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這些都沒(méi)有了。

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。文件名隨便取,不沖突就行。

找開(kāi)這個(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"。

完成后訪問(wèn) http://localhost:8000/swagger-ui/ 就能看到swagger形成的api文檔了。

到此這篇關(guān)于PHP使用Swagger生成好看的API文檔的文章就介紹到這了,更多相關(guān)PHP Swagger內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: PHP
主站蜘蛛池模板: 一区二区三区国模大胆 | 久久91精品国产91久久户 | 亚洲码在线观看 | 免费一级毛片不卡在线播放 | 久久精品一区二区国产 | 在线观看久草视频 | 97视频精品| 精品在线小视频 | 欧美成人小视频 | 精品久久在线 | 成人高清无遮挡免费视频软件 | 日韩美女啪啪 | 国产精品在线播放 | 久久久香蕉 | 人妖欧美一区二区三区四区 | 亚洲香蕉久久一区二区三区四区 | 亚洲一区二区三区精品国产 | 日本成人不卡视频 | 亚洲成人免费在线 | 欧美一级免费在线观看 | 欧美视频久久 | 台湾三级香港三级在线理论 | 国产亚洲一级精品久久 | 日韩在线视精品在亚洲 | 日韩天天摸天天澡天天爽视频 | 欧美一级视频在线高清观看 | 免费视频久久久 | 国产福利一区二区在线精品 | 黄色毛片一级 | 国产欧美一区二区三区沐欲 | 久久精品国产99国产精品免费看 | www.黄色免费 | 男女无遮挡拍拍拍免费1000 | 国产成人综合亚洲一区 | 国产美女做爰免费视频软件 | 国产在线欧美日韩精品一区二区 | 久久久久国产一级毛片高清片 | 欧美综合图片一区二区三区 | 久久国产一区二区三区 | 亚洲精品免费视频 | 看成年女人免费午夜视频 |