Коды состояния ответа FastAPI

HTTP-коды состояния являются частью ответа и используются, чтобы сообщить клиенту о результате обработки запроса. FastAPI позволяет объявить статус-код по умолчанию в декораторе операции пути, а также динамически изменять его внутри функции.


Объявление статус-кода

Использованиеstatus_codeПараметр объявляет статус-код ответа в декораторе:

Пример

from fastapi import FastAPI, status

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Успешно, но содержимое не возвращено
3xxRedirect304 Not ModifiedРесурс не изменён (кэш действителен)
4xxОшибка клиента400 Bad RequestОшибка формата запроса
401 Unauthorizedне аутентифицирован
403 ForbiddenАутентифицирован, но нет прав
404 Not FoundРесурс не найден
5xxОшибка сервера500 Internal Server ErrorВнутренняя ошибка сервера

Использование констант статуса

fastapi.statusпредоставляет константы для всех HTTP-кодов состояния, что делает использование удобнее благодаря автодополнению в редакторе:

Пример

from fastapi import FastAPI, status

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_OK200GET-запрос успешен (по умолчанию)
status.HTTP_201_CREATED201Ресурс успешно создан через POST
status.HTTP_204_NO_CONTENT204DELETE выполнен успешно, содержимое не возвращено
status.HTTP_400_BAD_REQUEST400Ошибка параметра запроса
status.HTTP_401_UNAUTHORIZED401Не выполнен вход или токен недействителен
status.HTTP_403_FORBIDDEN403Нет разрешения на доступ
status.HTTP_404_NOT_FOUND404Ресурс не найден
status.HTTP_409_CONFLICT409Конфликт ресурса (например, создание дубликата)
status.HTTP_422_UNPROCESSABLE_ENTITY422Ошибка проверки данных
status.HTTP_500_INTERNAL_SERVER_ERROR500Внутренняя ошибка сервера

Итог

  • использование декораторовstatus_codeОбъявление кода состояния по умолчанию в качестве параметра
  • Рекомендуетсяfastapi.statusКонстанты с поддержкой автодополнения в редакторе
  • POST использует 201 для создания ресурсов, DELETE использует 204 для удаления ресурсов, GET использует 200 для получения ресурсов.
  • 4xx указывает на ошибки клиента, 5xx указывает на ошибки сервера
Другие расширения