3.3 KiB
Дополнительные статус коды
По умолчанию FastAPI возвращает ответы, используя JSONResponse
, помещая содержимое, которое вы возвращаете из вашей операции пути, внутрь этого JSONResponse
.
Он будет использовать код статуса по умолчанию или тот, который вы укажете в вашей операции пути.
Дополнительные статус коды
Если вы хотите возвращать дополнительный статус код помимо основного, вы можете сделать это, возвращая объект Response
напрямую, как JSONResponse
, и устанавливая нужный статус код напрямую.
Например, скажем, вы хотите создать операцию пути, которая позволяет обновлять элементы и возвращает HTTP-код 200 "OK" при успешном выполнении.
Но вы также хотите, чтобы она принимала новые элементы. И если элемент ранее не существовал, он создаётся, и возвращался HTTP-код 201 "Created".
Чтобы реализовать это, импортируйте JSONResponse
и возвращайте ваш контент напрямую, устанавливая нужный status_code
:
{* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *}
/// warning | Внимание
Когда вы возвращаете объект Response
напрямую, как в примере выше, он будет возвращён как есть.
Он не будет сериализован при помощи модели и т.д.
Убедитесь, что в нём содержатся именно те данные, которые вы хотите, и что значения являются валидным JSON (если вы используете JSONResponse
).
///
/// note | Технические детали
Вы также можете использовать from starlette.responses import JSONResponse
.
FastAPI предоставляет тот же starlette.responses
через fastapi.responses
просто для вашего удобства, как разработчика. Но большинство доступных Response-классов поступают напрямую из Starlette. То же самое касается и status
.
///
OpenAPI и документация API
Если вы возвращаете дополнительные коды статусов и ответы напрямую, они не будут включены в схему OpenAPI (документацию API), потому что FastAPI не может заранее знать, что вы собираетесь вернуть.
Но вы можете задокументировать это в вашем коде, используя: Дополнительные ответы в OpenAPI{.internal-link target=_blank}.