|
| 1 | +# Дополнительные статус коды |
| 2 | + |
| 3 | +По умолчанию **FastAPI** возвращает ответы, используя `JSONResponse`, помещая содержимое, которое вы возвращаете из вашей *операции пути*, внутрь этого `JSONResponse`. |
| 4 | + |
| 5 | +Он будет использовать код статуса по умолчанию или тот, который вы укажете в вашей *операции пути*. |
| 6 | + |
| 7 | +## Дополнительные статус коды |
| 8 | + |
| 9 | +Если вы хотите возвращать дополнительный статус код помимо основного, вы можете сделать это, возвращая объект `Response` напрямую, как `JSONResponse`, и устанавливая нужный статус код напрямую. |
| 10 | + |
| 11 | +Например, скажем, вы хотите создать *операцию пути*, которая позволяет обновлять элементы и возвращает HTTP-код 200 "OK" при успешном выполнении. |
| 12 | + |
| 13 | +Но вы также хотите, чтобы она принимала новые элементы. И если элемент ранее не существовал, он создаётся, и возвращался HTTP-код 201 "Created". |
| 14 | + |
| 15 | +Чтобы реализовать это, импортируйте `JSONResponse` и возвращайте ваш контент напрямую, устанавливая нужный `status_code`: |
| 16 | + |
| 17 | +{* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *} |
| 18 | + |
| 19 | +/// warning | Внимание |
| 20 | + |
| 21 | +Когда вы возвращаете объект `Response` напрямую, как в примере выше, он будет возвращён как есть. |
| 22 | + |
| 23 | +Он не будет сериализован при помощи модели и т.д. |
| 24 | + |
| 25 | +Убедитесь, что в нём содержатся именно те данные, которые вы хотите, и что значения являются валидным JSON (если вы используете `JSONResponse`). |
| 26 | + |
| 27 | +/// |
| 28 | + |
| 29 | +/// note | Технические детали |
| 30 | + |
| 31 | +Вы также можете использовать `from starlette.responses import JSONResponse`. |
| 32 | + |
| 33 | +**FastAPI** предоставляет тот же `starlette.responses` через `fastapi.responses` просто для вашего удобства, как разработчика. Но большинство доступных Response-классов поступают напрямую из Starlette. То же самое касается и `status`. |
| 34 | + |
| 35 | +/// |
| 36 | + |
| 37 | +## OpenAPI и документация API |
| 38 | + |
| 39 | +Если вы возвращаете дополнительные коды статусов и ответы напрямую, они не будут включены в схему OpenAPI (документацию API), потому что FastAPI не может заранее знать, что вы собираетесь вернуть. |
| 40 | + |
| 41 | +Но вы можете задокументировать это в вашем коде, используя: [Дополнительные ответы в OpenAPI](additional-responses.md){.internal-link target=_blank}. |
0 commit comments