Есть ли способ сделать что-то подобное с помощью FastAPI:
@app.post("/instance/new", tags=["instance"])
async def MyFunction(condition):
if condition:
response = {"key": "value"}
return response
else:
return some_big_plain_text
В том виде, в котором он закодирован сейчас, JSON возвращается нормально, но some_big_plain_text
не дружелюбен к человеку. Если да: @app.post("/instance/new", tags=["instance"], PlainTextResponse)
Я получаю сообщение об ошибке при возврате ответа JSON.
Взгляните на этот ответ (вместе с этот), чтобы лучше понять, что происходит за кулисами при возврате ответа от конечной точки FastAPI, а также как напрямую вернуть пользовательский Response
.
Для обработки различных типов ответов вы можете использовать класс Response
из FastAPI
.
Это позволяет вам динамически указывать тип контента и носителя ответа. Вот как вы можете это сделать:
from fastapi import FastAPI, Response
app = FastAPI()
@app.post("/instance/new", tags=["instance"])
async def MyFunction(condition: bool):
if condition:
response = {"key": "value"}
return response # FastAPI will automatically return JSON
else:
some_big_plain_text = "This is a big plain text response."
return Response(content=some_big_plain_text, media_type = "text/plain")
почему бы не обернуть простой текст в json?
{"response" : some_big_plein_text}