You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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 просто для вашої зручності як розробника. Але більшість доступних відповідей надходить безпосередньо зі Starlette. Те саме і зі status.

///

OpenAPI і документація API

Якщо ви повертаєте додаткові коди статусу та відповіді безпосередньо, вони не будуть включені до схеми OpenAPI (документації API), адже FastAPI не має способу заздалегідь знати, що саме ви повернете.

Але ви можете задокументувати це у своєму коді, використовуючи: Додаткові відповіді{.internal-link target=_blank}.