Skip to content

[Python] 如何使用 FastAPI 支援的自動生成文件(包含輸出靜態文件)

介紹

在 FastAPI 官方文件中,有一段關於『自動生成交互式文件』的說明:

  • Robust: Get production-ready code. With automatic interactive documentation.

如果要使用這個功能,我們可以在開啟 FastAPI 的服務後輕鬆調用 $URL/docs —— 但問題是如果今天我們文件的應用場景不是給自己看、而是必須交付給客戶呢?

實際上,FastAPI 並不支援靜態文件的生成,如 html、PDF 或像 Sphinx。我們需要另外處理才行。然而,由於 FastAPI 的文件是基於標準 OpenAPI 的格式,所以我們還是可以利用其他工具來生成靜態文件。


內建交互式文件

由於服務和功能都是我們自己寫的,所以我們一定很清楚開啟服務的位置。輸出 $URL/docs,你可以看見以下畫面:

可以看到我有數個功能,一個 POST 和兩個 GET。但是這可能不是交付給客戶最好的文件類型(而且也非靜態)。


ReDoc

如果我們希望看另外一種風格的文件,我們可以把開啟的文件路徑更改為 $URL/redoc,我們就能看到另外一種不同風格的文件。

也正是這種格式,我們可以將其使用 redoc-cli 等工具將其轉換成靜態文件。


輸出靜態文件

首先,你會需要使用 npm 進行 redoc-cli 工具的安裝。


npm i -g @redocly/cli@latest



接著,我們需要把 FastAPI 自動生成的 openapi.json 文件下載到本地端。接著就是使用 redoc-cli 工具將其重新解析為 html 格式的檔案,接著直接打開檔案(預設名稱為 redoc-static.html)就會看到靜態文件了!

wget $URL/openapi.json
npx @redocly/cli bundle openapi.json
open redoc-static.html


Output:


雖然跟上面的文件長得一樣,但這可是存在於本地端且可隨時打開的!

以上,就是從 FastAPI 生成靜態文件的方法紀錄。


References


Read More

Tags:

Leave a Reply