Параметр root_path
Параметр root_path передаётся в конструктор класса
FastAPI и задаёт префикс, под которым
приложение доступно извне. Это нужно, когда FastAPI
работает за обратным прокси, например за Nginx или Traefik,
который монтирует приложение не в корень домена,
а в подкаталог. Значение root_path учитывается
при генерации схемы OpenAPI, при построении путей
в Swagger UI и ReDoc, а также при формировании
URL в объекте request.
По умолчанию параметр равен пустой строке, то есть приложение считается доступным от корня домена.
Синтаксис
FastAPI(root_path='/prefix')
Пример
Давайте создадим приложение с корневым путём
'/api' и одним маршрутом:
from fastapi import FastAPI
app = FastAPI(root_path='/api')
@app.get('/')
def index():
return {'text': 'hello'}
Теперь документация будет доступна по адресу
'/api/docs', а схема OpenAPI -
по адресу '/api/openapi.json'.
Результат выполнения кода для адреса '/api/':
{"text": "hello"}
Пример
Давайте посмотрим, как root_path влияет
на свойство root_path у объекта запроса:
from fastapi import FastAPI, Request
app = FastAPI(root_path='/api')
@app.get('/user')
def user(request: Request):
return {
'root_path': request.scope['root_path'],
'path': request.scope['path']
}
Результат выполнения кода для адреса '/api/user':
{"root_path": "/api", "path": "/user"}
Пример
Давайте создадим два приложения с разными корневыми путями и посмотрим на разницу в адресах документации:
from fastapi import FastAPI
app_root = FastAPI()
app_api = FastAPI(root_path='/api')
@app_root.get('/')
def root_index():
return {'app': 'root'}
@app_api.get('/')
def api_index():
return {'app': 'api'}
У приложения app_root документация будет
доступна по адресу '/docs', а у приложения
app_api - по адресу '/api/docs'.
Результат выполнения кода для адреса '/api/':
{"app": "api"}
Смотрите также
-
класс
FastAPI,
который создаёт приложение и принимает параметрroot_path -
параметр
servers,
который задаёт список серверов в схеме OpenAPI -
атрибут
openapi_url,
который задаёт адрес схемы OpenAPI -
атрибут
docs_url,
который задаёт адрес Swagger UI