Also raised on #26 (comment). See also #544.
Describe the bug
Write here a clear and concise description of what the bug is.
To Reproduce
Replace each part with your own scenario:
- Create a file with:
from fastapi import FastAPI
app = FastAPI()
@app.get("/app")
def read_root():
return {"Hello": "World"}
- Launch it using
uvicorn --root-path="bar" test_app:app
- Open the browser and go to
http://127.0.0.1:8000/docs.
- From the documentation, call the
GET /app route.
- The doc page calls
/app and succeeds.
Expected behavior
The above test should fail after having called /bar/app, since root_path is supposed to prefix all generated URLs in case the application is served behind a reverse-proxy, among ther things. FastAPI only acknowledges openapi_prefix for the API doc.
Environment
- OS: Windows
- FastAPI Version: 0.45.0
- Python version: 3.8.0
Additional context
A similar issue applies to sub-applications:
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 = FastAPI()
@subapi.get("/sub")
def read_sub(request: Request):
return {
"root_path": request.scope['root_path'],
"raw_path": request.scope['raw_path'],
"path": request.scope['path'],
"app_url_for": app.url_path_for("read_sub"),
"subapp_url_for": subapi.url_path_for("read_sub"),
}
app.mount("/subapi", subapi)
{
"root_path":"bar/subapi",
"raw_path":"/subapi/sub",
"path":"/sub",
"app_url_for":"/subapi/sub",
"subapp_url_for":"/sub"
}
(url_for not being prefixed with root_path is fixed upstream by Kludex/starlette#699)
Unless openapi_prefix="/subapi" is passed when creating the subapplication, both http://127.0.0.1:8000/docs and http://127.0.0.1:8000/subapi/docs will point towards http://127.0.0.1:8000/openapi.json, which goes against the point of having isolated subapplications.
openapi_prefix should probably just be deprecated and assumed to match root_path if absent.
Also raised on #26 (comment). See also #544.
Describe the bug
Write here a clear and concise description of what the bug is.
To Reproduce
Replace each part with your own scenario:
uvicorn --root-path="bar" test_app:apphttp://127.0.0.1:8000/docs.GET /approute./appand succeeds.Expected behavior
The above test should fail after having called
/bar/app, sinceroot_pathis supposed to prefix all generated URLs in case the application is served behind a reverse-proxy, among ther things. FastAPI only acknowledgesopenapi_prefixfor the API doc.Environment
Additional context
A similar issue applies to sub-applications:
{ "root_path":"bar/subapi", "raw_path":"/subapi/sub", "path":"/sub", "app_url_for":"/subapi/sub", "subapp_url_for":"/sub" }(
url_fornot being prefixed withroot_pathis fixed upstream by Kludex/starlette#699)Unless
openapi_prefix="/subapi"is passed when creating the subapplication, bothhttp://127.0.0.1:8000/docsandhttp://127.0.0.1:8000/subapi/docswill point towardshttp://127.0.0.1:8000/openapi.json, which goes against the point of having isolated subapplications.openapi_prefixshould probably just be deprecated and assumed to matchroot_pathif absent.