FastApi教程|子应用程序-代理之后,挂载

发表时间:2020-03-09

在至少两种情况下,您可能需要 使用某些特定路径 来创建 FastAPI 应用程序。

但是随后您需要将它们设置为带有路径前缀。

如果您有以下情况,则可能会发生:

  • 代理 服务器。
  • 您是 在另一个FastAPI应用程序(或另一个ASGI应用程序,如Starlette)内部 “ 装载 ”一个FastAPI应用程序。

代理

在这种情况下拥有代理意味着您可以在处声明一个路径 /app ,但是随后,您可能需要在顶部添加一个层(代理),以将您的 FastAPI 应用程序 放置在 类似 的路径下 /api/v1

在这种情况下,原始路径 /app 实际上将在提供 /api/v1/app

即使您的应用程序“认为”,它也可以在处使用 /app

并且Proxy可以“即时”重新编写路径,以使您的应用程序确信它在处服务 /app

到这里为止,一切都会正常进行。

但是,当您打开集成文档时,他们希望获得的是OpenAPI模式 /openapi.json ,而不是 /api/v1/openapi.json

因此,前端(在浏览器中运行)将尝试访问 /openapi.json 并且无法获取OpenAPI架构。

因此,需要前端在处查找OpenAPI模式 /api/v1/openapi.json

并且还需要返回的JSON OpenAPI模式在 /api/v1/app (位于代理后面) 具有定义的路径, 而不是 /app


对于这些情况,可以 openapi_prefix FastAPI 应用程序中 声明一个 参数 。

有关示例,请参见以下有关“安装”的部分。

挂载 FastAPI 应用程序

“安装”是指在特定路径中添加完整的“独立”应用程序,然后负责处理所有子路径。

如果您要分离多个具有独立的OpenAPI架构和用户界面的“独立”应用程序,则可能需要这样做。

顶级应用程序

首先,创建主顶级 FastAPI 应用程序及其 路径操作

from fastapi import FastAPI

app = FastAPI()


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


subapi = FastAPI(openapi_prefix="/subapi")


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


app.mount("/subapi", subapi)

子应用程序

然后,创建您的子应用程序及其 路径操作

该子应用程序只是另一个标准的FastAPI应用程序,但这是将“安装”的应用程序。

创建子应用程序时,请使用参数 openapi_prefix 。 在这种情况下,前缀为 /subapi

from fastapi import FastAPI

app = FastAPI()


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


subapi = FastAPI(openapi_prefix="/subapi")


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


app.mount("/subapi", subapi)

挂载子应用程序

在您的顶级应用程序中 app ,安装子应用程序 subapi

openapi_prefix 在这种情况下, 您需要确保使用与相同的路径 /subapi

from fastapi import FastAPI

app = FastAPI()


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


subapi = FastAPI(openapi_prefix="/subapi")


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


app.mount("/subapi", subapi)

检查自动API文档

现在,运行 uvicorn ,如果文件位于 main.py , 则为 :

uvicorn main:app --reload

并在 http://127.0.0.1:8000/docs中 打开文档 。

您将看到主应用程序的自动API文档,仅包括其自己的路径:

然后,在 http://127.0.0.1:8000/subapi/docs上 打开子应用程序的文档 。

您将看到该子应用程序的自动API文档,包括仅其自己的子路径及其正确的前缀:

如果您尝试与两个用户界面中的任何一个进行交互,则它们将起作用,因为浏览器将能够与正确的路径(或子路径)对话。

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号-4
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free