跳到内容

子应用程序 - 挂载

如果你需要两个独立的 FastAPI 应用程序,它们拥有各自独立的 OpenAPI 和各自的文档 UI,你可以有一个主应用程序并“挂载”一个(或多个)子应用程序。

挂载 FastAPI 应用程序

“挂载”意味着在特定路径下添加一个完全“独立”的应用程序,然后该应用程序负责处理该路径下的所有内容,并通过该子应用程序中声明的路径操作进行处理。

顶层应用程序

首先,创建主应用程序,即顶层 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 以及如何显式使用它的信息。