pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.5 KiB
2.5 KiB
子应用 - 挂载
如果需要两个独立的 FastAPI 应用,拥有各自独立的 OpenAPI 与文档,则需设置一个主应用,并挂载一个(或多个)子应用。
挂载 FastAPI 应用
挂载是指在特定路径中添加完全独立的应用,然后在该路径下使用路径操作声明的子应用处理所有事务。
顶层应用
首先,创建主(顶层)FastAPI 应用及其路径操作:
{!../../../docs_src/sub_applications/tutorial001.py!}
子应用
接下来,创建子应用及其路径操作。
子应用只是另一个标准 FastAPI 应用,但这个应用是被挂载的应用:
{!../../../docs_src/sub_applications/tutorial001.py!}
挂载子应用
在顶层应用 app
中,挂载子应用 subapi
。
本例的子应用挂载在 /subapi
路径下:
{!../../../docs_src/sub_applications/tutorial001.py!}
查看文档
如果主文件是 main.py
,则用以下 uvicorn
命令运行主应用:
$ uvicorn main:app --reload
<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
机制处理挂载子应用路径之间的通信。
这样,子应用就可以为自动文档使用路径前缀。
并且子应用还可以再挂载子应用,一切都会正常运行,FastAPI 可以自动处理所有 root_path
。
关于 root_path
及如何显式使用 root_path
的内容,详见使用代理{.internal-link target=_blank}一章。