FastAPI: обработка запросов по всем путям одинаково
Задача: есть сервис, для работы которого необходим reverse-proxy.
Для реализации этого reverse-proxy выбран fast-api. В логике этого прокси не должно быть никакой работы с путями, он просто должен принять запрос, добавить к нему заголовок отправить его через requests в другое место, и полученый там ответ вернуть.
на примере гет запроса: если пользователь обратится на путь /, то тогда считаем, что сервис отработал верно, однако если пользователь обратится, скажем на /catalog1/ то выдаст 404 (а специфика задачи именно в том, что я не знаю ничего о том, какие каталоги могут появиться, нужно переадресовать по пути, что указал пользователь)
@app.get('/')
def read_users():
return [{"name": "Rick"}, {"name": "Morty"}]
Подскажите способ как можно сделать, чтобы одно и то же действие делалось вообще по любому пути.
Ответы (2 шт):
@app.get("/{rel_path:path}")
async def get_handle(rel_path: str):
print(rel_path)
#rel_path - строковая переменная с путем
...
return response
Для тестирования обработки ошибок в вэб-приложении у меня возникла похожая задача.
Копировать реальные эдпоинты имитируемоего серверного приложения и делать для каждого из них ответы с разными кодами (200, 400 и тд) мне не хотелось.
Остановился на таком варианте:
from fastapi import FastAPI
from starlette.responses import JSONResponse
app = FastAPI()
@app.get(path="/{endpoint}")
def get_handle(endpoint):
try:
status_code = int(endpoint)
except ValueError:
status_code = 200
return JSONResponse(
content=[{"name": "Rick"}, {"name": "Morty"}],
status_code=status_code
)
Тело ответа всегда постоянно, а код зависит от эндпоинта.
То есть запрос /404 статус код 404
Если значение endpoint нельзя перевести в int статус код будет 200
Запрос /test статус код 200
Если значение endpoint можно перевести в int, но такого статус кода нет - будет ошибка.