Skip to content

子應用程式 - 掛載

🌐 AI 與人類共同完成的翻譯

此翻譯由人類指導的 AI 完成。🤝

可能會有對原意的誤解,或讀起來不自然等問題。🤖

你可以透過協助我們更好地引導 AI LLM來改進此翻譯。

英文版

若你需要兩個彼此獨立的 FastAPI 應用程式,各自擁有獨立的 OpenAPI 與文件 UI,你可以有一個主應用,並「掛載」一個(或多個)子應用程式。

掛載一個 FastAPI 應用程式

「掛載」是指在某個特定路徑下加入一個完全「獨立」的應用程式,之後該應用程式會負責處理該路徑底下的一切,使用該子應用程式中宣告的路徑操作(path operation)

頂層應用程式

先建立主(頂層)FastAPI 應用程式以及它的路徑操作

from fastapi import FastAPI

app = FastAPI()


@app.get("/app")
def read_main():
    return {"message": "Hello World from main app"}


subapi = FastAPI()


@subapi.get("/sub")
def read_sub():
    return {"message": "Hello World from sub API"}


app.mount("/subapi", subapi)

子應用程式

接著,建立你的子應用程式及其路徑操作

這個子應用程式就是另一個標準的 FastAPI 應用,但這個會被「掛載」:

from fastapi import FastAPI

app = FastAPI()


@app.get("/app")
def read_main():
    return {"message": "Hello World from main app"}


subapi = FastAPI()


@subapi.get("/sub")
def read_sub():
    return {"message": "Hello World from sub API"}


app.mount("/subapi", subapi)

掛載子應用程式

在你的頂層應用程式 app 中,掛載子應用程式 subapi

在此範例中,它會被掛載在路徑 /subapi

from fastapi import FastAPI

app = FastAPI()


@app.get("/app")
def read_main():
    return {"message": "Hello World from main app"}


subapi = FastAPI()


@subapi.get("/sub")
def read_sub():
    return {"message": "Hello World from sub API"}


app.mount("/subapi", subapi)

檢查自動 API 文件

現在,用你的檔案執行 fastapi 指令:

$ fastapi dev main.py

<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

然後開啟位於 http://127.0.0.1:8000/docs 的文件。

你會看到主應用的自動 API 文件,只包含它自己的路徑操作

接著,開啟子應用程式的文件:http://127.0.0.1:8000/subapi/docs

你會看到子應用程式的自動 API 文件,只包含它自己的路徑操作,而且都在正確的子路徑前綴 /subapi 之下:

如果你嘗試在任一介面中互動,它們都會正常運作,因為瀏覽器能與各自的應用程式或子應用程式通訊。

技術細節:root_path

當你像上面那樣掛載子應用程式時,FastAPI 會使用 ASGI 規範中的一個機制 root_path,將子應用程式的掛載路徑告知它。

如此一來,子應用程式就會知道在文件 UI 使用該路徑前綴。

而且子應用程式也能再掛載自己的子應用程式,一切都能正確運作,因為 FastAPI 會自動處理所有這些 root_path

你可以在在代理伺服器之後一節中進一步了解 root_path 與如何顯式使用它。