1. 程式人生 > 其它 >TP5.1(TP系列都可以使用)繼承swagger文件註釋

TP5.1(TP系列都可以使用)繼承swagger文件註釋

技術標籤:學習筆記經驗分享開發筆記php後端經驗分享程式人生恰飯

寫在前面:可能會遇到php的版本不支援,我這裡使用的是php7.1。

swagger是什麼

相信無論是前端還是後端開發,都或多或少地被介面文件折磨過。前端經常抱怨後端給的介面文件與實際情況不一致。後端又覺得編寫及維護介面文件會耗費不少精力,經常來不及更新。其實無論是前端呼叫後端,還是後端呼叫後端,都期望有一個好的介面文件。但是這個介面文件對於程式設計師來說,就跟註釋一樣,經常會抱怨別人寫的程式碼沒有寫註釋,然而自己寫起程式碼起來,最討厭的,也是寫註釋。所以僅僅只通過強制來規範大家是不夠的,隨著時間推移,版本迭代,介面文件往往很容易就跟不上程式碼了。

發現了痛點就要去找解決方案。解決方案用的人多了,就成了標準的規範,這就是Swagger的由來。通過這套規範,你只需要按照它的規範去定義介面及介面相關的資訊。再通過Swagger衍生出來的一系列專案和工具,就可以做到生成各種格式的介面文件,生成多種語言的客戶端和服務端的程式碼,以及線上介面除錯頁面等等。這樣,如果按照新的開發模式,在開發新版本或者迭代版本的時候,只需要更新Swagger描述檔案,就可以自動生成介面文件和客戶端服務端程式碼,做到呼叫端程式碼、服務端程式碼以及介面文件的一致性。

但即便如此,對於許多開發來說,編寫這個yml或json格式的描述檔案,本身也是有一定負擔的工作,特別是在後面持續迭代開發的時候,往往會忽略更新這個描述檔案,直接更改程式碼。久而久之,這個描述檔案也和實際專案漸行漸遠,基於該描述檔案生成的介面文件也失去了參考意義。所以作為Java屆服務端的大一統框架Spring,迅速將Swagger規範納入自身的標準,建立了Spring-swagger專案,後面改成了現在的Springfox。通過在專案中引入Springfox,可以掃描相關的程式碼,生成該描述檔案,進而生成與程式碼一致的介面文件和客戶端程式碼。這種通過程式碼生成介面文件的形式,在後面需求持續迭代的專案中,顯得尤為重要和高效。

安裝

首先進入您的專案,然後執行下面的命令會自動在專案中獲取到3.0的swagger

composer require zircote/swagger-php:*

會自動在專案的verdor中生成下面這個檔案
在這裡插入圖片描述
到這裡就已經安裝成功了。

現在來配置生成swagger.json的function,這個json檔案就是我們的註釋檔案生成的,我們通過訪問某個頁面就可以看到具體的效果了

現在開始~

在你的class前面加入這樣的一個程式碼

/**
 * @OA\Info(
 *     title="Auth API",
 *     version="1.0"
 * )
 */
#這個是申明文件的標題及版本,注意:程式碼中只用加一個這個就可以了

在你的function中加入這樣的一個程式碼

public function create_swagger()
    {
        $path              = APP_PATH; //申明生成文件的路徑
        $swagger           = \OpenApi\scan($path); //初始化swagger生成函式
        $swagger_json_path = 'swagger.json'; //swagger的存放路徑,可以填相對地址
        $res = file_put_contents($swagger_json_path, $swagger->toJson()); //呼叫寫入json的方法
        //var_dump($res);
    }

至此你的swagger生成的方法就已經完成了。現在需要寫註釋文件用於去生成swagger檔案

在你要生成文件的前面加入這樣的一個註釋,具體的可以看官方文件

/**
     * @OA\Get(
     *     path="/api/api/getBanner", //當前方法的相對路徑(簡單來說就是通過url可以訪問的路徑)
     *     tags={"index"},
     *     summary="獲取輪播圖",
     *     description="獲取輪播圖",
     *     operationId="waiting",
     *     @OA\Response(
     *         response="default",
     *         description="201"
     *     ),
     *     @OA\RequestBody(
     *         description="請求的東西",
     *     )
     * )
     */

現在你已經生成了一個註釋的json檔案,那我們怎麼看到這個介面文件呢

首先下載swagger-ui,下方是下載地址,下載下來的東西很多,但是整體來說有用的只有dist這個資料夾裡面的東西,如果你在下個專案想用只需要將這個資料夾拷貝過去

下載地址:https://github.com/swagger-api/swagger-ui/

將dist放在你的public檔案中,可以隨便改個名字,就像下面這樣的

在這裡插入圖片描述
現在找到上圖中的index.html,修改一下swagger.json的路徑

<script>
    window.onload = function() {
      // Begin Swagger UI call region
      const ui = SwaggerUIBundle({
        url: "../swagger.json", //將這個url修改為你的swagger.json所在的位置,可以填相對路徑
        dom_id: '#swagger-ui',
        deepLinking: true,
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        plugins: [
          SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "StandaloneLayout"
      })
      // End Swagger UI call region

      window.ui = ui
    }
  </script>

現在可以通過訪問function生成你的json檔案了,我一般習慣在開發環境用定時任務去生成。

生成:url/api/cron/create_swagger
檢視文件:url/swagger-ui