Коды состояния ответа FastAPI
HTTP-коды состояния являются частью ответа и используются, чтобы сообщить клиенту о результате обработки запроса. FastAPI позволяет объявить статус-код по умолчанию в декораторе операции пути, а также динамически изменять его внутри функции.
Объявление статус-кода
Использованиеstatus_codeПараметр объявляет статус-код ответа в декораторе:
Пример
app = FastAPI()
# Используйте статус-код 201 при создании ресурса
@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):
return {"name": name}
status_codeявляется параметром метода декоратора (например,@app.post()), а не параметр функции операции пути. Это может быть число (например,201), также можно использоватьfastapi.statusконстанты в (рекомендуется, с поддержкой автодополнения в редакторе).
Краткий справочник по кодам состояния HTTP
| Область действия | Категория | Распространённые коды состояния | Значение |
|---|---|---|---|
| 1xx | Информация | -- | редко используются напрямую |
| 2xx | успех | 200 OK | Запрос выполнен успешно (код состояния по умолчанию) |
201 Created | Ресурс успешно создан | ||
204 No Content | Успешно, но содержимое не возвращено | ||
| 3xx | Redirect | 304 Not Modified | Ресурс не изменён (кэш действителен) |
| 4xx | Ошибка клиента | 400 Bad Request | Ошибка формата запроса |
401 Unauthorized | не аутентифицирован | ||
403 Forbidden | Аутентифицирован, но нет прав | ||
404 Not Found | Ресурс не найден | ||
| 5xx | Ошибка сервера | 500 Internal Server Error | Внутренняя ошибка сервера |
Использование констант статуса
fastapi.statusпредоставляет константы для всех HTTP-кодов состояния, что делает использование удобнее благодаря автодополнению в редакторе:
Пример
app = FastAPI()
# POST - Создать ресурс, возвращает 201
@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):
return {"name": name}
# DELETE - Удалить ресурс, возвращает 204 (без содержимого)
@.delete("/items/{item_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_item(item_id: int):
# Операции удаления обычно не возвращают содержимого
pass
# GET - Получить ресурс, возвращает 200 (по умолчанию)
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
204 No Contentуказывает на успех, но не возвращает содержимого, подходит для операций удаления. Обратите внимание, что ответ 204 не может содержать тело ответа.
Общие константы кодов состояния
| Константы | Значение | Сценарий использования |
|---|---|---|
status.HTTP_200_OK | 200 | GET-запрос успешен (по умолчанию) |
status.HTTP_201_CREATED | 201 | Ресурс успешно создан через POST |
status.HTTP_204_NO_CONTENT | 204 | DELETE выполнен успешно, содержимое не возвращено |
status.HTTP_400_BAD_REQUEST | 400 | Ошибка параметра запроса |
status.HTTP_401_UNAUTHORIZED | 401 | Не выполнен вход или токен недействителен |
status.HTTP_403_FORBIDDEN | 403 | Нет разрешения на доступ |
status.HTTP_404_NOT_FOUND | 404 | Ресурс не найден |
status.HTTP_409_CONFLICT | 409 | Конфликт ресурса (например, создание дубликата) |
status.HTTP_422_UNPROCESSABLE_ENTITY | 422 | Ошибка проверки данных |
status.HTTP_500_INTERNAL_SERVER_ERROR | 500 | Внутренняя ошибка сервера |
Итог
- использование декораторов
status_codeОбъявление кода состояния по умолчанию в качестве параметра - Рекомендуется
fastapi.statusКонстанты с поддержкой автодополнения в редакторе - POST использует 201 для создания ресурсов, DELETE использует 204 для удаления ресурсов, GET использует 200 для получения ресурсов.
- 4xx указывает на ошибки клиента, 5xx указывает на ошибки сервера