Перейти к содержанию

Подприложения — Mounts (монтирование)

Если вам нужны два независимых приложения FastAPI, каждое со своим собственным OpenAPI и собственными интерфейсами документации, вы можете иметь основное приложение и «смонтировать» одно (или несколько) подприложений.

Монтирование приложения 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.

Таким образом подприложение будет знать, что для интерфейса документации нужно использовать этот префикс пути.

У подприложения также могут быть свои собственные смонтированные подприложения, и всё будет работать корректно, потому что FastAPI автоматически обрабатывает все эти root_path.

Вы узнаете больше о root_path и о том, как использовать его явно, в разделе За прокси.