Files
fastapi/docs/uk/docs/tutorial/dependencies/sub-dependencies.md
T
d6fa05a5ae 🌐 Update translations for uk (update-outdated) (#16655)
Co-authored-by: pr-submit[bot] <pr-submit[bot]@users.noreply.github.com>
Co-authored-by: pr-push[bot] <pr-push[bot]@users.noreply.github.com>
2026-11-02 12:26:51 +01:00

5.8 KiB

Підзалежності

Ви можете створювати залежності, які мають підзалежності.

Вони можуть бути настільки глибокими, наскільки потрібно.

FastAPI подбає про їх розв'язання.

Перша залежність «залежний»

Можна створити першу залежність («залежний») так:

{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[8:9] *}

Вона оголошує необов'язковий параметр запиту q типу str, а потім просто повертає його.

Це досить просто (не дуже корисно), але допоможе зосередитися на тому, як працюють підзалежності.

Друга залежність, «залежний» і «залежний»

Далі ви можете створити іншу функцію залежності («залежний»), яка водночас оголошує власну залежність (тож вона також є «залежною»):

{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[13] *}

Зосередьмося на оголошених параметрах:

  • Хоча ця функція сама є залежністю («залежний»), вона також оголошує іншу залежність (вона «залежить» від чогось).
    • Вона залежить від query_extractor і присвоює значення, яке він повертає, параметру q.
  • Вона також оголошує необов'язкове кукі last_query типу str.
    • Якщо користувач не надав параметр запиту q, ми використовуємо останній запит, який зберегли раніше в кукі.

Використання залежності

Потім ми можемо використати залежність так:

{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *}

/// note | Примітка

Зверніть увагу, що ми оголошуємо лише одну залежність у функції операції шляху - query_or_cookie_extractor.

Але FastAPI знатиме, що спочатку треба розв'язати query_extractor, щоб передати його результат у query_or_cookie_extractor під час виклику.

///

graph TB

query_extractor(["query_extractor"])
query_or_cookie_extractor(["query_or_cookie_extractor"])

read_query["/items/"]

query_extractor --> query_or_cookie_extractor --> read_query

Використання тієї ж залежності кілька разів

Якщо одна з ваших залежностей оголошена кілька разів для однієї операції шляху, наприклад, кілька залежностей мають спільну підзалежність, FastAPI знатиме, що цю підзалежність потрібно викликати лише один раз на запит.

І він збереже повернуте значення у «кеш» і передасть його всім «залежним», яким воно потрібне в цьому конкретному запиті, замість того щоб викликати залежність кілька разів для одного й того ж запиту.

У просунутому сценарії, коли ви знаєте, що залежність має викликатися на кожному кроці (можливо, кілька разів) у межах того самого запиту замість використання «кешованого» значення, ви можете встановити параметр use_cache=False при використанні Depends:

//// tab | Python 3.10+

async def needy_dependency(
    fresh_value: Annotated[str, Depends(get_value, use_cache=False)],
):
    return {"fresh_value": fresh_value}

////

//// tab | Python 3.10+ без Annotated

/// tip | Порада

Надавайте перевагу версії з Annotated, якщо це можливо.

///

async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False)):
    return {"fresh_value": fresh_value}

////

Підсумок

Попри всі модні терміни, система впровадження залежностей досить проста.

Це просто функції, які виглядають так само, як функції операцій шляху.

Втім вона дуже потужна і дозволяє оголошувати довільно глибоко вкладені «графи» залежностей (дерева).

/// tip | Порада

Усе це може здаватися не надто корисним на простих прикладах.

Але ви побачите, наскільки це корисно, у розділах про безпеку.

І також побачите, скільки коду це вам заощадить.

///