子应用程序 - 挂载¶
如果您需要拥有两个独立的 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
以及如何显式使用它的更多信息。