在Vue中使用 openapi-generator-cli generate 自動產生 typescript-axios API文件

gray laptop computer
Photo by Monoar Rahman on Pexels.com

為什麼要用 openapi-generator-cli ?

openapi-generator-cli是一個強大的工具,用於自動生成API客戶端庫、服務器存根和API文件。

簡單說,現在開發API的時候大部分都遵守OpenApi的規範,OpenAPI的採用率和生態系統支持使其成為當前最主要的選擇之一。

當後端開發好API時,可能會提供與OpenAPI相容的API文件,最常見的是 Swagger,用來展示這些文件,可是前端看到這些文件的時候,並不能馬上使用,必須先將文件轉成前端可以用的檔案,例如 .ts 或者 .js 讓前端的框架可以認識並使用API。

除了手動產生之外,最快的方法應該是自動產生,大幅縮短產生API檔案的時間。

安裝 openapi-generator-cli

在安裝 openapi-generator-cli 之前,需要安裝 Java 環境,如果不想安裝Java環境,可以使用 Docker 模式使用。

推薦安裝 Java 環境為 Temurin 的 OpenJDK,安裝後開啟一個新的終端機輸入

java -version

正常的話會看到這樣的畫面,表示正確安裝OpenJDK

接著在終端機畫面中輸入

npm install -g @openapitools/openapi-generator-cli

或是

yarn global add @openapitools/openapi-generator-cli

安裝完成後,進到前端的主目錄底下,輸入

openapi-generator-cli

會產生一個 openapitools.json 的檔案,這是openapi-generator-cli的設定檔,他的結構如下

{
  "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
  "spaces": 2,
  "generator-cli": {
    "version": "7.7.0"    
  }
}

設定openapi-generator-cli的Config檔: openapitools.json

先上一個範例程式,我們再解說其中的關鍵地方“。

{
  "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
  "spaces": 2,
  "generator-cli": {
    "version": "7.7.0",
    "generators": {
      "v1.0": {
        "generatorName": "typescript-axios",
        "output": "./src/api-services",
        "skipValidateSpec": true,
        "inputSpec": "http://localhost:5501/swagger/Default/swagger.json",
        "additionalProperties": {
          "apiPackage": "apis",
          "modelPackage": "models",
          "withSeparateModelsAndApi": true
        }
      }
    }
  }
}

這個範例程式表示要以 typescript-axios 作為輸出結果,並把結果放到 ./src/api-services 目錄底下,使用的來源是 http://localhost:5501/swagger/Default/swagger.json ,並且將Model跟 Api分開 (“withSeparateModelsAndApi”: true),並把API放到 apis 這個目錄,把model放到 models 這個目錄。

產生之後的目錄結構如下

如果需要更多 additionalProperties 的資訊,可以拜訪 https://openapi-generator.tech/docs/configuration 可以取得更多的資訊。

當我們把設定檔設定完成以後,便要來設定 package.json 這個檔案

設定 package.json 的快速使用指令

接著打開 package.json 這個檔案,你會看到類似如下畫面

在 script 這邊,可能每個系統與專案都不一樣,因此不必要照著修改成一樣的內容,我們要注意的是其中最下面那行 api ,這裡會使用快速指令讓 openapi-generator-cli 開始作業,產生我們要的API檔案。

"api": "openapi-generator-cli generate  --generator-key v1.0"

其中應該注意 –generator-key v1.0 這個指令,表示我們將使用 generators 的 v1.0,他在剛剛的 openapitools.json 中有設定。他的位置如下:

使用快速指令

由於我們剛剛在 package.json 設定 api 的指令,因此我們可以用

npm run api

或者

pnpm api

或者

yaen api

來產生相關的API與MODEL,他產生的過程大致上長這樣:

查看一下目標目錄(./src/api-services) 應該會看到檔案都個別產生出來,models 因為太多檔案了,就不展示了。

使用API

在 vue 檔案中,import 一個 api 方法。

New 出來後,即可使用該 api 方法。 

以上就是前端框架Vue中使用 openapi-generator-cli 來自動產生API檔案的快速方法。

參考資料

https://www.deer404.info/posts/openapi-gen-api

https://stackoverflow.com/questions/65196962/how-to-use-configuration-file-openapitools-json-with-openapitools-openapi-gen

https://openapi-generator.tech/docs/usage