From: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Date: Tue, 30 Sep 2025 11:37:11 +0000 (+0200)
Subject: 🌐 Add Russian translations for missing pages (LLM-generated) (#14135)
X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=04d5e659bc9976b7a307541d3c81e5d6307a37d2;p=thirdparty%2Ffastapi%2Ffastapi.git
🌐 Add Russian translations for missing pages (LLM-generated) (#14135)
* Copy En pages
* Translate pages (reviewed and corrected)
* Apply changes from latest PRs: 13917 and 14099
---
diff --git a/docs/ru/docs/_llm-test.md b/docs/ru/docs/_llm-test.md
new file mode 100644
index 000000000..476cc1924
--- /dev/null
+++ b/docs/ru/docs/_llm-test.md
@@ -0,0 +1,503 @@
+# ТеÑÑовÑй Ñайл LLM { #llm-test-file }
+
+ÐÑÐ¾Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð¿ÑовеÑÑеÑ, Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑ Ð»Ð¸ LLM, пеÑеводÑÑÐ°Ñ Ð´Ð¾ÐºÑменÑаÑиÑ, `general_prompt` в `scripts/translate.py` и ÑзÑковой ÑпеÑиÑиÑнÑй пÑÐ¾Ð¼Ð¿Ñ Ð² `docs/{language code}/llm-prompt.md`. ЯзÑковой ÑпеÑиÑиÑнÑй пÑÐ¾Ð¼Ð¿Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ Ðº `general_prompt`.
+
+ТеÑÑÑ, добавленнÑе здеÑÑ, ÑвидÑÑ Ð²Ñе ÑоздаÑели ÑзÑковÑÑ
пÑомпÑов.
+
+ÐÑполÑзование:
+
+* ÐодгоÑовÑÑе ÑзÑковой ÑпеÑиÑиÑнÑй пÑÐ¾Ð¼Ð¿Ñ â `docs/{language code}/llm-prompt.md`.
+* ÐÑполниÑе новÑй пеÑевод ÑÑого докÑменÑа на нÑжнÑй Ñелевой ÑзÑк (Ñм., напÑимеÑ, ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `translate-page` в `translate.py`). ÐÑо ÑоздаÑÑ Ð¿ÐµÑевод в `docs/{language code}/docs/_llm-test.md`.
+* ÐÑовеÑÑÑе, вÑÑ Ð»Ð¸ в поÑÑдке в пеÑеводе.
+* ÐÑи необÑ
одимоÑÑи ÑлÑÑÑиÑе Ð²Ð°Ñ ÑзÑковой ÑпеÑиÑиÑнÑй пÑомпÑ, обÑий пÑÐ¾Ð¼Ð¿Ñ Ð¸Ð»Ð¸ английÑкий докÑменÑ.
+* ÐаÑем вÑÑÑнÑÑ Ð¸ÑпÑавÑÑе оÑÑавÑиеÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð² пеÑеводе, ÑÑÐ¾Ð±Ñ Ð¾Ð½ бÑл Ñ
оÑоÑим.
+* ÐеÑеведиÑе заново, Ð¸Ð¼ÐµÑ Ñ
оÑоÑий пеÑевод на меÑÑе. ÐдеалÑнÑм ÑезÑлÑÑаÑом бÑÐ´ÐµÑ ÑиÑÑаÑиÑ, когда LLM болÑÑе не вноÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в пеÑевод. ÐÑо ознаÑаеÑ, ÑÑо обÑий пÑÐ¾Ð¼Ð¿Ñ Ð¸ Ð²Ð°Ñ ÑзÑковой ÑпеÑиÑиÑнÑй пÑÐ¾Ð¼Ð¿Ñ Ð¼Ð°ÐºÑималÑно Ñ
оÑоÑи (иногда он бÑÐ´ÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ð½ÐµÑколÑко, казалоÑÑ Ð±Ñ, ÑлÑÑайнÑÑ
изменений, пÑиÑина в Ñом, ÑÑо LLM â недеÑеÑминиÑованнÑе алгоÑиÑмÑ).
+
+ТеÑÑÑ:
+
+## ФÑагменÑÑ ÐºÐ¾Ð´Ð° { #code-snippets}
+
+//// tab | ТеÑÑ
+
+ÐÑо ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð°: `foo`. Ð ÑÑо еÑÑ Ð¾Ð´Ð¸Ð½ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð°: `bar`. РеÑÑ Ð¾Ð´Ð¸Ð½: `baz quux`.
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+СодеÑжимое ÑÑагменÑов кода должно оÑÑаваÑÑÑÑ ÐºÐ°Ðº еÑÑÑ.
+
+См. Ñаздел `### Content of code snippets` в обÑем пÑомпÑе в `scripts/translate.py`.
+
+////
+
+## ÐавÑÑки { #quotes }
+
+//// tab | ТеÑÑ
+
+ÐÑеÑа мой дÑÑг напиÑал: "ÐÑли Ð²Ñ Ð½Ð°Ð¿Ð¸Ñали incorrectly пÑавилÑно, знаÑÐ¸Ñ Ð²Ñ Ð½Ð°Ð¿Ð¸Ñали ÑÑо непÑавилÑно". Ðа ÑÑо Ñ Ð¾ÑвеÑил: "ÐеÑно, но 'incorrectly' â ÑÑо непÑавилÑно, а не '"incorrectly"'".
+
+/// note | ÐÑимеÑание
+
+LLM, веÑоÑÑно, пеÑеведÑÑ ÑÑо непÑавилÑно. ÐнÑеÑеÑно лиÑÑ Ñо, ÑоÑ
ÑÐ°Ð½Ð¸Ñ Ð»Ð¸ она ÑикÑиÑованнÑй пеÑевод пÑи повÑоÑном пеÑеводе.
+
+///
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+ÐвÑÐ¾Ñ Ð¿ÑомпÑа Ð¼Ð¾Ð¶ÐµÑ Ð²ÑбÑаÑÑ, Ñ
оÑÐµÑ Ð»Ð¸ он пÑеобÑазовÑваÑÑ Ð½ÐµÐ¹ÑÑалÑнÑе кавÑÑки в ÑипогÑаÑÑкие. ÐопÑÑкаеÑÑÑ Ð¾ÑÑавиÑÑ Ð¸Ñ
как еÑÑÑ.
+
+См., напÑимеÑ, Ñаздел `### Quotes` в `docs/de/llm-prompt.md`.
+
+////
+
+## ÐавÑÑки во ÑÑагменÑаÑ
кода { #quotes-in-code-snippets}
+
+//// tab | ТеÑÑ
+
+`pip install "foo[bar]"`
+
+ÐÑимеÑÑ ÑÑÑоковÑÑ
лиÑеÑалов во ÑÑагменÑаÑ
кода: `"this"`, `'that'`.
+
+СложнÑй пÑÐ¸Ð¼ÐµÑ ÑÑÑоковÑÑ
лиÑеÑалов во ÑÑагменÑаÑ
кода: `f"I like {'oranges' if orange else "apples"}"`
+
+ХаÑдкоÑ: `Yesterday, my friend wrote: "If you spell incorrectly correctly, you have spelled it incorrectly". To which I answered: "Correct, but 'incorrectly' is incorrectly not '"incorrectly"'"`
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+... Ðднако кавÑÑки внÑÑÑи ÑÑагменÑов кода Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¾ÑÑаваÑÑÑÑ ÐºÐ°Ðº еÑÑÑ.
+
+////
+
+## Ðлоки кода { #code-blocks }
+
+//// tab | ТеÑÑ
+
+ÐÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð´Ð° Bash...
+
+```bash
+# ÐÑвеÑÑи пÑивеÑÑÑвие вÑеленной
+echo "Hello universe"
+```
+
+...и пÑÐ¸Ð¼ÐµÑ Ð²Ñвода в конÑоли...
+
+```console
+$ fastapi run main.py
+ FastAPI Starting server
+ Searching for package file structure
+```
+
+...и еÑÑ Ð¾Ð´Ð¸Ð½ пÑÐ¸Ð¼ÐµÑ Ð²Ñвода в конÑоли...
+
+```console
+// СоздаÑÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ "Code"
+$ mkdir code
+// ÐеÑейÑи в ÑÑÑ Ð´Ð¸ÑекÑоÑиÑ
+$ cd code
+```
+
+...и пÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð´Ð° на Python...
+
+```Python
+wont_work() # ÐÑо не ÑÑабоÑÐ°ÐµÑ ð±
+works(foo="bar") # ÐÑо ÑабоÑÐ°ÐµÑ ð
+```
+
+...и на ÑÑом вÑÑ.
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+Ðод в блокаÑ
кода не должен изменÑÑÑÑÑ, за иÑклÑÑением комменÑаÑиев.
+
+См. Ñаздел `### Content of code blocks` в обÑем пÑомпÑе в `scripts/translate.py`.
+
+////
+
+## Ðкладки и ÑвеÑнÑе блоки { #tabs-and-colored-boxes }
+
+//// tab | ТеÑÑ
+
+/// info | ÐнÑоÑмаÑиÑ
+ÐекоÑоÑÑй ÑекÑÑ
+///
+
+/// note | ÐÑимеÑание
+ÐекоÑоÑÑй ÑекÑÑ
+///
+
+/// note | ТеÑ
ниÑеÑкие подÑобноÑÑи
+ÐекоÑоÑÑй ÑекÑÑ
+///
+
+/// check | ÐÑовеÑка
+ÐекоÑоÑÑй ÑекÑÑ
+///
+
+/// tip | СовеÑ
+ÐекоÑоÑÑй ÑекÑÑ
+///
+
+/// warning | ÐÑедÑпÑеждение
+ÐекоÑоÑÑй ÑекÑÑ
+///
+
+/// danger | ÐпаÑноÑÑÑ
+ÐекоÑоÑÑй ÑекÑÑ
+///
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+ÐÐ»Ñ Ð²ÐºÐ»Ð°Ð´Ð¾Ðº и блоков `Info`/`Note`/`Warning`/и Ñ.п. нÑжно добавиÑÑ Ð¿ÐµÑевод иÑ
заголовка поÑле веÑÑикалÑной ÑеÑÑÑ (`|`).
+
+См. ÑÐ°Ð·Ð´ÐµÐ»Ñ `### Special blocks` и `### Tab blocks` в обÑем пÑомпÑе в `scripts/translate.py`.
+
+////
+
+## Ðеб- и внÑÑÑенние ÑÑÑлки { #web-and-internal-links }
+
+//// tab | ТеÑÑ
+
+ТекÑÑ ÑÑÑлок должен пеÑеводиÑÑÑÑ, адÑÐµÑ ÑÑÑлки не должен изменÑÑÑÑÑ:
+
+* [СÑÑлка на заголовок вÑÑе](#code-snippets)
+* [ÐнÑÑÑеннÑÑ ÑÑÑлка](index.md#installation){.internal-link target=_blank}
+* ÐнеÑнÑÑ ÑÑÑлка
+* СÑÑлка на ÑÑилÑ
+* СÑÑлка на ÑкÑипÑ
+* СÑÑлка на изобÑажение
+
+ТекÑÑ ÑÑÑлок должен пеÑеводиÑÑÑÑ, адÑÐµÑ ÑÑÑлки должен ÑказÑваÑÑ Ð½Ð° пеÑевод:
+
+* СÑÑлка на FastAPI
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+СÑÑлки Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÐµÑеводиÑÑÑÑ, но иÑ
адÑеÑа не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ. ÐÑклÑÑение â абÑолÑÑнÑе ÑÑÑлки на ÑÑÑаниÑÑ Ð´Ð¾ÐºÑменÑаÑии FastAPI. Ð ÑÑом ÑлÑÑае ÑÑÑлка должна веÑÑи на пеÑевод.
+
+См. Ñаздел `### Links` в обÑем пÑомпÑе в `scripts/translate.py`.
+
+////
+
+## HTML-ÑлеменÑÑ "abbr" { #html-abbr-elements }
+
+//// tab | ТеÑÑ
+
+ÐÐ¾Ñ Ð½ÐµÐºÐ¾ÑоÑÑе ÑлеменÑÑ, обÑÑнÑÑÑе в HTML-ÑлеменÑÑ "abbr" (ÑаÑÑÑ Ð²ÑдÑмана):
+
+### abbr даÑÑ Ð¿Ð¾Ð»Ð½ÑÑ ÑаÑÑиÑÑÐ¾Ð²ÐºÑ { #the-abbr-gives-a-full-phrase }
+
+* GTD
+* lt
+* XWT
+* PSGI
+
+### abbr даÑÑ Ð¾Ð±ÑÑÑнение { #the-abbr-gives-an-explanation }
+
+* клаÑÑеÑ
+* ÐлÑбокое обÑÑение
+
+### abbr даÑÑ Ð¿Ð¾Ð»Ð½ÑÑ ÑаÑÑиÑÑÐ¾Ð²ÐºÑ Ð¸ обÑÑÑнение { #the-abbr-gives-a-full-phrase-and-an-explanation }
+
+* MDN
+* I/O.
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+ÐÑÑибÑÑÑ "title" ÑлеменÑов "abbr" пеÑеводÑÑÑÑ Ð¿Ð¾ опÑеделÑннÑм пÑавилам.
+
+ÐеÑÐµÐ²Ð¾Ð´Ñ Ð¼Ð¾Ð³ÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ñвои ÑобÑÑвеннÑе ÑлеменÑÑ "abbr", коÑоÑÑе LLM не должна ÑдалÑÑÑ. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑÑниÑÑ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкие Ñлова.
+
+См. Ñаздел `### HTML abbr elements` в обÑем пÑомпÑе в `scripts/translate.py`.
+
+////
+
+## Ðаголовки { #headings }
+
+//// tab | ТеÑÑ
+
+### РазÑабоÑка вебâпÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â ÑÑководÑÑво { #develop-a-webapp-a-tutorial }
+
+ÐÑивеÑ.
+
+### ÐнноÑаÑии Ñипов и -анноÑаÑии { #type-hints-and-annotations }
+
+Снова пÑивеÑ.
+
+### СÑпеÑ- и подклаÑÑÑ { #super-and-subclasses }
+
+Снова пÑивеÑ.
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+ÐдинÑÑвенное жÑÑÑкое пÑавило Ð´Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² â LLM должна оÑÑавиÑÑ ÑаÑÑÑ Ñ
еÑа в ÑигÑÑнÑÑ
ÑкобкаÑ
без изменений, ÑÑÐ¾Ð±Ñ ÑÑÑлки не ломалиÑÑ.
+
+См. Ñаздел `### Headings` в обÑем пÑомпÑе в `scripts/translate.py`.
+
+ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
ÑзÑковÑÑ
инÑÑÑÑкÑий Ñм., напÑимеÑ, Ñаздел `### Headings` в `docs/de/llm-prompt.md`.
+
+////
+
+## ТеÑминÑ, иÑполÑзÑемÑе в докÑменÑаÑии { #terms-used-in-the-docs }
+
+//// tab | ТеÑÑ
+
+* вÑ
+* ваÑ
+
+* напÑимеÑ
+* и Ñ.д.
+
+* `foo` как `int`
+* `bar` как `str`
+* `baz` как `list`
+
+* УÑебник â Ð ÑководÑÑво полÑзоваÑелÑ
+* РаÑÑиÑенное ÑÑководÑÑво полÑзоваÑелÑ
+* ÐокÑменÑаÑÐ¸Ñ Ð¿Ð¾ SQLModel
+* ÐокÑменÑаÑÐ¸Ñ API
+* ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑиÑ
+
+* ÐаÑка о даннÑÑ
+* ÐлÑбокое обÑÑение
+* ÐаÑинное обÑÑение
+* ÐнедÑение завиÑимоÑÑей
+* ÐÑÑенÑиÑикаÑÐ¸Ñ HTTP Basic
+* HTTP Digest
+* ÑоÑÐ¼Ð°Ñ ISO
+* ÑÑандаÑÑ JSON Schema
+* JSON-ÑÑ
ема
+* опÑеделение ÑÑ
емÑ
+* password flow
+* ÐобилÑнÑй
+
+* ÑÑÑаÑевÑий
+* ÑпÑоекÑиÑованнÑй
+* некоÑÑекÑнÑй
+* на леÑÑ
+* ÑÑандаÑÑ
+* по ÑмолÑаниÑ
+* ÑÑвÑÑвиÑелÑнÑй к ÑегиÑÑÑÑ
+* неÑÑвÑÑвиÑелÑнÑй к ÑегиÑÑÑÑ
+
+* обÑлÑживаÑÑ Ð¿Ñиложение
+* оÑдаваÑÑ ÑÑÑаниÑÑ
+
+* пÑиложение
+* пÑиложение
+
+* HTTP-запÑоÑ
+* HTTP-оÑвеÑ
+* оÑÐ²ÐµÑ Ñ Ð¾Ñибкой
+
+* опеÑаÑÐ¸Ñ Ð¿ÑÑи
+* декоÑаÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи
+* ÑÑнкÑиÑ-обÑабоÑÑик пÑÑи
+
+* Ñело
+* Ñело запÑоÑа
+* Ñело оÑвеÑа
+* JSON-Ñело
+* Ñело ÑоÑмÑ
+* Ñело Ñайла
+* Ñело ÑÑнкÑии
+
+* паÑамеÑÑ
+* body-паÑамеÑÑ
+* path-паÑамеÑÑ
+* query-паÑамеÑÑ
+* cookie-паÑамеÑÑ
+* паÑамеÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°
+* паÑамеÑÑ ÑоÑмÑ
+* паÑамеÑÑ ÑÑнкÑии
+
+* ÑобÑÑие
+* ÑобÑÑие запÑÑка
+* запÑÑк ÑеÑвеÑа
+* ÑобÑÑие оÑÑановки
+* ÑобÑÑие lifespan
+
+* обÑабоÑÑик
+* обÑабоÑÑик ÑобÑÑиÑ
+* обÑабоÑÑик иÑклÑÑений
+* обÑабаÑÑваÑÑ
+
+* моделÑ
+* Pydantic-моделÑ
+* Ð¼Ð¾Ð´ÐµÐ»Ñ Ð´Ð°Ð½Ð½ÑÑ
+* Ð¼Ð¾Ð´ÐµÐ»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
+* Ð¼Ð¾Ð´ÐµÐ»Ñ ÑоÑмÑ
+* обÑÐµÐºÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸
+
+* клаÑÑ
+* базовÑй клаÑÑ
+* ÑодиÑелÑÑкий клаÑÑ
+* подклаÑÑ
+* доÑеÑний клаÑÑ
+* ÑодÑÑвеннÑй клаÑÑ
+* меÑод клаÑÑа
+
+* заголовок
+* HTTP-заголовки
+* заголовок авÑоÑизаÑии
+* заголовок `Authorization`
+* заголовок `Forwarded`
+
+* ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей
+* завиÑимоÑÑÑ
+* завиÑимÑй обÑекÑ
+* завиÑимÑй
+
+* огÑаниÑеннÑй вводом/вÑводом
+* огÑаниÑеннÑй пÑоÑеÑÑоÑом
+* конкÑÑенÑноÑÑÑ
+* паÑаллелизм
+* многопÑоÑеÑÑноÑÑÑ
+
+* пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑжениÑ
+* пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑжениÑ
+* `PATH`
+* пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `PATH`
+
+* аÑÑенÑиÑикаÑиÑ
+* пÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ Ð°ÑÑенÑиÑикаÑии
+* авÑоÑизаÑиÑ
+* ÑоÑма авÑоÑизаÑии
+* пÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ Ð°Ð²ÑоÑизаÑии
+* полÑзоваÑÐµÐ»Ñ Ð°ÑÑенÑиÑиÑиÑÑеÑÑÑ
+* ÑиÑÑема аÑÑенÑиÑиÑиÑÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑ
+
+* CLI
+* инÑеÑÑÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки
+
+* ÑеÑвеÑ
+* клиенÑ
+
+* облаÑнÑй пÑовайдеÑ
+* облаÑнÑй ÑеÑвиÑ
+
+* ÑазÑабоÑка
+* ÑÑÐ°Ð¿Ñ ÑазÑабоÑки
+
+* dict
+* ÑловаÑÑ
+* пеÑеÑиÑление
+* enum
+* Ñлен пеÑеÑиÑлениÑ
+
+* кодиÑовÑик
+* декодиÑовÑик
+* кодиÑоваÑÑ
+* декодиÑоваÑÑ
+
+* иÑклÑÑение
+* вÑзваÑÑ
+
+* вÑÑажение
+* опеÑаÑоÑ
+
+* ÑÑонÑенд
+* бÑкенд
+
+* обÑÑждение на GitHub
+* Issue на GitHub (ÑикеÑ/обÑаÑение)
+
+* пÑоизводиÑелÑноÑÑÑ
+* опÑимизаÑÐ¸Ñ Ð¿ÑоизводиÑелÑноÑÑи
+
+* Ñип возвÑаÑаемого знаÑениÑ
+* возвÑаÑаемое знаÑение
+
+* безопаÑноÑÑÑ
+* ÑÑ
ема безопаÑноÑÑи
+
+* задаÑа
+* ÑÐ¾Ð½Ð¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñа
+* ÑÑнкÑÐ¸Ñ Ð·Ð°Ð´Ð°Ñи
+
+* Ñаблон
+* ÑаблонизаÑоÑ
+
+* анноÑаÑÐ¸Ñ Ñипов
+* анноÑаÑÐ¸Ñ Ñипов
+
+* воÑÐºÐµÑ ÑеÑвеÑа
+* воÑÐºÐµÑ Uvicorn
+* воÑÐºÐµÑ Gunicorn
+* воÑкеÑ-пÑоÑеÑÑ
+* клаÑÑ Ð²Ð¾ÑкеÑа
+* ÑабоÑÐ°Ñ Ð½Ð°Ð³ÑÑзка
+
+* деплой
+* ÑазвеÑнÑÑÑ
+
+* SDK
+* Ð½Ð°Ð±Ð¾Ñ ÑÑедÑÑв ÑазÑабоÑки ÐÐ
+
+* `APIRouter`
+* `requirements.txt`
+* Ñокен Bearer
+* неÑовмеÑÑимое изменение
+* баг
+* кнопка
+* вÑзÑваемÑй обÑекÑ
+* код
+* коммиÑ
+* Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа
+* коÑÑÑина
+* ÑеÑÑÐ¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
+* диÑк
+* домен
+* движок
+* ÑикÑивнÑй X
+* меÑод HTTP GET
+* ÑлеменÑ
+* библиоÑека
+* lifespan
+* блокиÑовка
+* middleware (ÐÑомежÑÑоÑнÑй Ñлой)
+* мобилÑное пÑиложение
+* модÑлÑ
+* монÑиÑование
+* ÑеÑÑ
+* origin (иÑÑоÑник)
+* пеÑеопÑеделение
+* Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°Ñ Ð½Ð°Ð³ÑÑзка
+* пÑоÑеÑÑоÑ
+* ÑвойÑÑво
+* пÑокÑи
+* пÑлл-ÑеквеÑÑ (запÑÐ¾Ñ Ð½Ð° изменение)
+* запÑоÑ
+* ÐÐУ
+* ÑдалÑÐ½Ð½Ð°Ñ Ð¼Ð°Ñина
+* ÑÑаÑÑÑ-код
+* ÑÑÑока
+* Ñег
+* вебâÑÑеймвоÑк
+* подÑÑановоÑнÑй знак
+* веÑнÑÑÑ
+* валидиÑоваÑÑ
+
+////
+
+//// tab | ÐнÑоÑмаÑиÑ
+
+ÐÑо неполнÑй и неноÑмаÑивнÑй ÑпиÑок (в оÑновном) ÑеÑ
ниÑеÑкиÑ
ÑеÑминов, вÑÑÑеÑаÑÑиÑ
ÑÑ Ð² докÑменÑаÑии. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð°Ð²ÑоÑÑ Ð¿ÑомпÑа понÑÑÑ, по каким ÑеÑминам LLM нÑжна подÑказка. ÐапÑимеÑ, когда она пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑно Ñ
оÑоÑий пеÑевод к неопÑималÑномÑ. Ðли когда Ñ Ð½ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñо Ñклонением/ÑпÑÑжением ÑеÑмина на ваÑем ÑзÑке.
+
+См., напÑимеÑ, Ñаздел `### List of English terms and their preferred German translations` в `docs/de/llm-prompt.md`.
+
+////
diff --git a/docs/ru/docs/advanced/additional-responses.md b/docs/ru/docs/advanced/additional-responses.md
new file mode 100644
index 000000000..c63c0c08b
--- /dev/null
+++ b/docs/ru/docs/advanced/additional-responses.md
@@ -0,0 +1,247 @@
+# ÐополниÑелÑнÑе оÑвеÑÑ Ð² OpenAPI { #additional-responses-in-openapi }
+
+/// warning | ÐÑедÑпÑеждение
+
+ÐÑо доволÑно пÑодвинÑÑÐ°Ñ Ñема.
+
+ÐÑли Ð²Ñ ÑолÑко наÑинаеÑе ÑабоÑаÑÑ Ñ **FastAPI**, возможно, вам ÑÑо пока не нÑжно.
+
+///
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвлÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе оÑвеÑÑ Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑми ÑÑаÑÑÑ-кодами, Ñипами ÑодеÑжимого, опиÑаниÑми и Ñ.д.
+
+ÐÑи дополниÑелÑнÑе оÑвеÑÑ Ð±ÑдÑÑ Ð²ÐºÐ»ÑÑÐµÐ½Ñ Ð² ÑÑ
ÐµÐ¼Ñ OpenAPI, и поÑÑÐ¾Ð¼Ñ Ð¿Ð¾ÑвÑÑÑÑ Ð² докÑменÑаÑии API.
+
+Ðо Ð´Ð»Ñ ÑакиÑ
дополниÑелÑнÑÑ
оÑвеÑов ÑбедиÑеÑÑ, ÑÑо Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе `Response`, напÑÐ¸Ð¼ÐµÑ `JSONResponse`, напÑÑмÑÑ, Ñо Ñвоим ÑÑаÑÑÑ-кодом и ÑодеÑжимÑм.
+
+## ÐополниÑелÑнÑй оÑÐ²ÐµÑ Ñ `model` { #additional-response-with-model }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑедаÑÑ Ð²Ð°Ñим декоÑаÑоÑам опеÑаÑии пÑÑи паÑамеÑÑ `responses`.
+
+Ðн пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ `dict`: клÑÑи â ÑÑо ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑвеÑа (напÑимеÑ, `200`), а знаÑÐµÐ½Ð¸Ñ â дÑÑгие `dict` Ñ Ð¸Ð½ÑоÑмаÑией Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из ниÑ
.
+
+ÐаждÑй из ÑÑиÑ
`dict` Ð´Ð»Ñ Ð¾ÑвеÑа Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÐºÐ»ÑÑ `model`, ÑодеÑжаÑий Pydantic-моделÑ, аналогиÑно `response_model`.
+
+**FastAPI** возÑмÑÑ ÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ, ÑгенеÑиÑÑÐµÑ Ð´Ð»Ñ Ð½ÐµÑ JSONâÑÑ
ÐµÐ¼Ñ Ð¸ вклÑÑÐ¸Ñ ÐµÑ Ð² нÑжное меÑÑо в OpenAPI.
+
+ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвиÑÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ оÑÐ²ÐµÑ Ñо ÑÑаÑÑÑ-кодом `404` и Pydantic-моделÑÑ `Message`, можно напиÑаÑÑ:
+
+{* ../../docs_src/additional_responses/tutorial001.py hl[18,22] *}
+
+/// note | ÐÑимеÑание
+
+ÐмейÑе в видÑ, ÑÑо необÑ
одимо возвÑаÑаÑÑ `JSONResponse` напÑÑмÑÑ.
+
+///
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐлÑÑ `model` не ÑвлÑеÑÑÑ ÑаÑÑÑÑ OpenAPI.
+
+**FastAPI** возÑмÑÑ Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¾ÑÑÑда, ÑгенеÑиÑÑÐµÑ JSONâÑÑ
ÐµÐ¼Ñ Ð¸ помеÑÑÐ¸Ñ ÐµÑ Ð² нÑжное меÑÑо.
+
+ÐÑжное меÑÑо:
+
+* РклÑÑе `content`, знаÑением коÑоÑого ÑвлÑеÑÑÑ Ð´ÑÑгой JSONâобÑÐµÐºÑ (`dict`), ÑодеÑжаÑий:
+ * ÐлÑÑ Ñ Ñипом ÑодеÑжимого, напÑÐ¸Ð¼ÐµÑ `application/json`, знаÑением коÑоÑого ÑвлÑеÑÑÑ Ð´ÑÑгой JSONâобÑекÑ, ÑодеÑжаÑий:
+ * ÐлÑÑ `schema`, знаÑением коÑоÑого ÑвлÑеÑÑÑ JSONâÑÑ
ема из модели â Ð²Ð¾Ñ Ð½Ñжное меÑÑо.
+ * **FastAPI** добавлÑÐµÑ Ð·Ð´ÐµÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° глобалÑнÑе JSONâÑÑ
ÐµÐ¼Ñ Ð² дÑÑгом меÑÑе ваÑего OpenAPI вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑаÑÑ ÑÑ
ÐµÐ¼Ñ Ð½Ð°Ð¿ÑÑмÑÑ. Так дÑÑгие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ клиенÑÑ ÑмогÑÑ Ð¸ÑполÑзоваÑÑ ÑÑи JSONâÑÑ
ÐµÐ¼Ñ Ð½Ð°Ð¿ÑÑмÑÑ, пÑедоÑÑавлÑÑÑ Ð»ÑÑÑие инÑÑÑÑменÑÑ Ð³ÐµÐ½ÐµÑаÑии кода и Ñ.д.
+
+///
+
+СгенеÑиÑованнÑе в OpenAPI оÑвеÑÑ Ð´Ð»Ñ ÑÑой опеÑаÑии пÑÑи бÑдÑÑ Ñакими:
+
+```JSON hl_lines="3-12"
+{
+ "responses": {
+ "404": {
+ "description": "Additional Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Message"
+ }
+ }
+ }
+ },
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Item"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+СÑ
ÐµÐ¼Ñ Ð´Ð°Ð½Ñ ÐºÐ°Ðº ÑÑÑлки на дÑÑгое меÑÑо внÑÑÑи ÑÑ
ÐµÐ¼Ñ OpenAPI:
+
+```JSON hl_lines="4-16"
+{
+ "components": {
+ "schemas": {
+ "Message": {
+ "title": "Message",
+ "required": [
+ "message"
+ ],
+ "type": "object",
+ "properties": {
+ "message": {
+ "title": "Message",
+ "type": "string"
+ }
+ }
+ },
+ "Item": {
+ "title": "Item",
+ "required": [
+ "id",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "title": "Id",
+ "type": "string"
+ },
+ "value": {
+ "title": "Value",
+ "type": "string"
+ }
+ }
+ },
+ "ValidationError": {
+ "title": "ValidationError",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "loc": {
+ "title": "Location",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "msg": {
+ "title": "Message",
+ "type": "string"
+ },
+ "type": {
+ "title": "Error Type",
+ "type": "string"
+ }
+ }
+ },
+ "HTTPValidationError": {
+ "title": "HTTPValidationError",
+ "type": "object",
+ "properties": {
+ "detail": {
+ "title": "Detail",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+## ÐополниÑелÑнÑе ÑÐ¸Ð¿Ñ ÑодеÑжимого Ð´Ð»Ñ Ð¾Ñновного оÑвеÑа { #additional-media-types-for-the-main-response }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¶Ðµ паÑамеÑÑ `responses`, ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑазнÑе ÑÐ¸Ð¿Ñ ÑодеÑжимого Ð´Ð»Ñ Ñого же оÑновного оÑвеÑа.
+
+ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй Ñип ÑодеÑжимого `image/png`, обÑÑвив, ÑÑо ваÑа опеÑаÑÐ¸Ñ Ð¿ÑÑи Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ JSONâобÑÐµÐºÑ (Ñ Ñипом ÑодеÑжимого `application/json`) или PNGâизобÑажение:
+
+{* ../../docs_src/additional_responses/tutorial002.py hl[19:24,28] *}
+
+/// note | ÐÑимеÑание
+
+УÑÑиÑе, ÑÑо изобÑажение нÑжно возвÑаÑаÑÑ Ð½Ð°Ð¿ÑÑмÑÑ, иÑполÑзÑÑ `FileResponse`.
+
+///
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐÑли Ð²Ñ Ñвно не ÑкажеÑе дÑÑгой Ñип ÑодеÑжимого в паÑамеÑÑе `responses`, FastAPI бÑÐ´ÐµÑ ÑÑиÑаÑÑ, ÑÑо оÑÐ²ÐµÑ Ð¸Ð¼ÐµÐµÑ ÑÐ¾Ñ Ð¶Ðµ Ñип ÑодеÑжимого, ÑÑо и оÑновной клаÑÑ Ð¾ÑвеÑа (по ÑмолÑÐ°Ð½Ð¸Ñ `application/json`).
+
+Ðо еÑли Ð²Ñ Ñказали полÑзоваÑелÑÑкий клаÑÑ Ð¾ÑвеÑа Ñ `None` в каÑеÑÑве его Ñипа ÑодеÑжимого, FastAPI иÑполÑзÑÐµÑ `application/json` Ð´Ð»Ñ Ð»Ñбого дополниÑелÑного оÑвеÑа, Ñ ÐºÐ¾ÑоÑого еÑÑÑ ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ.
+
+///
+
+## ÐомбиниÑование инÑоÑмаÑии { #combining-information }
+
+ÐÑ Ñакже можеÑе комбиниÑоваÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑвеÑаÑ
из неÑколÑкиÑ
меÑÑ, вклÑÑÐ°Ñ Ð¿Ð°ÑамеÑÑÑ `response_model`, `status_code` и `responses`.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ `response_model`, иÑполÑзÑÑ ÑÑаÑÑÑ-код по ÑмолÑÐ°Ð½Ð¸Ñ `200` (или Ñвой, еÑли нÑжно), а заÑем обÑÑвиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð´Ð»Ñ ÑÑого же оÑвеÑа в `responses`, напÑÑмÑÑ Ð² ÑÑ
еме OpenAPI.
+
+**FastAPI** ÑоÑ
ÑÐ°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· `responses` и обÑÐµÐ´Ð¸Ð½Ð¸Ñ ÐµÑ Ñ JSONâÑÑ
емой из ваÑей модели.
+
+ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¾ÑÐ²ÐµÑ Ñо ÑÑаÑÑÑ-кодом `404`, коÑоÑÑй иÑполÑзÑÐµÑ Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¸ Ð¸Ð¼ÐµÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкое `description`.
+
+Ð Ñакже оÑÐ²ÐµÑ Ñо ÑÑаÑÑÑ-кодом `200`, коÑоÑÑй иÑполÑзÑÐµÑ Ð²Ð°Ñ `response_model`, но вклÑÑÐ°ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий `example`:
+
+{* ../../docs_src/additional_responses/tutorial003.py hl[20:31] *}
+
+ÐÑÑ ÑÑо бÑÐ´ÐµÑ Ð¾Ð±Ñединено и вклÑÑено в Ð²Ð°Ñ OpenAPI и оÑобÑажено в докÑменÑаÑии API:
+
+
+
+## ÐомбиниÑование пÑедопÑеделÑннÑÑ
и полÑзоваÑелÑÑкиÑ
оÑвеÑов { #combine-predefined-responses-and-custom-ones }
+
+Ðозможно, Ð²Ñ Ñ
оÑиÑе имеÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе пÑедопÑеделÑннÑе оÑвеÑÑ, пÑименимÑе ко многим опеÑаÑиÑм пÑÑи, но пÑи ÑÑом комбиниÑоваÑÑ Ð¸Ñ
Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкими оÑвеÑами, необÑ
одимÑми Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ конкÑеÑной опеÑаÑии пÑÑи.
+
+Ð ÑакиÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿ÑиÑм Python «ÑаÑпаковки» `dict` Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `**dict_to_unpack`:
+
+```Python
+old_dict = {
+ "old key": "old value",
+ "second old key": "second old value",
+}
+new_dict = {**old_dict, "new key": "new value"}
+```
+
+ÐдеÑÑ `new_dict` бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð²Ñе паÑÑ ÐºÐ»ÑÑ-знаÑение из `old_dict` плÑÑ Ð½Ð¾Ð²ÑÑ Ð¿Ð°ÑÑ ÐºÐ»ÑÑ-знаÑение:
+
+```Python
+{
+ "old key": "old value",
+ "second old key": "second old value",
+ "new key": "new value",
+}
+```
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¿ÑиÑм, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеиÑполÑзоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе пÑедопÑеделÑннÑе оÑвеÑÑ Ð² ваÑиÑ
опеÑаÑиÑÑ
пÑÑи и комбиниÑоваÑÑ Ð¸Ñ
Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑми полÑзоваÑелÑÑкими.
+
+ÐапÑимеÑ:
+
+{* ../../docs_src/additional_responses/tutorial004.py hl[13:17,26] *}
+
+## ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑвеÑаÑ
OpenAPI { #more-information-about-openapi-responses }
+
+ЧÑÐ¾Ð±Ñ ÑвидеÑÑ, ÑÑо именно можно вклÑÑаÑÑ Ð² оÑвеÑÑ, поÑмоÑÑиÑе ÑÑи ÑÐ°Ð·Ð´ÐµÐ»Ñ ÑпеÑиÑикаÑии OpenAPI:
+
+* ÐбÑÐµÐºÑ Responses OpenAPI, он вклÑÑÐ°ÐµÑ `Response Object`.
+* ÐбÑÐµÐºÑ Response OpenAPI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вклÑÑиÑÑ Ð²ÑÑ Ð¸Ð· ÑÑого обÑекÑа напÑÑмÑÑ Ð² каждÑй оÑÐ²ÐµÑ Ð²Ð½ÑÑÑи ваÑего паÑамеÑÑа `responses`. ÐклÑÑÐ°Ñ `description`, `headers`, `content` (внÑÑÑи него Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе ÑазнÑе ÑÐ¸Ð¿Ñ ÑодеÑжимого и JSONâÑÑ
емÑ) и `links`.
diff --git a/docs/ru/docs/advanced/advanced-dependencies.md b/docs/ru/docs/advanced/advanced-dependencies.md
new file mode 100644
index 000000000..75a6f0d1f
--- /dev/null
+++ b/docs/ru/docs/advanced/advanced-dependencies.md
@@ -0,0 +1,153 @@
+# ÐÑодвинÑÑÑе завиÑимоÑÑи { #advanced-dependencies }
+
+## ÐаÑамеÑÑизованнÑе завиÑимоÑÑи { #parameterized-dependencies }
+
+ÐÑе завиÑимоÑÑи, коÑоÑÑе Ð¼Ñ Ð²Ð¸Ð´ÐµÐ»Ð¸, â ÑÑо конкÑеÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¸Ð»Ð¸ клаÑÑ.
+
+Ðо бÑваÑÑ ÑлÑÑаи, когда нÑжно задаваÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, не обÑÑвлÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑазнÑÑ
ÑÑнкÑий или клаÑÑов.
+
+ÐÑедÑÑавим, ÑÑо нам нÑжна завиÑимоÑÑÑ, коÑоÑÐ°Ñ Ð¿ÑовеÑÑеÑ, ÑодеÑÐ¶Ð¸Ñ Ð»Ð¸ query-паÑамеÑÑ `q` некоÑоÑое ÑикÑиÑованное ÑодеÑжимое.
+
+Ðо пÑи ÑÑом Ð¼Ñ Ñ
оÑим имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑизоваÑÑ ÑÑо ÑикÑиÑованное ÑодеÑжимое.
+
+## «ÐÑзÑваемÑй» ÑкземплÑÑ { #a-callable-instance }
+
+Ð Python еÑÑÑ ÑпоÑоб ÑделаÑÑ ÑкземплÑÑ ÐºÐ»Ð°ÑÑа «вÑзÑваемÑм» обÑекÑом.
+
+Ðе Ñам клаÑÑ (он Ñже ÑвлÑеÑÑÑ Ð²ÑзÑваемÑм), а ÑкземплÑÑ ÑÑого клаÑÑа.
+
+ÐÐ»Ñ ÑÑого обÑÑвлÑем меÑод `__call__`:
+
+{* ../../docs_src/dependencies/tutorial011_an_py39.py hl[12] *}
+
+Ð ÑÑом ÑлÑÑае именно `__call__` **FastAPI** иÑполÑзÑÐµÑ Ð´Ð»Ñ Ð¿ÑовеÑки дополниÑелÑнÑÑ
паÑамеÑÑов и подзавиÑимоÑÑей, и именно он бÑÐ´ÐµÑ Ð²Ñзван, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð·Ð¶Ðµ пеÑедаÑÑ Ð·Ð½Ð°Ñение паÑамеÑÑÑ Ð² ваÑей *ÑÑнкÑии-обÑабоÑÑике пÑÑи*.
+
+## ÐаÑамеÑÑизÑем ÑкземплÑÑ { #parameterize-the-instance }
+
+ТепеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ `__init__`, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвиÑÑ Ð¿Ð°ÑамеÑÑÑ ÑкземплÑÑа, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑÑÑ
бÑдем «паÑамеÑÑизоваÑÑ» завиÑимоÑÑÑ:
+
+{* ../../docs_src/dependencies/tutorial011_an_py39.py hl[9] *}
+
+Ð ÑÑом ÑлÑÑае **FastAPI** вовÑе не ÑÑÐ¾Ð³Ð°ÐµÑ `__init__` и не завиÑÐ¸Ñ Ð¾Ñ Ð½ÐµÐ³Ð¾ â Ð¼Ñ Ð¸ÑполÑзÑем его напÑÑмÑÑ Ð² наÑем коде.
+
+## СоздаÑм ÑкземплÑÑ { #create-an-instance }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаÑÑ ÑкземплÑÑ ÑÑого клаÑÑа Ñак:
+
+{* ../../docs_src/dependencies/tutorial011_an_py39.py hl[18] *}
+
+Так Ð¼Ñ Â«Ð¿Ð°ÑамеÑÑизÑем» наÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ: ÑепеÑÑ Ð²Ð½ÑÑÑи Ð½ÐµÑ Ñ
ÑаниÑÑÑ "bar" в аÑÑибÑÑе `checker.fixed_content`.
+
+## ÐÑполÑзÑем ÑкземплÑÑ ÐºÐ°Ðº завиÑимоÑÑÑ { #use-the-instance-as-a-dependency }
+
+ÐаÑем Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ ÑÑÐ¾Ñ `checker` в `Depends(checker)` вмеÑÑо `Depends(FixedContentQueryChecker)`, поÑÐ¾Ð¼Ñ ÑÑо завиÑимоÑÑÑÑ ÑвлÑеÑÑÑ ÑкземплÑÑ `checker`, а не Ñам клаÑÑ.
+
+РпÑи ÑазÑеÑении завиÑимоÑÑи **FastAPI** вÑÐ·Ð¾Ð²ÐµÑ `checker` пÑимеÑно Ñак:
+
+```Python
+checker(q="somequery")
+```
+
+â¦Ð¸ пеÑедаÑÑ Ð²Ð¾Ð·Ð²ÑаÑÑнное знаÑение как знаÑение завиÑимоÑÑи в наÑÑ *ÑÑнкÑиÑ-обÑабоÑÑике пÑÑи* в паÑамеÑÑ `fixed_content_included`:
+
+{* ../../docs_src/dependencies/tutorial011_an_py39.py hl[22] *}
+
+/// tip | СовеÑ
+
+ÐÑе ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð¿ÑиÑÑнÑÑÑм за ÑÑи. Рпока Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ ÑовÑем понÑÑно, Ñем ÑÑо полезно.
+
+ÐÑи пÑимеÑÑ Ð½Ð°Ð¼ÐµÑенно пÑоÑÑÑе, но они показÑваÑÑ, как вÑÑ ÑÑÑÑоено.
+
+РглаваÑ
пÑо безопаÑноÑÑÑ ÐµÑÑÑ Ð²ÑпомогаÑелÑнÑе ÑÑнкÑии, ÑеализованнÑе Ñем же ÑпоÑобом.
+
+ÐÑли Ð²Ñ Ð¿Ð¾Ð½Ñли вÑÑ Ð²ÑÑе, Ð²Ñ Ñже знаеÑе, как «под капоÑом» ÑабоÑаÑÑ ÑÑи ÑÑилиÑÑ Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи.
+
+///
+
+## ÐавиÑимоÑÑи Ñ `yield`, `HTTPException`, `except` и ÑоновÑми задаÑами { #dependencies-with-yield-httpexception-except-and-background-tasks }
+
+/// warning | ÐÑедÑпÑеждение
+
+СкоÑее вÑего, вам не понадобÑÑÑÑ ÑÑи ÑеÑ
ниÑеÑкие деÑали.
+
+Ðни Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð³Ð»Ð°Ð²Ð½Ñм обÑазом, еÑли Ñ Ð²Ð°Ñ Ð±Ñло пÑиложение FastAPI веÑÑии ниже 0.118.0 и Ð²Ñ ÑÑолкнÑлиÑÑ Ñ Ð¿Ñоблемами завиÑимоÑÑей Ñ `yield`.
+
+///
+
+ÐавиÑимоÑÑи Ñ `yield` Ñо вÑеменем изменÑлиÑÑ, ÑÑÐ¾Ð±Ñ ÑÑиÑÑваÑÑ ÑазнÑе ÑлÑÑаи пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ иÑпÑавлÑÑÑ Ð¿ÑоблемÑ. Ðиже â кÑаÑкое ÑезÑме изменений.
+
+### ÐавиÑимоÑÑи Ñ `yield` и `StreamingResponse`, ÑеÑ
ниÑеÑкие деÑали { #dependencies-with-yield-and-streamingresponse-technical-details }
+
+Ðо FastAPI 0.118.0, еÑли Ð²Ñ Ð¸ÑполÑзовали завиÑимоÑÑÑ Ñ `yield`, код поÑле `yield` вÑполнÑлÑÑ Ð¿Ð¾Ñле возвÑаÑа из *ÑÑнкÑии-обÑабоÑÑика пÑÑи*, но пÑÑмо пеÑед оÑпÑавкой оÑвеÑа.
+
+ÐÐ´ÐµÑ ÑоÑÑоÑла в Ñом, ÑÑÐ¾Ð±Ñ Ð½Ðµ ÑдеÑживаÑÑ ÑеÑÑÑÑÑ Ð´Ð¾Ð»ÑÑе необÑ
одимого, пока оÑÐ²ÐµÑ Â«Ð¿ÑÑеÑеÑÑвÑеÑ» по ÑеÑи.
+
+ÐÑо изменение Ñакже ознаÑало, ÑÑо еÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑали `StreamingResponse`, код поÑле `yield` в завиÑимоÑÑи Ñже ÑÑпевал вÑполниÑÑÑÑ.
+
+ÐапÑимеÑ, еÑли Ñ Ð²Ð°Ñ Ð±Ñла ÑеÑÑÐ¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
в завиÑимоÑÑи Ñ `yield`, `StreamingResponse` не Ñмог Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑÑÑ ÑеÑÑÐ¸Ñ Ð²Ð¾ вÑÐµÐ¼Ñ ÑÑÑиминга даннÑÑ
, поÑÐ¾Ð¼Ñ ÑÑо ÑеÑÑÐ¸Ñ Ñже бÑла закÑÑÑа в коде поÑле `yield`.
+
+РвеÑÑии 0.118.0 ÑÑо поведение бÑло возвÑаÑено к ÑомÑ, ÑÑо код поÑле `yield` вÑполнÑеÑÑÑ Ð¿Ð¾Ñле оÑпÑавки оÑвеÑа.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+Ðак Ð²Ñ ÑвидиÑе ниже, ÑÑо оÑÐµÐ½Ñ Ð¿Ð¾Ñ
оже на поведение до веÑÑии 0.106.0, но Ñ Ð½ÐµÑколÑкими ÑлÑÑÑениÑми и иÑпÑавлениÑми кÑаевÑÑ
ÑлÑÑаев.
+
+///
+
+#### СÑенаÑии Ñ Ñанним вÑполнением кода поÑле `yield` { #use-cases-with-early-exit-code }
+
+ÐÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÑенаÑии Ñо ÑпеÑиÑиÑеÑкими ÑÑловиÑми, коÑоÑÑм могло Ð±Ñ Ð¿Ð¾Ð¼Ð¾ÑÑ ÑÑаÑое поведение â вÑполнение кода поÑле `yield` пеÑед оÑпÑавкой оÑвеÑа.
+
+ÐапÑимеÑ, пÑедÑÑавÑÑе, ÑÑо Ð²Ñ Ð¸ÑполÑзÑеÑе ÑеÑÑÐ¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
в завиÑимоÑÑи Ñ `yield` ÑолÑко Ð´Ð»Ñ Ð¿ÑовеÑки полÑзоваÑелÑ, а в Ñамой *ÑÑнкÑии-обÑабоÑÑике пÑÑи* ÑÑа ÑеÑÑÐ¸Ñ Ð±Ð¾Ð»ÑÑе не иÑполÑзÑеÑÑÑ, и пÑи ÑÑом оÑÐ²ÐµÑ Ð¾ÑпÑавлÑеÑÑÑ Ð´Ð¾Ð»Ð³Ð¾, напÑимеÑ, ÑÑо `StreamingResponse`, коÑоÑÑй медленно оÑпÑавлÑÐµÑ Ð´Ð°Ð½Ð½Ñе и по какой-Ñо пÑиÑине не иÑполÑзÑÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
+
+Ð Ñаком ÑлÑÑае ÑеÑÑÐ¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
бÑÐ´ÐµÑ ÑдеÑживаÑÑÑÑ Ð´Ð¾ завеÑÑÐµÐ½Ð¸Ñ Ð¾ÑпÑавки оÑвеÑа, Ñ
оÑÑ ÐµÑли Ð²Ñ ÐµÑ Ð½Ðµ иÑполÑзÑеÑе, ÑдеÑживаÑÑ ÐµÑ Ð½Ðµ ÑÑебÑеÑÑÑ.
+
+ÐÑо могло Ð±Ñ Ð²ÑглÑдеÑÑ Ñак:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py *}
+
+Ðод поÑле `yield`, авÑомаÑиÑеÑкое закÑÑÑие `Session` в:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py ln[19:21] *}
+
+â¦Ð±ÑÐ´ÐµÑ Ð²Ñполнен поÑле Ñого, как оÑÐ²ÐµÑ Ð·Ð°ÐºÐ¾Ð½ÑÐ¸Ñ Ð¾ÑпÑÐ°Ð²ÐºÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÑÑ
даннÑÑ
:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py ln[30:38] hl[31:33] *}
+
+Ðо поÑколÑÐºÑ `generate_stream()` не иÑполÑзÑÐµÑ ÑеÑÑÐ¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, Ð½ÐµÑ ÑеалÑной необÑ
одимоÑÑи деÑжаÑÑ ÑеÑÑÐ¸Ñ Ð¾ÑкÑÑÑой во вÑÐµÐ¼Ñ Ð¾ÑпÑавки оÑвеÑа.
+
+ÐÑли Ñ Ð²Ð°Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñакой ÑÑенаÑий Ñ SQLModel (или SQLAlchemy), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе Ñвно закÑÑÑÑ ÑеÑÑиÑ, когда она болÑÑе не нÑжна:
+
+{* ../../docs_src/dependencies/tutorial014_an_py310.py ln[24:28] hl[28] *}
+
+Так ÑеÑÑÐ¸Ñ Ð¾ÑÐ²Ð¾Ð±Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к базе даннÑÑ
, и дÑÑгие запÑоÑÑ ÑмогÑÑ ÐµÐ³Ð¾ иÑполÑзоваÑÑ.
+
+ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð´ÑÑгой ÑÑенаÑий, где нÑжно Ñаннее завеÑÑение завиÑимоÑÑи Ñ `yield`, пожалÑйÑÑа, ÑоздайÑе вопÑÐ¾Ñ Ð² GitHub Discussions Ñ Ð¾Ð¿Ð¸Ñанием конкÑеÑного кейÑа и поÑÐµÐ¼Ñ Ð²Ð°Ð¼ бÑло Ð±Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ имеÑÑ Ñаннее закÑÑÑие Ð´Ð»Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей Ñ `yield`.
+
+ÐÑли поÑвÑÑÑÑ Ð²ÐµÑкие пÑиÑÐ¸Ð½Ñ Ð´Ð»Ñ Ñаннего закÑÑÑÐ¸Ñ Ð² завиÑимоÑÑÑÑ
Ñ `yield`, Ñ ÑаÑÑмоÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ нового ÑпоÑоба опÑионалÑно вклÑÑаÑÑ Ñаннее закÑÑÑие.
+
+### ÐавиÑимоÑÑи Ñ `yield` и `except`, ÑеÑ
ниÑеÑкие деÑали { #dependencies-with-yield-and-except-technical-details }
+
+Ðо FastAPI 0.110.0, еÑли Ð²Ñ Ð¸ÑполÑзовали завиÑимоÑÑÑ Ñ `yield`, заÑем пеÑеÑ
ваÑÑвали иÑклÑÑение Ñ `except` в ÑÑой завиÑимоÑÑи и не пÑобÑаÑÑвали иÑклÑÑение Ñнова, иÑклÑÑение авÑомаÑиÑеÑки пÑобÑаÑÑвалоÑÑ Ð´Ð°Ð»ÑÑе к обÑабоÑÑикам иÑклÑÑений или к обÑабоÑÑÐ¸ÐºÑ Ð²Ð½ÑÑÑенней оÑибки ÑеÑвеÑа.
+
+РвеÑÑии 0.110.0 ÑÑо бÑло изменено, ÑÑÐ¾Ð±Ñ Ð¸ÑпÑавиÑÑ Ð½ÐµÐºÐ¾Ð½ÑÑолиÑÑемое поÑÑебление памÑÑи изâза пÑобÑоÑеннÑÑ
иÑклÑÑений без обÑабоÑÑика (внÑÑÑенние оÑибки ÑеÑвеÑа) и пÑивеÑÑи поведение в ÑооÑвеÑÑÑвие Ñ Ð¾Ð±ÑÑнÑм поведением Python-кода.
+
+### ФоновÑе задаÑи и завиÑимоÑÑи Ñ `yield`, ÑеÑ
ниÑеÑкие деÑали { #background-tasks-and-dependencies-with-yield-technical-details }
+
+Ðо FastAPI 0.106.0 вÑзÑваÑÑ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле `yield` бÑло невозможно: код поÑле `yield` в завиÑимоÑÑÑÑ
вÑполнÑлÑÑ Ñже поÑле оÑпÑавки оÑвеÑа, поÑÑÐ¾Ð¼Ñ [ÐбÑабоÑÑики иÑклÑÑений](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank} к ÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Ñже оÑÑабоÑали.
+
+Так бÑло Ñделано в оÑновном Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло иÑполÑзоваÑÑ Ñе же обÑекÑÑ, «оÑданнÑе» завиÑимоÑÑÑми ÑеÑез `yield`, внÑÑÑи ÑоновÑÑ
задаÑ, поÑÐ¾Ð¼Ñ ÑÑо код поÑле `yield` вÑполнÑлÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ ÑоновÑÑ
задаÑ.
+
+Ð FastAPI 0.106.0 ÑÑо изменили, ÑÑÐ¾Ð±Ñ Ð½Ðµ ÑдеÑживаÑÑ ÑеÑÑÑÑÑ, пока оÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑÑÑ Ð¿Ð¾ ÑеÑи.
+
+/// tip | СовеÑ
+
+ÐÑоме Ñого, ÑÐ¾Ð½Ð¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñа обÑÑно â ÑÑо ÑамоÑÑоÑÑелÑнÑй ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ Ð»Ð¾Ð³Ð¸ÐºÐ¸, коÑоÑÑй ÑледÑÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð¾ÑделÑно, Ñо Ñвоими ÑеÑÑÑÑами (напÑимеÑ, Ñо Ñвоим подклÑÑением к базе даннÑÑ
).
+
+Так код, ÑкоÑее вÑего, бÑÐ´ÐµÑ ÑиÑе.
+
+///
+
+ÐÑли Ð²Ñ Ð¿Ð¾Ð»Ð°Ð³Ð°Ð»Ð¸ÑÑ Ð½Ð° пÑежнее поведение, ÑепеÑÑ ÑеÑÑÑÑÑ Ð´Ð»Ñ ÑоновÑÑ
Ð·Ð°Ð´Ð°Ñ ÑледÑÐµÑ ÑоздаваÑÑ Ð²Ð½ÑÑÑи Ñамой Ñоновой задаÑи и иÑполÑзоваÑÑ Ð²Ð½ÑÑÑи Ð½ÐµÑ ÑолÑко даннÑе, коÑоÑÑе не завиÑÑÑ Ð¾Ñ ÑеÑÑÑÑов завиÑимоÑÑей Ñ `yield`.
+
+ÐапÑимеÑ, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñой же ÑеÑÑии Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑоздайÑе новÑÑ ÑеÑÑÐ¸Ñ Ð² Ñоновой задаÑе и полÑÑиÑе обÑекÑÑ Ð¸Ð· Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑой новой ÑеÑÑии. РзаÑем, вмеÑÑо пеÑедаÑи обÑекÑа из Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
паÑамеÑÑом в ÑÑнкÑÐ¸Ñ Ñоновой задаÑи, пеÑедавайÑе иденÑиÑикаÑÐ¾Ñ ÑÑого обÑекÑа и заново полÑÑайÑе обÑÐµÐºÑ Ð²Ð½ÑÑÑи ÑÑнкÑии Ñоновой задаÑи.
diff --git a/docs/ru/docs/advanced/behind-a-proxy.md b/docs/ru/docs/advanced/behind-a-proxy.md
new file mode 100644
index 000000000..281cb7f73
--- /dev/null
+++ b/docs/ru/docs/advanced/behind-a-proxy.md
@@ -0,0 +1,458 @@
+# Ðа пÑокÑиâÑеÑвеÑом { #behind-a-proxy }
+
+Ðо многиÑ
ÑлÑÑаÑÑ
пеÑед пÑиложением FastAPI иÑполÑзÑеÑÑÑ Ð¿ÑокÑиâÑеÑвеÑ, напÑÐ¸Ð¼ÐµÑ Traefik или Nginx.
+
+Такие пÑокÑи могÑÑ Ð¾Ð±ÑабаÑÑваÑÑ HTTPSâÑеÑÑиÑикаÑÑ Ð¸ многое дÑÑгое.
+
+## ÐеÑеÑÑлаемÑе заголовки пÑокÑи { #proxy-forwarded-headers }
+
+ÐÑокÑи пеÑед ваÑим пÑиложением обÑÑно на леÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе HTTPâзаголовки пеÑед оÑпÑавкой запÑоÑа на Ð²Ð°Ñ ÑеÑвеÑ, ÑÑÐ¾Ð±Ñ ÑообÑиÑÑ ÐµÐ¼Ñ, ÑÑо запÑÐ¾Ñ Ð±Ñл пеÑеÑлан пÑокÑи, а Ñакже пеÑедаÑÑ Ð¸ÑÑ
однÑй (пÑблиÑнÑй) URL (вклÑÑÐ°Ñ Ð´Ð¾Ð¼ÐµÐ½), инÑоÑмаÑÐ¸Ñ Ð¾Ð± иÑполÑзовании HTTPS и Ñ.д.
+
+ÐÑогÑамма ÑеÑвеÑа (напÑимеÑ, Uvicorn, запÑÑеннÑй ÑеÑез FastAPI CLI) ÑÐ¼ÐµÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑоваÑÑ ÑÑи заголовки и пеÑедаваÑÑ ÑооÑвеÑÑÑвÑÑÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð²Ð°ÑÐµÐ¼Ñ Ð¿ÑиложениÑ.
+
+Ðо из ÑообÑажений безопаÑноÑÑи, пока ÑеÑÐ²ÐµÑ Ð½Ðµ ÑвеÑен, ÑÑо наÑ
одиÑÑÑ Ð·Ð° довеÑеннÑм пÑокÑи, он не бÑÐ´ÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑоваÑÑ ÑÑи заголовки.
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+Ðаголовки пÑокÑи:
+
+* X-Forwarded-For
+* X-Forwarded-Proto
+* X-Forwarded-Host
+
+///
+
+### ÐклÑÑиÑÑ Ð¿ÐµÑеÑÑлаемÑе заголовки пÑокÑи { #enable-proxy-forwarded-headers }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ FastAPI CLI Ñ Ð¾Ð¿Ñией командной ÑÑÑоки `--forwarded-allow-ips` и пеÑедаÑÑ IPâадÑеÑа, коÑоÑÑм ÑледÑÐµÑ Ð´Ð¾Ð²ÐµÑÑÑÑ Ð¿Ñи ÑÑении ÑÑиÑ
пеÑеÑÑлаемÑÑ
заголовков.
+
+ÐÑли ÑказаÑÑ `--forwarded-allow-ips="*"`, пÑиложение бÑÐ´ÐµÑ Ð´Ð¾Ð²ÐµÑÑÑÑ Ð²Ñем вÑ
одÑÑим IP.
+
+ÐÑли Ð²Ð°Ñ ÑеÑÐ²ÐµÑ Ð½Ð°Ñ
одиÑÑÑ Ð·Ð° довеÑеннÑм пÑокÑи и ÑолÑко пÑокÑи обÑаÑаеÑÑÑ Ðº немÑ, ÑÑого доÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ Ð¾Ð½ пÑинимал IP ÑÑого пÑокÑи.
+
+
+
+```console
+$ fastapi run --forwarded-allow-ips="*"
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+### РедиÑекÑÑ Ñ HTTPS { #redirects-with-https }
+
+ÐапÑимеÑ, Ð²Ñ Ð¾Ð±ÑÑвили опеÑаÑÐ¸Ñ Ð¿ÑÑи `/items/`:
+
+{* ../../docs_src/behind_a_proxy/tutorial001_01.py hl[6] *}
+
+ÐÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð¾Ð±ÑаÑиÑÑÑ Ðº `/items`, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑоизойдÑÑ ÑедиÑÐµÐºÑ Ð½Ð° `/items/`.
+
+Ðо до ÑÑÑановки опÑии `--forwarded-allow-ips` ÑедиÑÐµÐºÑ Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑÑи на `http://localhost:8000/items/`.
+
+Ðднако пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑпно по `https://mysuperapp.com`, и ÑедиÑÐµÐºÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ веÑÑи на `https://mysuperapp.com/items/`.
+
+Указав `--proxy-headers`, FastAPI ÑÐ¼Ð¾Ð¶ÐµÑ ÑедиÑекÑиÑÑ Ð½Ð° коÑÑекÑнÑй адÑеÑ. ð
+
+```
+https://mysuperapp.com/items/
+```
+
+/// tip | СовеÑ
+
+ÐÑли Ñ
оÑиÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе об HTTPS, ÑмоÑÑиÑе ÑÑководÑÑво [Ð HTTPS](../deployment/https.md){.internal-link target=_blank}.
+
+///
+
+### Ðак ÑабоÑаÑÑ Ð¿ÐµÑеÑÑлаемÑе заголовки пÑокÑи
+
+Ðиже показано, как пÑокÑи добавлÑÐµÑ Ð¿ÐµÑеÑÑлаемÑе заголовки Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»Ð¸ÐµÐ½Ñом и ÑеÑвеÑом пÑиложениÑ:
+
+```mermaid
+sequenceDiagram
+ participant Client as ÐлиенÑ
+ participant Proxy as ÐÑокÑи/ÐаланÑиÑовÑик нагÑÑзки
+ participant Server as FastAPI-ÑеÑвеÑ
+
+ Client->>Proxy: HTTPS-запÑоÑ
Host: mysuperapp.com
Path: /items
+
+ Note over Proxy: ÐÑокÑи-ÑеÑÐ²ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ Ð¿ÐµÑеÑÑлаемÑе заголовки
+
+ Proxy->>Server: HTTP-запÑоÑ
X-Forwarded-For: [client IP]
X-Forwarded-Proto: https
X-Forwarded-Host: mysuperapp.com
Path: /items
+
+ Note over Server: Server инÑеÑпÑеÑиÑÑÐµÑ HTTP-заголовки
(еÑли --forwarded-allow-ips ÑÑÑановлен)
+
+ Server->>Proxy: HTTP-оÑвеÑ
Ñ Ð²ÐµÑнÑми HTTPS URLs
+
+ Proxy->>Client: HTTPS-оÑвеÑ
+```
+
+ÐÑокÑи пеÑеÑ
ваÑÑÐ²Ð°ÐµÑ Ð¸ÑÑ
однÑй клиенÑÑкий запÑÐ¾Ñ Ð¸ добавлÑÐµÑ ÑпеÑиалÑнÑе пеÑеÑÑлаемÑе заголовки (`X-Forwarded-*`) пеÑед пеÑедаÑей запÑоÑа на ÑеÑÐ²ÐµÑ Ð¿ÑиложениÑ.
+
+ÐÑи заголовки ÑоÑ
ÑанÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± иÑÑ
одном запÑоÑе, коÑоÑÐ°Ñ Ð¸Ð½Ð°Ñе бÑла Ð±Ñ Ð¿Ð¾ÑеÑÑна:
+
+* X-Forwarded-For: иÑÑ
однÑй IPâадÑÐµÑ ÐºÐ»Ð¸ÐµÐ½Ñа
+* X-Forwarded-Proto: иÑÑ
однÑй пÑоÑокол (`https`)
+* X-Forwarded-Host: иÑÑ
однÑй Ñ
оÑÑ (`mysuperapp.com`)
+
+Ðогда FastAPI CLI ÑконÑигÑÑиÑован Ñ `--forwarded-allow-ips`, он довеÑÑÐµÑ ÑÑим заголовкам и иÑполÑзÑÐµÑ Ð¸Ñ
, напÑимеÑ, ÑÑÐ¾Ð±Ñ ÑоÑмиÑоваÑÑ ÐºÐ¾ÑÑекÑнÑе URL в ÑедиÑекÑаÑ
.
+
+## ÐÑокÑи Ñ ÑÑнкÑией ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑа пÑÑи { #proxy-with-a-stripped-path-prefix }
+
+ÐÑокÑи Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ðº ваÑÐµÐ¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑеÑÐ¸ÐºÑ Ð¿ÑÑи (ÑазмеÑаÑÑ Ð¿Ñиложение по пÑÑи Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑм пÑеÑикÑом).
+
+Ð ÑакиÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `root_path` Ð´Ð»Ñ Ð½Ð°ÑÑÑойки пÑиложениÑ.
+
+ÐеÑ
анизм `root_path` опÑеделÑн ÑпеÑиÑикаÑией ASGI (на коÑоÑой поÑÑÑоен FastAPI, ÑеÑез Starlette).
+
+`root_path` иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑабоÑки ÑакиÑ
ÑпеÑиÑиÑеÑкиÑ
ÑлÑÑаев.
+
+Ðн Ñакже иÑполÑзÑеÑÑÑ Ð²Ð½ÑÑÑи пÑи монÑиÑовании вложеннÑÑ
пÑиложений.
+
+ÐÑокÑи Ñ ÑÑнкÑией ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑа пÑÑи в ÑÑом ÑлÑÑае ознаÑаеÑ, ÑÑо Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе пÑÑÑ `/app` в коде, а заÑем добавлÑеÑе ÑвеÑÑ
Ñ Ñлой (пÑокÑи), коÑоÑÑй ÑазмеÑÐ°ÐµÑ Ð²Ð°Ñе пÑиложение FastAPI под пÑÑÑм вида `/api/v1`.
+
+Тогда иÑÑ
однÑй пÑÑÑ `/app` ÑакÑиÑеÑки бÑÐ´ÐµÑ Ð¾Ð±ÑлÑживаÑÑÑÑ Ð¿Ð¾ адÑеÑÑ `/api/v1/app`.
+
+ХоÑÑ Ð²ÐµÑÑ Ð²Ð°Ñ ÐºÐ¾Ð´ напиÑан Ñ ÑаÑÑÑÑом, ÑÑо пÑÑÑ Ð¾Ð´Ð¸Ð½ â `/app`.
+
+{* ../../docs_src/behind_a_proxy/tutorial001.py hl[6] *}
+
+ÐÑокÑи бÑÐ´ÐµÑ Â«Ð¾Ð±ÑезаÑÑ» пÑеÑÐ¸ÐºÑ Ð¿ÑÑи на леÑÑ Ð¿ÐµÑед пеÑедаÑей запÑоÑа на ÑеÑÐ²ÐµÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (ÑкоÑее вÑего Uvicorn, запÑÑеннÑй ÑеÑез FastAPI CLI), поддеÑÐ¶Ð¸Ð²Ð°Ñ Ñ Ð²Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð»ÑзиÑ, ÑÑо его обÑлÑживаÑÑ Ð¿Ð¾ `/app`, ÑÑÐ¾Ð±Ñ Ð²Ð°Ð¼ не пÑиÑлоÑÑ Ð¼ÐµÐ½ÑÑÑ Ð²ÐµÑÑ ÐºÐ¾Ð´ и добавлÑÑÑ Ð¿ÑеÑÐ¸ÐºÑ `/api/v1`.
+
+Ðо ÑÑого моменÑа вÑÑ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ ÐºÐ°Ðº обÑÑно.
+
+Ðо когда Ð²Ñ Ð¾ÑкÑоеÑе вÑÑÑоеннÑй инÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии (ÑÑонÑенд), он бÑÐ´ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI по адÑеÑÑ `/openapi.json`, а не `/api/v1/openapi.json`.
+
+ÐоÑÑÐ¾Ð¼Ñ ÑÑонÑенд (коÑоÑÑй ÑабоÑÐ°ÐµÑ Ð² бÑаÑзеÑе) попÑÑаеÑÑÑ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº `/openapi.json` и не ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI.
+
+Так как Ð´Ð»Ñ Ð½Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð¿ÑокÑи Ñ Ð¿ÑеÑикÑом пÑÑи `/api/v1`, ÑÑонÑÐµÐ½Ð´Ñ Ð½Ñжно забиÑаÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI по `/api/v1/openapi.json`.
+
+```mermaid
+graph LR
+
+browser("Browser")
+proxy["Proxy on http://0.0.0.0:9999/api/v1/app"]
+server["Server on http://127.0.0.1:8000/app"]
+
+browser --> proxy
+proxy --> server
+```
+
+/// tip | СовеÑ
+
+IP `0.0.0.0` обÑÑно ознаÑаеÑ, ÑÑо пÑогÑамма ÑлÑÑÐ°ÐµÑ Ð½Ð° вÑеÑ
IPâадÑеÑаÑ
, доÑÑÑпнÑÑ
на ÑÑой маÑине/ÑеÑвеÑе.
+
+///
+
+ÐнÑеÑÑейÑÑ Ð´Ð¾ÐºÑменÑаÑии Ñакже нÑжна ÑÑ
ема OpenAPI, в коÑоÑой бÑÐ´ÐµÑ Ñказано, ÑÑо ÑÑÐ¾Ñ API `server` наÑ
одиÑÑÑ Ð¿Ð¾ пÑÑи `/api/v1` (за пÑокÑи). ÐапÑимеÑ:
+
+```JSON hl_lines="4-8"
+{
+ "openapi": "3.1.0",
+ // ÐдеÑÑ ÐµÑÑ ÑÑо-Ñо
+ "servers": [
+ {
+ "url": "/api/v1"
+ }
+ ],
+ "paths": {
+ // ÐдеÑÑ ÐµÑÑ ÑÑо-Ñо
+ }
+}
+```
+
+Ð ÑÑом пÑимеÑе «Proxy» Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ, напÑимеÑ, Traefik. Ð ÑеÑвеÑом бÑÐ´ÐµÑ ÑÑоâÑо вÑоде FastAPI CLI Ñ Uvicorn, на коÑоÑом запÑÑено ваÑе пÑиложение FastAPI.
+
+### Указание `root_path` { #providing-the-root-path }
+
+ÐÐ»Ñ ÑÑого иÑполÑзÑйÑе опÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--root-path`, напÑÐ¸Ð¼ÐµÑ Ñак:
+
+
+
+```console
+$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе Hypercorn, Ñ Ð½ÐµÐ³Ð¾ Ñоже еÑÑÑ Ð¾Ð¿ÑÐ¸Ñ `--root-path`.
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+СпеÑиÑикаÑÐ¸Ñ ASGI опÑеделÑÐµÑ `root_path` Ð´Ð»Ñ Ñакого ÑлÑÑаÑ.
+
+РопÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--root-path` пеÑедаÑÑ ÑÑÐ¾Ñ `root_path`.
+
+///
+
+### ÐÑовеÑка ÑекÑÑего `root_path` { #checking-the-current-root-path }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ ÑекÑÑий `root_path`, иÑполÑзÑемÑй ваÑим пÑиложением Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ запÑоÑа, â он вÑ
Ð¾Ð´Ð¸Ñ Ð² ÑловаÑÑ `scope` (ÑаÑÑÑ ÑпеÑиÑикаÑии ASGI).
+
+ÐдеÑÑ Ð¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð»Ñем его в ÑообÑение лиÑÑ Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑаÑии.
+
+{* ../../docs_src/behind_a_proxy/tutorial001.py hl[8] *}
+
+ÐаÑем, еÑли Ð²Ñ Ð·Ð°Ð¿ÑÑÑиÑе Uvicorn Ñак:
+
+
+
+```console
+$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+ÐÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¿ÑимеÑно Ñаким:
+
+```JSON
+{
+ "message": "Hello World",
+ "root_path": "/api/v1"
+}
+```
+
+### УÑÑановка `root_path` в пÑиложении FastAPI { #setting-the-root-path-in-the-fastapi-app }
+
+ÐÑли Ð½ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи пеÑедаÑÑ Ð¾Ð¿ÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--root-path` (или аналог), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ Ð¿Ð°ÑамеÑÑ `root_path` пÑи Ñоздании пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI:
+
+{* ../../docs_src/behind_a_proxy/tutorial002.py hl[3] *}
+
+ÐеÑедаÑа `root_path` в `FastAPI` ÑквиваленÑна опÑии командной ÑÑÑоки `--root-path` Ð´Ð»Ñ Uvicorn или Hypercorn.
+
+### Ð `root_path` { #about-root-path }
+
+УÑÑиÑе, ÑÑо ÑеÑÐ²ÐµÑ (Uvicorn) не иÑполÑзÑÐµÑ `root_path` ни Ð´Ð»Ñ Ñего, кÑоме как пеÑедаÑÑ ÐµÐ³Ð¾ в пÑиложение.
+
+ÐÑли Ð²Ñ Ð¾ÑкÑоеÑе в бÑаÑзеÑе http://127.0.0.1:8000/app, Ð²Ñ ÑвидиÑе обÑÑнÑй оÑвеÑ:
+
+```JSON
+{
+ "message": "Hello World",
+ "root_path": "/api/v1"
+}
+```
+
+То еÑÑÑ Ð¾Ð½ не ожидаеÑ, ÑÑо к Ð½ÐµÐ¼Ñ Ð¾Ð±ÑаÑÑÑÑÑ Ð¿Ð¾ адÑеÑÑ `http://127.0.0.1:8000/api/v1/app`.
+
+Uvicorn ожидаеÑ, ÑÑо пÑокÑи обÑаÑиÑÑÑ Ðº Ð½ÐµÐ¼Ñ Ð¿Ð¾ `http://127.0.0.1:8000/app`, а Ñже задаÑа пÑокÑи â добавиÑÑ ÑвеÑÑ
Ñ Ð¿ÑеÑÐ¸ÐºÑ `/api/v1`.
+
+## РпÑокÑи Ñ ÑÑезаннÑм пÑеÑикÑом пÑÑи { #about-proxies-with-a-stripped-path-prefix }
+
+ÐомниÑе, ÑÑо пÑокÑи Ñ ÑÑезаннÑм пÑеÑикÑом пÑÑи â лиÑÑ Ð¾Ð´Ð¸Ð½ из ваÑианÑов наÑÑÑойки.
+
+Ðо многиÑ
ÑлÑÑаÑÑ
по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑокÑи бÑÐ´ÐµÑ Ð±ÐµÐ· ÑÑезанного пÑеÑикÑа пÑÑи.
+
+Ð Ñаком ÑлÑÑае (без ÑÑезанного пÑеÑикÑа) пÑокÑи ÑлÑÑаеÑ, напÑимеÑ, по адÑеÑÑ `https://myawesomeapp.com`, и еÑли бÑаÑÐ·ÐµÑ Ð¸Ð´ÑÑ Ð½Ð° `https://myawesomeapp.com/api/v1/app`, а Ð²Ð°Ñ ÑеÑÐ²ÐµÑ (напÑимеÑ, Uvicorn) ÑлÑÑÐ°ÐµÑ Ð½Ð° `http://127.0.0.1:8000`, Ñо пÑокÑи (без ÑÑезанного пÑеÑикÑа) обÑаÑиÑÑÑ Ðº Uvicorn по ÑÐ¾Ð¼Ñ Ð¶Ðµ пÑÑи: `http://127.0.0.1:8000/api/v1/app`.
+
+## ÐокалÑное ÑеÑÑиÑование Ñ Traefik { #testing-locally-with-traefik }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе легко поÑкÑпеÑименÑиÑоваÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно Ñ ÑÑезаннÑм пÑеÑикÑом пÑÑи, иÑполÑзÑÑ Traefik.
+
+СкаÑайÑе Traefik â ÑÑо один бинаÑнÑй Ñайл; ÑаÑпакÑйÑе аÑÑ
ив и запÑÑÑиÑе его пÑÑмо из ÑеÑминала.
+
+ÐаÑем ÑоздайÑе Ñайл `traefik.toml` Ñо ÑледÑÑÑим ÑодеÑжимÑм:
+
+```TOML hl_lines="3"
+[entryPoints]
+ [entryPoints.http]
+ address = ":9999"
+
+[providers]
+ [providers.file]
+ filename = "routes.toml"
+```
+
+ÐÑо говоÑÐ¸Ñ Traefik ÑлÑÑаÑÑ Ð¿Ð¾ÑÑ 9999 и иÑполÑзоваÑÑ Ð´ÑÑгой Ñайл `routes.toml`.
+
+/// tip | СовеÑ
+
+ÐÑ Ð¸ÑполÑзÑем поÑÑ 9999 вмеÑÑо ÑÑандаÑÑного HTTPâпоÑÑа 80, ÑÑÐ¾Ð±Ñ Ð½Ðµ нÑжно бÑло запÑÑкаÑÑ Ñ Ð¿Ñавами админиÑÑÑаÑоÑа (`sudo`).
+
+///
+
+ТепеÑÑ ÑоздайÑе вÑоÑой Ñайл `routes.toml`:
+
+```TOML hl_lines="5 12 20"
+[http]
+ [http.middlewares]
+
+ [http.middlewares.api-stripprefix.stripPrefix]
+ prefixes = ["/api/v1"]
+
+ [http.routers]
+
+ [http.routers.app-http]
+ entryPoints = ["http"]
+ service = "app"
+ rule = "PathPrefix(`/api/v1`)"
+ middlewares = ["api-stripprefix"]
+
+ [http.services]
+
+ [http.services.app]
+ [http.services.app.loadBalancer]
+ [[http.services.app.loadBalancer.servers]]
+ url = "http://127.0.0.1:8000"
+```
+
+ÐÑÐ¾Ñ Ñайл наÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Traefik на иÑполÑзование пÑеÑикÑа пÑÑи `/api/v1`.
+
+Ðалее Traefik бÑÐ´ÐµÑ Ð¿ÑокÑиÑоваÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð½Ð° Ð²Ð°Ñ Uvicorn, ÑабоÑаÑÑий на `http://127.0.0.1:8000`.
+
+ТепеÑÑ Ð·Ð°Ð¿ÑÑÑиÑе Traefik:
+
+
+
+```console
+$ ./traefik --configFile=traefik.toml
+
+INFO[0000] Configuration loaded from file: /home/user/awesomeapi/traefik.toml
+```
+
+
+
+РзапÑÑÑиÑе пÑиложение Ñ Ð¾Ð¿Ñией `--root-path`:
+
+
+
+```console
+$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+### ÐÑовеÑÑÑе оÑвеÑÑ { #check-the-responses }
+
+ТепеÑÑ, еÑли Ð²Ñ Ð¿ÐµÑейдÑÑе на URL Ñ Ð¿Ð¾ÑÑом Uvicorn: http://127.0.0.1:8000/app, Ð²Ñ ÑвидиÑе обÑÑнÑй оÑвеÑ:
+
+```JSON
+{
+ "message": "Hello World",
+ "root_path": "/api/v1"
+}
+```
+
+/// tip | СовеÑ
+
+ÐбÑаÑиÑе внимание, ÑÑо Ñ
оÑÑ Ð²Ñ Ð¾Ð±ÑаÑаеÑеÑÑ Ð¿Ð¾ `http://127.0.0.1:8000/app`, в оÑвеÑе Ñказан `root_path` ÑавнÑй `/api/v1`, взÑÑÑй из опÑии `--root-path`.
+
+///
+
+Ð ÑепеÑÑ Ð¾ÑкÑойÑе URL Ñ Ð¿Ð¾ÑÑом Traefik и пÑеÑикÑом пÑÑи: http://127.0.0.1:9999/api/v1/app.
+
+ÐÑ Ð¿Ð¾Ð»ÑÑим ÑÐ¾Ñ Ð¶Ðµ оÑвеÑ:
+
+```JSON
+{
+ "message": "Hello World",
+ "root_path": "/api/v1"
+}
+```
+
+но Ñже по URL Ñ Ð¿ÑеÑикÑом, коÑоÑÑй добавлÑÐµÑ Ð¿ÑокÑи: `/api/v1`.
+
+РазÑмееÑÑÑ, задÑмÑваеÑÑÑ, ÑÑо вÑе бÑдÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑеÑез пÑокÑи, поÑÑÐ¾Ð¼Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ñ Ð¿ÑеÑикÑом пÑÑи `/api/v1` ÑвлÑеÑÑÑ Â«Ð¿ÑавилÑнÑм».
+
+РваÑÐ¸Ð°Ð½Ñ Ð±ÐµÐ· пÑеÑикÑа (`http://127.0.0.1:8000/app`), вÑдаваемÑй напÑÑмÑÑ Uvicorn, пÑедназнаÑен иÑклÑÑиÑелÑно Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿ÑокÑи (Traefik) мог к Ð½ÐµÐ¼Ñ Ð¾Ð±ÑаÑаÑÑÑÑ.
+
+ÐÑо демонÑÑÑиÑÑеÑ, как пÑокÑи (Traefik) иÑполÑзÑÐµÑ Ð¿ÑеÑÐ¸ÐºÑ Ð¿ÑÑи и как ÑеÑÐ²ÐµÑ (Uvicorn) иÑполÑзÑÐµÑ `root_path`, пеÑеданнÑй ÑеÑез опÑÐ¸Ñ `--root-path`.
+
+### ÐÑовеÑÑÑе инÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии { #check-the-docs-ui }
+
+Ð Ð²Ð¾Ñ Ñамое инÑеÑеÑное. â¨
+
+«ÐÑиÑиалÑнÑй» ÑпоÑоб доÑÑÑпа к пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â ÑеÑез пÑокÑи Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм пÑеÑикÑом пÑÑи. ÐоÑÑомÑ, как и ожидаеÑÑÑ, еÑли оÑкÑÑÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии, оÑдаваемÑй напÑÑмÑÑ Uvicorn, без пÑеÑикÑа пÑÑи в URL, он не бÑÐ´ÐµÑ ÑабоÑаÑÑ, Ñак как пÑедполагаеÑÑÑ Ð´Ð¾ÑÑÑп ÑеÑез пÑокÑи.
+
+ÐÑовеÑÑÑе по адÑеÑÑ http://127.0.0.1:8000/docs:
+
+
+
+Ð Ð²Ð¾Ñ ÐµÑли оÑкÑÑÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии по «оÑиÑиалÑномÑ» URL ÑеÑез пÑокÑи на поÑÑÑ `9999`, по `/api/v1/docs`, вÑÑ ÑабоÑÐ°ÐµÑ ÐºÐ¾ÑÑекÑно! ð
+
+ÐÑовеÑÑÑе по адÑеÑÑ http://127.0.0.1:9999/api/v1/docs:
+
+
+
+Ðменно как и Ñ
оÑелоÑÑ. âï¸
+
+ÐÑо поÑомÑ, ÑÑо FastAPI иÑполÑзÑÐµÑ `root_path`, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ Ð² OpenAPI ÑеÑÐ²ÐµÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ñ URL из `root_path`.
+
+## ÐополниÑелÑнÑе ÑеÑвеÑÑ { #additional-servers }
+
+/// warning | ÐÑедÑпÑеждение
+
+ÐÑо более пÑодвинÑÑÑй ÑÑенаÑий. Ðожно пÑопÑÑÑиÑÑ.
+
+///
+
+Ðо ÑмолÑÐ°Ð½Ð¸Ñ FastAPI ÑоздаÑÑ Ð² ÑÑ
еме OpenAPI `server` Ñ URL из `root_path`.
+
+Ðо Ð²Ñ Ñакже можеÑе ÑказаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе `servers`, напÑимеÑ, еÑли Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ инÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии ÑабоÑал и Ñо ÑÑейджингом, и Ñ Ð¿ÑодакÑн.
+
+ÐÑли Ð²Ñ Ð¿ÐµÑедадиÑе Ñвой ÑпиÑок `servers` и пÑи ÑÑом задан `root_path` (поÑÐ¾Ð¼Ñ ÑÑо Ð²Ð°Ñ API ÑабоÑÐ°ÐµÑ Ð·Ð° пÑокÑи), FastAPI вÑÑÐ°Ð²Ð¸Ñ Â«server» Ñ ÑÑим `root_path` в наÑало ÑпиÑка.
+
+ÐапÑимеÑ:
+
+{* ../../docs_src/behind_a_proxy/tutorial003.py hl[4:7] *}
+
+ÐÑÐ´ÐµÑ ÑгенеÑиÑована ÑÑ
ема OpenAPI пÑимеÑно ÑакаÑ:
+
+```JSON hl_lines="5-7"
+{
+ "openapi": "3.1.0",
+ // ÐдеÑÑ ÐµÑÑ ÑÑо-Ñо
+ "servers": [
+ {
+ "url": "/api/v1"
+ },
+ {
+ "url": "https://stag.example.com",
+ "description": "Staging environment"
+ },
+ {
+ "url": "https://prod.example.com",
+ "description": "Production environment"
+ }
+ ],
+ "paths": {
+ // ÐдеÑÑ ÐµÑÑ ÑÑо-Ñо
+ }
+}
+```
+
+/// tip | СовеÑ
+
+ÐбÑаÑиÑе внимание на авÑомаÑиÑеÑки добавленнÑй ÑеÑÐ²ÐµÑ Ñ `url` ÑавнÑм `/api/v1`, взÑÑÑм из `root_path`.
+
+///
+
+РинÑеÑÑейÑе докÑменÑаÑии по адÑеÑÑ http://127.0.0.1:9999/api/v1/docs ÑÑо бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
+
+
+
+/// tip | СовеÑ
+
+ÐнÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии бÑÐ´ÐµÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑвоваÑÑ Ñ ÑеÑвеÑом, коÑоÑÑй Ð²Ñ Ð²ÑбеÑеÑе.
+
+///
+
+### ÐÑклÑÑиÑÑ Ð°Ð²ÑомаÑиÑеÑкое добавление ÑеÑвеÑа из `root_path` { #disable-automatic-server-from-root-path }
+
+ÐÑли Ð²Ñ Ð½Ðµ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ FastAPI добавлÑл авÑомаÑиÑеÑкий ÑеÑвеÑ, иÑполÑзÑÑ `root_path`, ÑкажиÑе паÑамеÑÑ `root_path_in_servers=False`:
+
+{* ../../docs_src/behind_a_proxy/tutorial004.py hl[9] *}
+
+и Ñогда ÑÑÐ¾Ñ ÑеÑÐ²ÐµÑ Ð½Ðµ бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ в ÑÑ
ÐµÐ¼Ñ OpenAPI.
+
+## ÐонÑиÑование вложенного пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ { #mounting-a-sub-application }
+
+ÐÑли вам нÑжно ÑмонÑиÑоваÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ðµ пÑиложение (как опиÑано в [ÐложеннÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â монÑиÑование](sub-applications.md){.internal-link target=_blank}), и пÑи ÑÑом Ð²Ñ Ð¸ÑполÑзÑеÑе пÑокÑи Ñ `root_path`, делайÑе ÑÑо обÑÑнÑм обÑазом â вÑÑ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ, как ожидаеÑÑÑ.
+
+FastAPI Ñмно иÑполÑзÑÐµÑ `root_path` внÑÑÑи, Ñак ÑÑо вÑÑ Ð¿ÑоÑÑо ÑабоÑаеÑ. â¨
diff --git a/docs/ru/docs/advanced/custom-response.md b/docs/ru/docs/advanced/custom-response.md
new file mode 100644
index 000000000..2c238bd95
--- /dev/null
+++ b/docs/ru/docs/advanced/custom-response.md
@@ -0,0 +1,312 @@
+# ÐаÑÑомнÑе оÑвеÑÑ â HTML, поÑок, Ñайл и дÑÑгие { #custom-response-html-stream-file-others }
+
+Ðо ÑмолÑÐ°Ð½Ð¸Ñ **FastAPI** возвÑаÑÐ°ÐµÑ Ð¾ÑвеÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `JSONResponse`.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеопÑеделиÑÑ ÑÑо, веÑнÑв `Response` напÑÑмÑÑ, как показано в Ñазделе [ÐеÑнÑÑÑ Response напÑÑмÑÑ](response-directly.md){.internal-link target=_blank}.
+
+Ðо еÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе `Response` напÑÑмÑÑ (или лÑбой его подклаÑÑ, напÑÐ¸Ð¼ÐµÑ `JSONResponse`), даннÑе не бÑдÑÑ Ð°Ð²ÑомаÑиÑеÑки пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ (даже еÑли Ð²Ñ Ð¾Ð±ÑÑвили `response_model`), и докÑменÑаÑÐ¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки ÑгенеÑиÑована (напÑимеÑ, Ñо ÑпеÑиÑиÑнÑм «Ñипом ÑодеÑжимого» в HTTP-заголовке `Content-Type` как ÑаÑÑÑÑ ÑгенеÑиÑованного OpenAPI).
+
+Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе Ñакже обÑÑвиÑÑ `Response`, коÑоÑÑй Ñ
оÑиÑе иÑполÑзоваÑÑ (напÑимеÑ, лÑбой подклаÑÑ `Response`), в декоÑаÑоÑе опеÑаÑии пÑÑи, иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑ `response_class`.
+
+СодеÑжимое, коÑоÑое Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе из Ñвоей ÑÑнкÑии-обÑабоÑÑика пÑÑи, бÑÐ´ÐµÑ Ð¿Ð¾Ð¼ÐµÑено внÑÑÑÑ ÑÑого `Response`.
+
+РеÑли Ñ ÑÑого `Response` Ñип ÑодеÑжимого JSON (`application/json`), как в ÑлÑÑае Ñ `JSONResponse` и `UJSONResponse`, даннÑе, коÑоÑÑе Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе, бÑдÑÑ Ð°Ð²ÑомаÑиÑеÑки пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ (и оÑÑилÑÑÑованÑ) лÑбÑм обÑÑвленнÑм вами в декоÑаÑоÑе опеÑаÑии пÑÑи Pydantic `response_model`.
+
+/// note | ÐÑимеÑание
+
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе клаÑÑ Ð¾ÑвеÑа без Ñипа ÑодеÑжимого, FastAPI бÑÐ´ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ, ÑÑо Ñ Ð²Ð°Ñего оÑвеÑа Ð½ÐµÑ ÑодеÑжимого, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ не бÑÐ´ÐµÑ Ð´Ð¾ÐºÑменÑиÑоваÑÑ ÑоÑÐ¼Ð°Ñ Ð¾ÑвеÑа в ÑгенеÑиÑованной докÑменÑаÑии OpenAPI.
+
+///
+
+## ÐÑполÑзÑйÑе `ORJSONResponse` { #use-orjsonresponse }
+
+ÐапÑимеÑ, еÑли Ð²Ñ Ð²ÑжимаеÑе макÑимÑм пÑоизводиÑелÑноÑÑи, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ Ð¸ иÑполÑзоваÑÑ `orjson` и задаÑÑ Ð¾ÑÐ²ÐµÑ ÐºÐ°Ðº `ORJSONResponse`.
+
+ÐмпоÑÑиÑÑйÑе клаÑÑ (подклаÑÑ) `Response`, коÑоÑÑй Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ, и обÑÑвиÑе его в декоÑаÑоÑе опеÑаÑии пÑÑи.
+
+ÐÐ»Ñ Ð±Ð¾Ð»ÑÑиÑ
оÑвеÑов возвÑаÑаÑÑ `Response` напÑÑмÑÑ Ð·Ð½Ð°ÑиÑелÑно бÑÑÑÑее, Ñем возвÑаÑаÑÑ ÑловаÑÑ.
+
+ÐÑо поÑомÑ, ÑÑо по ÑмолÑÐ°Ð½Ð¸Ñ FastAPI пÑовеÑÑÐµÑ ÐºÐ°Ð¶Ð´Ñй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð²Ð½ÑÑÑи и ÑбеждаеÑÑÑ, ÑÑо он ÑеÑиализÑем в JSON, иÑполÑзÑÑ ÑÐ¾Ñ Ð¶Ðµ [JSON Compatible Encoder](../tutorial/encoder.md){.internal-link target=_blank}, обÑÑÑнÑннÑй в ÑÑководÑÑве. ÐÑо позволÑÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ **пÑоизволÑнÑе обÑекÑÑ**, напÑÐ¸Ð¼ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ из Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
+
+Ðо еÑли Ð²Ñ ÑвеÑенÑ, ÑÑо ÑодеÑжимое, коÑоÑое Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе, **ÑеÑиализÑемо в JSON**, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑедаÑÑ ÐµÐ³Ð¾ напÑÑмÑÑ Ð² клаÑÑ Ð¾ÑвеÑа и избежаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ
накладнÑÑ
ÑаÑÑ
одов, коÑоÑÑе FastAPI понÑÑ Ð±Ñ, пÑопÑÑÐºÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑаемое ÑодеÑжимое ÑеÑез `jsonable_encoder` пеÑед пеÑедаÑей в клаÑÑ Ð¾ÑвеÑа.
+
+{* ../../docs_src/custom_response/tutorial001b.py hl[2,7] *}
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐаÑамеÑÑ `response_class` Ñакже иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Â«Ñипа ÑодеÑжимого» оÑвеÑа.
+
+Ð ÑÑом ÑлÑÑае HTTP-заголовок `Content-Type` бÑÐ´ÐµÑ ÑÑÑановлен в `application/json`.
+
+Ð ÑÑо бÑÐ´ÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑовано как Ñаковое в OpenAPI.
+
+///
+
+/// tip | СовеÑ
+
+`ORJSONResponse` доÑÑÑпен ÑолÑко в FastAPI, а не в Starlette.
+
+///
+
+## HTML-оÑÐ²ÐµÑ { #html-response }
+
+ЧÑÐ¾Ð±Ñ Ð²ÐµÑнÑÑÑ Ð¾ÑÐ²ÐµÑ Ñ HTML напÑÑмÑÑ Ð¸Ð· **FastAPI**, иÑполÑзÑйÑе `HTMLResponse`.
+
+- ÐмпоÑÑиÑÑйÑе `HTMLResponse`.
+- ÐеÑедайÑе `HTMLResponse` в паÑамеÑÑ `response_class` ваÑего декоÑаÑоÑа опеÑаÑии пÑÑи.
+
+{* ../../docs_src/custom_response/tutorial002.py hl[2,7] *}
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐаÑамеÑÑ `response_class` Ñакже иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Â«Ñипа ÑодеÑжимого» оÑвеÑа.
+
+Ð ÑÑом ÑлÑÑае HTTP-заголовок `Content-Type` бÑÐ´ÐµÑ ÑÑÑановлен в `text/html`.
+
+Ð ÑÑо бÑÐ´ÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑовано как Ñаковое в OpenAPI.
+
+///
+
+### ÐеÑнÑÑÑ `Response` { #return-a-response }
+
+Ðак показано в Ñазделе [ÐеÑнÑÑÑ Response напÑÑмÑÑ](response-directly.md){.internal-link target=_blank}, Ð²Ñ Ñакже можеÑе пеÑеопÑеделиÑÑ Ð¾ÑÐ²ÐµÑ Ð¿ÑÑмо в Ñвоей опеÑаÑии пÑÑи, пÑоÑÑо веÑнÑв его.
+
+Ð¢Ð¾Ñ Ð¶Ðµ пÑÐ¸Ð¼ÐµÑ ÑвеÑÑ
Ñ, возвÑаÑаÑÑий `HTMLResponse`, Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
+
+{* ../../docs_src/custom_response/tutorial003.py hl[2,7,19] *}
+
+/// warning | ÐÑедÑпÑеждение
+
+`Response`, возвÑаÑÑннÑй напÑÑмÑÑ Ð²Ð°Ñей ÑÑнкÑией-обÑабоÑÑиком пÑÑи, не бÑÐ´ÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑован в OpenAPI (напÑимеÑ, `Content-Type` нне бÑÐ´ÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑова) и не бÑÐ´ÐµÑ Ð²Ð¸Ð´ÐµÐ½ в авÑомаÑиÑеÑки ÑгенеÑиÑованной инÑеÑакÑивной докÑменÑаÑии.
+
+///
+
+/// info | ÐнÑоÑмаÑиÑ
+
+РазÑмееÑÑÑ, ÑакÑиÑеÑкие заголовок `Content-Type`, ÑÑаÑÑÑ-код и Ñ.д. возÑмÑÑÑÑ Ð¸Ð· обÑекÑа `Response`, коÑоÑÑй Ð²Ñ Ð²ÐµÑнÑли.
+
+///
+
+### ÐадокÑменÑиÑоваÑÑ Ð² OpenAPI и пеÑеопÑеделиÑÑ `Response` { #document-in-openapi-and-override-response }
+
+ÐÑли Ð²Ñ Ñ
оÑиÑе пеÑеопÑеделиÑÑ Ð¾ÑÐ²ÐµÑ Ð²Ð½ÑÑÑи ÑÑнкÑии, но пÑи ÑÑом задокÑменÑиÑоваÑÑ Â«Ñип ÑодеÑжимого» в OpenAPI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `response_class` РвеÑнÑÑÑ Ð¾Ð±ÑÐµÐºÑ `Response`.
+
+Тогда `response_class` бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ *опеÑаÑии пÑÑи* в OpenAPI, а Ð²Ð°Ñ `Response` бÑÐ´ÐµÑ Ð¸ÑполÑзован как еÑÑÑ.
+
+#### ÐеÑнÑÑÑ `HTMLResponse` напÑÑмÑÑ { #return-an-htmlresponse-directly }
+
+ÐапÑимеÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑо-Ñо вÑоде:
+
+{* ../../docs_src/custom_response/tutorial004.py hl[7,21,23] *}
+
+Ð ÑÑом пÑимеÑе ÑÑнкÑÐ¸Ñ `generate_html_response()` Ñже генеÑиÑÑÐµÑ Ð¸ возвÑаÑÐ°ÐµÑ `Response` вмеÑÑо возвÑаÑа HTML в `str`.
+
+ÐозвÑаÑÐ°Ñ ÑезÑлÑÑÐ°Ñ Ð²Ñзова `generate_html_response()`, Ð²Ñ Ñже возвÑаÑаеÑе `Response`, коÑоÑÑй пеÑеопÑÐµÐ´ÐµÐ»Ð¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ **FastAPI** по ÑмолÑаниÑ.
+
+Ðо поÑколÑÐºÑ Ð²Ñ Ñакже пеÑедали `HTMLResponse` в `response_class`, **FastAPI** бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, как задокÑменÑиÑоваÑÑ ÑÑо в OpenAPI и инÑеÑакÑивной докÑменÑаÑии как HTML Ñ `text/html`:
+
+
+
+## ÐоÑÑÑпнÑе оÑвеÑÑ { #available-responses }
+
+Ðиже пеÑеÑиÑÐ»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе доÑÑÑпнÑе клаÑÑÑ Ð¾ÑвеÑов.
+
+УÑÑиÑе, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `Response`, ÑÑÐ¾Ð±Ñ Ð²ÐµÑнÑÑÑ ÑÑо Ñгодно еÑÑ, или даже ÑоздаÑÑ ÑобÑÑвеннÑй подклаÑÑ.
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+ÐÑ Ñакже могли Ð±Ñ Ð¸ÑполÑзоваÑÑ `from starlette.responses import HTMLResponse`.
+
+**FastAPI** пÑедоÑÑавлÑÐµÑ Ñе же `starlette.responses` как `fastapi.responses` Ð´Ð»Ñ Ð²Ð°Ñего ÑдобÑÑва как ÑазÑабоÑÑика. Ðо болÑÑинÑÑво доÑÑÑпнÑÑ
клаÑÑов оÑвеÑов пÑиÑ
одÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно из Starlette.
+
+///
+
+### `Response` { #response }
+
+ÐазовÑй клаÑÑ `Response`, Ð¾Ñ Ð½ÐµÐ³Ð¾ наÑледÑÑÑÑÑ Ð²Ñе оÑÑалÑнÑе оÑвеÑÑ.
+
+Ðго можно возвÑаÑаÑÑ Ð½Ð°Ð¿ÑÑмÑÑ.
+
+Ðн пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие паÑамеÑÑÑ:
+
+- `content` â `str` или `bytes`.
+- `status_code` â Ñелое ÑиÑло, HTTP ÑÑаÑÑÑ-код.
+- `headers` â ÑловаÑÑ ÑÑÑок.
+- `media_type` â ÑÑÑока, задаÑÑÐ°Ñ Ñип ÑодеÑжимого. ÐапÑимеÑ, `"text/html"`.
+
+FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Content-Length. Также бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ заголовок Content-Type, оÑнованнÑй на `media_type` и Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ charset Ð´Ð»Ñ ÑекÑÑовÑÑ
Ñипов.
+
+{* ../../docs_src/response_directly/tutorial002.py hl[1,18] *}
+
+### `HTMLResponse` { #htmlresponse }
+
+ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑекÑÑ Ð¸Ð»Ð¸ байÑÑ Ð¸ возвÑаÑÐ°ÐµÑ HTML-оÑвеÑ, как опиÑано вÑÑе.
+
+### `PlainTextResponse` { #plaintextresponse }
+
+ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑекÑÑ Ð¸Ð»Ð¸ байÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð¾ÑÐ²ÐµÑ Ð² виде пÑоÑÑого ÑекÑÑа.
+
+{* ../../docs_src/custom_response/tutorial005.py hl[2,7,9] *}
+
+### `JSONResponse` { #jsonresponse }
+
+ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð°Ð½Ð½Ñе и возвÑаÑÐ°ÐµÑ Ð¾ÑвеÑ, кодиÑованнÑй как `application/json`.
+
+ÐÑо оÑÐ²ÐµÑ Ð¿Ð¾ ÑмолÑаниÑ, иÑполÑзÑемÑй в **FastAPI**, как бÑло Ñказано вÑÑе.
+
+### `ORJSONResponse` { #orjsonresponse }
+
+ÐÑÑÑÑÐ°Ñ Ð°Ð»ÑÑеÑнаÑÐ¸Ð²Ð½Ð°Ñ ÑеализаÑÐ¸Ñ JSON-оÑвеÑа Ñ Ð¸ÑполÑзованием `orjson`, как бÑло Ñказано вÑÑе.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ТÑебÑеÑÑÑ ÑÑÑановка `orjson`, напÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ `pip install orjson`.
+
+///
+
+### `UJSONResponse` { #ujsonresponse }
+
+ÐлÑÑеÑнаÑÐ¸Ð²Ð½Ð°Ñ ÑеализаÑÐ¸Ñ JSON-оÑвеÑа Ñ Ð¸ÑполÑзованием `ujson`.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ТÑебÑеÑÑÑ ÑÑÑановка `ujson`, напÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ `pip install ujson`.
+
+///
+
+/// warning | ÐÑедÑпÑеждение
+
+`ujson` менее аккÑÑаÑен, Ñем вÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ ÑеализаÑÐ¸Ñ Python, в обÑабоÑке некоÑоÑÑÑ
кÑайниÑ
ÑлÑÑаев.
+
+///
+
+{* ../../docs_src/custom_response/tutorial001.py hl[2,7] *}
+
+/// tip | СовеÑ
+
+Ðозможно, `ORJSONResponse` окажеÑÑÑ Ð±Ð¾Ð»ÐµÐµ бÑÑÑÑÑм ваÑианÑом.
+
+///
+
+### `RedirectResponse` { #redirectresponse }
+
+ÐозвÑаÑÐ°ÐµÑ HTTP-ÑедиÑекÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑÐµÑ ÑÑаÑÑÑ-код 307 (Temporary Redirect â вÑеменное пеÑенапÑавление).
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе веÑнÑÑÑ `RedirectResponse` напÑÑмÑÑ:
+
+{* ../../docs_src/custom_response/tutorial006.py hl[2,9] *}
+
+---
+
+Ðли можно иÑполÑзоваÑÑ ÐµÐ³Ð¾ в паÑамеÑÑе `response_class`:
+
+{* ../../docs_src/custom_response/tutorial006b.py hl[2,7,9] *}
+
+ÐÑли Ð²Ñ ÑделаеÑе Ñак, Ñо ÑможеÑе возвÑаÑаÑÑ URL напÑÑмÑÑ Ð¸Ð· Ñвоей ÑÑнкÑии-обÑабоÑÑика пÑÑи.
+
+Ð ÑÑом ÑлÑÑае бÑÐ´ÐµÑ Ð¸ÑполÑзован ÑÑаÑÑÑ-код по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ `RedirectResponse`, Ñо еÑÑÑ `307`.
+
+---
+
+Также Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `status_code` в ÑоÑеÑании Ñ Ð¿Ð°ÑамеÑÑом `response_class`:
+
+{* ../../docs_src/custom_response/tutorial006c.py hl[2,7,9] *}
+
+### `StreamingResponse` { #streamingresponse }
+
+ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð°ÑинÑ
ÑоннÑй генеÑаÑÐ¾Ñ Ð¸Ð»Ð¸ обÑÑнÑй генеÑаÑоÑ/иÑеÑаÑÐ¾Ñ Ð¸ оÑпÑавлÑÐµÑ Ñело оÑвеÑа поÑоково.
+
+{* ../../docs_src/custom_response/tutorial007.py hl[2,14] *}
+
+#### ÐÑполÑзование `StreamingResponse` Ñ ÑайлоподобнÑми обÑекÑами { #using-streamingresponse-with-file-like-objects }
+
+ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑайлоподобнÑй обÑÐµÐºÑ (напÑимеÑ, обÑекÑ, возвÑаÑаемÑй `open()`), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ ÑÑнкÑиÑ-генеÑаÑÐ¾Ñ Ð´Ð»Ñ Ð¸ÑеÑаÑии по ÑÑÐ¾Ð¼Ñ ÑÐ°Ð¹Ð»Ð¾Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ.
+
+Таким обÑазом, вам не нÑжно ÑнаÑала ÑиÑаÑÑ Ð²ÑÑ Ð² памÑÑÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑедаÑÑ ÑÑÑ ÑÑнкÑиÑ-генеÑаÑÐ¾Ñ Ð² `StreamingResponse` и веÑнÑÑÑ ÐµÐ³Ð¾.
+
+ÐÑо вклÑÑÐ°ÐµÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ библиоÑеки Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¾Ð±Ð»Ð°ÑнÑм Ñ
ÑанилиÑем, обÑабоÑки видео и Ñ.д.
+
+{* ../../docs_src/custom_response/tutorial008.py hl[2,10:12,14] *}
+
+1. ÐÑо ÑÑнкÑиÑ-генеÑаÑоÑ. Ðна ÑвлÑеÑÑÑ Â«ÑÑнкÑией-генеÑаÑоÑом», поÑÐ¾Ð¼Ñ ÑÑо ÑодеÑÐ¶Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑ(Ñ) `yield` внÑÑÑи.
+2. ÐÑполÑзÑÑ Ð±Ð»Ð¾Ðº `with`, Ð¼Ñ Ð³Ð°ÑанÑиÑÑем, ÑÑо ÑайлоподобнÑй обÑÐµÐºÑ Ð±ÑÐ´ÐµÑ Ð·Ð°ÐºÑÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ ÑÑнкÑии-генеÑаÑоÑа. То еÑÑÑ Ð¿Ð¾Ñле Ñого, как она законÑÐ¸Ñ Ð¾ÑпÑÐ°Ð²ÐºÑ Ð¾ÑвеÑа.
+3. ÐÑÐ¾Ñ `yield from` говоÑÐ¸Ñ ÑÑнкÑии иÑеÑиÑоваÑÑÑÑ Ð¿Ð¾ обÑекÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ `file_like`. РзаÑем, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ иÑеÑаÑии, оÑдаваÑÑ ÑÑÑ ÑаÑÑÑ ÐºÐ°Ðº иÑÑ
одÑÑÑÑ Ð¸Ð· ÑÑой ÑÑнкÑии-генеÑаÑоÑа (`iterfile`).
+
+ Таким обÑазом, ÑÑо ÑÑнкÑиÑ-генеÑаÑоÑ, коÑоÑÐ°Ñ Ð²Ð½ÑÑÑенне пеÑедаÑÑ ÑабоÑÑ Ð¿Ð¾ «генеÑаÑии» ÑемÑ-Ñо дÑÑгомÑ.
+
+ ÐÐµÐ»Ð°Ñ ÑÑо Ñаким обÑазом, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ помеÑÑиÑÑ ÐµÑ Ð² блок `with` и Ñем ÑамÑм гаÑанÑиÑоваÑÑ, ÑÑо ÑайлоподобнÑй обÑÐµÐºÑ Ð±ÑÐ´ÐµÑ Ð·Ð°ÐºÑÑÑ Ð¿Ð¾Ñле завеÑÑениÑ.
+
+/// tip | СовеÑ
+
+ÐамеÑÑÑе, ÑÑо здеÑÑ Ð¼Ñ Ð¸ÑполÑзÑем ÑÑандаÑÑнÑй `open()`, коÑоÑÑй не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ `async` и `await`, поÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑÑвлÑем опеÑаÑÐ¸Ñ Ð¿ÑÑи обÑÑной `def`.
+
+///
+
+### `FileResponse` { #fileresponse }
+
+ÐÑинÑ
Ñонно оÑпÑавлÑÐµÑ Ñайл как оÑвеÑ.
+
+ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑкземплÑÑа пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸Ð½Ð¾Ð¹ Ð½Ð°Ð±Ð¾Ñ Ð°ÑгÑменÑов, Ñем дÑÑгие ÑÐ¸Ð¿Ñ Ð¾ÑвеÑов:
+
+- `path` â пÑÑÑ Ðº ÑайлÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¾ÑпÑавлен.
+- `headers` â лÑбÑе дополниÑелÑнÑе заголовки Ð´Ð»Ñ Ð²ÐºÐ»ÑÑениÑ, в виде ÑловаÑÑ.
+- `media_type` â ÑÑÑока, задаÑÑÐ°Ñ Ñип ÑодеÑжимого. ÐÑли не задан, Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñипа ÑодеÑжимого бÑÐ´ÐµÑ Ð¸ÑполÑзовано Ð¸Ð¼Ñ Ñайла или пÑÑÑ.
+- `filename` â еÑли задан, бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑÑн в заголовок оÑвеÑа `Content-Disposition`.
+
+ФайловÑе оÑвеÑÑ Ð±ÑдÑÑ ÑодеÑжаÑÑ ÑооÑвеÑÑÑвÑÑÑие заголовки `Content-Length`, `Last-Modified` и `ETag`.
+
+{* ../../docs_src/custom_response/tutorial009.py hl[2,10] *}
+
+ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `response_class`:
+
+{* ../../docs_src/custom_response/tutorial009b.py hl[2,8,10] *}
+
+Ð ÑÑом ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ Ð¿ÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Ñвоей ÑÑнкÑии-обÑабоÑÑика пÑÑи.
+
+## ÐолÑзоваÑелÑÑкий клаÑÑ Ð¾ÑвеÑа { #custom-response-class }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ ÑобÑÑвеннÑй клаÑÑ Ð¾ÑвеÑа, ÑнаÑледовавÑиÑÑ Ð¾Ñ `Response`, и иÑполÑзоваÑÑ ÐµÐ³Ð¾.
+
+ÐапÑимеÑ, пÑедположим, ÑÑо Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ `orjson`, но Ñ Ð½ÐµÐºÐ¾ÑоÑÑми полÑзоваÑелÑÑкими наÑÑÑойками, коÑоÑÑе не иÑполÑзÑÑÑÑÑ Ð²Ð¾ вÑÑÑоенном клаÑÑе `ORJSONResponse`.
+
+Скажем, Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð²Ð¾Ð·Ð²ÑаÑалÑÑ Ð¾ÑÑоÑмаÑиÑованнÑй JSON Ñ Ð¾ÑÑÑÑпами, Ñо еÑÑÑ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð¾Ð¿ÑÐ¸Ñ orjson `orjson.OPT_INDENT_2`.
+
+ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ ÑоздаÑÑ `CustomORJSONResponse`. Ðлавное, ÑÑо вам нÑжно ÑделаÑÑ â ÑеализоваÑÑ Ð¼ÐµÑод `Response.render(content)`, коÑоÑÑй возвÑаÑÐ°ÐµÑ ÑодеÑжимое как `bytes`:
+
+{* ../../docs_src/custom_response/tutorial009c.py hl[9:14,17] *}
+
+ТепеÑÑ Ð²Ð¼ÐµÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ:
+
+```json
+{"message": "Hello World"}
+```
+
+...ÑÑÐ¾Ñ Ð¾ÑÐ²ÐµÑ Ð²ÐµÑнÑÑ:
+
+```json
+{
+ "message": "Hello World"
+}
+```
+
+РазÑмееÑÑÑ, Ð²Ñ Ð½Ð°Ð²ÐµÑнÑка найдÑÑе гоÑаздо более полезнÑе ÑпоÑÐ¾Ð±Ñ Ð²Ð¾ÑполÑзоваÑÑÑÑ ÑÑим, Ñем пÑоÑÑо ÑоÑмаÑиÑование JSON. ð
+
+## ÐлаÑÑ Ð¾ÑвеÑа по ÑмолÑÐ°Ð½Ð¸Ñ { #default-response-class }
+
+ÐÑи Ñоздании ÑкземплÑÑа клаÑÑа **FastAPI** или `APIRouter` Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ, какой клаÑÑ Ð¾ÑвеÑа иÑполÑзоваÑÑ Ð¿Ð¾ ÑмолÑаниÑ.
+
+ÐаÑамеÑÑ, коÑоÑÑй ÑÑо опÑеделÑеÑ, â `default_response_class`.
+
+РпÑимеÑе ниже **FastAPI** бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ `ORJSONResponse` по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¾ вÑеÑ
опеÑаÑиÑÑ
пÑÑи вмеÑÑо `JSONResponse`.
+
+{* ../../docs_src/custom_response/tutorial010.py hl[2,4] *}
+
+/// tip | СовеÑ
+
+ÐÑ Ð¿Ð¾-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑеопÑеделÑÑÑ `response_class` в опеÑаÑиÑÑ
пÑÑи, как и ÑанÑÑе.
+
+///
+
+## ÐополниÑелÑÐ½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ { #additional-documentation }
+
+ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ñип ÑодеÑжимого и многие дÑÑгие деÑали в OpenAPI Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `responses`: [ÐополниÑелÑнÑе оÑвеÑÑ Ð² OpenAPI](additional-responses.md){.internal-link target=_blank}.
diff --git a/docs/ru/docs/advanced/dataclasses.md b/docs/ru/docs/advanced/dataclasses.md
new file mode 100644
index 000000000..816f74404
--- /dev/null
+++ b/docs/ru/docs/advanced/dataclasses.md
@@ -0,0 +1,95 @@
+# ÐÑполÑзование dataclasses { #using-dataclasses }
+
+FastAPI поÑÑÑоен повеÑÑ
**Pydantic**, и Ñ Ð¿Ð¾ÐºÐ°Ð·Ñвал вам, как иÑполÑзоваÑÑ Pydantic-модели Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ HTTP-запÑоÑов и HTTP-оÑвеÑов.
+
+Ðо FastAPI Ñакже поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¸ÑполÑзование `dataclasses` Ñем же ÑпоÑобом:
+
+{* ../../docs_src/dataclasses/tutorial001.py hl[1,7:12,19:20] *}
+
+ÐÑо по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ **Pydantic**, Ñак как в нÑм еÑÑÑ Ð²ÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка `dataclasses`.
+
+Так ÑÑо даже еÑли в коде вÑÑе Pydantic не иÑполÑзÑеÑÑÑ Ñвно, FastAPI иÑполÑзÑÐµÑ Pydantic, ÑÑÐ¾Ð±Ñ ÐºÐ¾Ð½Ð²ÐµÑÑиÑоваÑÑ ÑÑандаÑÑнÑе dataclasses в ÑобÑÑвеннÑй ваÑÐ¸Ð°Ð½Ñ dataclasses Ð¾Ñ Pydantic.
+
+Ð, конеÑно, поддеÑживаÑÑÑÑ Ñе же возможноÑÑи:
+
+- валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
+- ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
+- докÑменÑиÑование даннÑÑ
и Ñ.д.
+
+ÐÑо ÑабоÑÐ°ÐµÑ Ñак же, как Ñ Pydantic-моделÑми. Рна Ñамом деле под капоÑом ÑÑо доÑÑигаеÑÑÑ Ñем же обÑазом, Ñ Ð¸ÑполÑзованием Pydantic.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐомниÑе, ÑÑо dataclasses не ÑмеÑÑ Ð²Ñего Ñого, ÑÑо ÑмеÑÑ Pydantic-модели.
+
+ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¼ вÑÑ ÐµÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¸ÑполÑзоваÑÑ Pydantic-модели.
+
+Ðо еÑли Ñ Ð²Ð°Ñ Ñже еÑÑÑ Ð½Ð°Ð±Ð¾Ñ dataclasses, ÑÑо полезнÑй пÑиÑм â задейÑÑвоваÑÑ Ð¸Ñ
Ð´Ð»Ñ Ð²ÐµÐ±-API на FastAPI. ð¤
+
+///
+
+## Dataclasses в `response_model` { #dataclasses-in-response-model }
+
+ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `dataclasses` в паÑамеÑÑе `response_model`:
+
+{* ../../docs_src/dataclasses/tutorial002.py hl[1,7:13,19] *}
+
+ÐÑÐ¾Ñ dataclass бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки пÑеобÑазован в Pydantic dataclass.
+
+Таким обÑазом, его ÑÑ
ема поÑвиÑÑÑ Ð² инÑеÑÑейÑе докÑменÑаÑии API:
+
+
+
+## Dataclasses во вложеннÑÑ
ÑÑÑÑкÑÑÑаÑ
даннÑÑ
{ #dataclasses-in-nested-data-structures }
+
+ÐÑ Ñакже можеÑе комбиниÑоваÑÑ `dataclasses` Ñ Ð´ÑÑгими анноÑаÑиÑми Ñипов, ÑÑÐ¾Ð±Ñ ÑоздаваÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
.
+
+РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
вам вÑÑ Ð¶Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¸ÑполÑзоваÑÑ Ð²ÐµÑÑÐ¸Ñ `dataclasses` из Pydantic. ÐапÑимеÑ, еÑли Ñ Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑÑ Ð¾Ñибки Ñ Ð°Ð²ÑомаÑиÑеÑки генеÑиÑÑемой докÑменÑаÑией API.
+
+Ð Ñаком ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑÑо замениÑÑ ÑÑандаÑÑнÑе `dataclasses` на `pydantic.dataclasses`, коÑоÑÐ°Ñ ÑвлÑеÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑовмеÑÑимой заменой (drop-in replacement):
+
+{* ../../docs_src/dataclasses/tutorial003.py hl[1,5,8:11,14:17,23:25,28] *}
+
+1. ÐÑ Ð¿Ð¾-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑем `field` из ÑÑандаÑÑнÑÑ
`dataclasses`.
+
+2. `pydantic.dataclasses` â полноÑÑÑÑ ÑовмеÑÑÐ¸Ð¼Ð°Ñ Ð·Ð°Ð¼ÐµÐ½Ð° (drop-in replacement) Ð´Ð»Ñ `dataclasses`.
+
+3. Dataclass `Author` ÑодеÑÐ¶Ð¸Ñ ÑпиÑок dataclass `Item`.
+
+4. Dataclass `Author` иÑполÑзÑеÑÑÑ Ð² паÑамеÑÑе `response_model`.
+
+5. ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¸ дÑÑгие ÑÑандаÑÑнÑе анноÑаÑии Ñипов вмеÑÑе Ñ dataclasses в каÑеÑÑве Ñела запÑоÑа.
+
+ Ð ÑÑом ÑлÑÑае ÑÑо ÑпиÑок dataclass `Item`.
+
+6. ÐдеÑÑ Ð¼Ñ Ð²Ð¾Ð·Ð²ÑаÑаем ÑловаÑÑ, ÑодеÑжаÑий `items`, коÑоÑÑй ÑвлÑеÑÑÑ ÑпиÑком dataclass.
+
+ FastAPI по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ ÑпоÑобен ÑеÑиализоваÑÑ Ð´Ð°Ð½Ð½Ñе в JSON.
+
+7. ÐдеÑÑ `response_model` иÑполÑзÑÐµÑ Ð°Ð½Ð½Ð¾ÑаÑÐ¸Ñ Ñипа â ÑпиÑок dataclass `Author`.
+
+ Снова, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе комбиниÑоваÑÑ `dataclasses` Ñо ÑÑандаÑÑнÑми анноÑаÑиÑми Ñипов.
+
+8. ÐбÑаÑиÑе внимание, ÑÑо ÑÑа *ÑÑнкÑиÑ-обÑабоÑÑик пÑÑи* иÑполÑзÑÐµÑ Ð¾Ð±ÑÑнÑй `def` вмеÑÑо `async def`.
+
+ Ðак и вÑегда в FastAPI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоÑеÑаÑÑ `def` и `async def` по необÑ
одимоÑÑи.
+
+ ÐÑли Ñ
оÑиÑе оÑвежиÑÑ Ð² памÑÑи, когда ÑÑо иÑполÑзоваÑÑ, поÑмоÑÑиÑе Ñаздел _"ÐÐµÑ Ð²Ñемени?"_ в докÑменÑаÑии пÑо [`async` и `await`](../async.md#in-a-hurry){.internal-link target=_blank}.
+
+9. ÐÑа *ÑÑнкÑиÑ-обÑабоÑÑик пÑÑи* возвÑаÑÐ°ÐµÑ Ð½Ðµ dataclasses (Ñ
оÑÑ Ð¼Ð¾Ð³Ð»Ð° бÑ), а ÑпиÑок ÑловаÑей Ñ Ð²Ð½ÑÑÑенними даннÑми.
+
+ FastAPI иÑполÑзÑÐµÑ Ð¿Ð°ÑамеÑÑ `response_model` (в коÑоÑом Ð·Ð°Ð´Ð°Ð½Ñ dataclasses), ÑÑÐ¾Ð±Ñ Ð¿ÑеобÑазоваÑÑ HTTP-оÑвеÑ.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе комбиниÑоваÑÑ `dataclasses` Ñ Ð´ÑÑгими анноÑаÑиÑми Ñипов множеÑÑвом ÑпоÑобов, ÑÑÐ¾Ð±Ñ ÑоÑмиÑоваÑÑ ÑложнÑе ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
.
+
+СмоÑÑиÑе подÑказки в коде вÑÑе, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ Ð±Ð¾Ð»ÐµÐµ конкÑеÑнÑе деÑали.
+
+## УзнаÑÑ Ð±Ð¾Ð»ÑÑе { #learn-more }
+
+ÐÑ Ñакже можеÑе комбиниÑоваÑÑ `dataclasses` Ñ Ð´ÑÑгими Pydantic-моделÑми, наÑледоваÑÑÑÑ Ð¾Ñ Ð½Ð¸Ñ
, вклÑÑаÑÑ Ð¸Ñ
в Ñвои модели и Ñ.д.
+
+ЧÑÐ¾Ð±Ñ ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе, поÑмоÑÑиÑе докÑменÑаÑÐ¸Ñ Pydantic о dataclasses.
+
+## ÐеÑÑÐ¸Ñ { #version }
+
+ÐоÑÑÑпно наÑÐ¸Ð½Ð°Ñ Ñ Ð²ÐµÑÑии FastAPI `0.67.0`. ð
diff --git a/docs/ru/docs/advanced/events.md b/docs/ru/docs/advanced/events.md
new file mode 100644
index 000000000..6e1b49035
--- /dev/null
+++ b/docs/ru/docs/advanced/events.md
@@ -0,0 +1,165 @@
+# СобÑÑÐ¸Ñ lifespan { #lifespan-events }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ (код), коÑоÑÑÑ Ð½Ñжно вÑполниÑÑ Ð¿ÐµÑед Ñем, как пÑиложение наÑÐ½ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ. ÐÑо ознаÑаеÑ, ÑÑо ÑÑÐ¾Ñ ÐºÐ¾Ð´ бÑÐ´ÐµÑ Ð²Ñполнен один Ñаз, пеÑед Ñем как пÑиложение наÑÐ½ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÑ HTTP-запÑоÑÑ.
+
+ÐналогиÑно, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ (код), коÑоÑÑÑ Ð½Ñжно вÑполниÑÑ, когда пÑиложение завеÑÑÐ°ÐµÑ ÑабоÑÑ. Ð ÑÑом ÑлÑÑае код бÑÐ´ÐµÑ Ð²Ñполнен один Ñаз, поÑле обÑабоÑки, возможно, многиÑ
запÑоÑов.
+
+ÐоÑколÑÐºÑ ÑÑÐ¾Ñ ÐºÐ¾Ð´ вÑполнÑеÑÑÑ Ð´Ð¾ Ñого, как пÑиложение наÑÐ¸Ð½Ð°ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð°Ð¿ÑоÑÑ, и ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле Ñого, как оно заканÑÐ¸Ð²Ð°ÐµÑ Ð¸Ñ
обÑабаÑÑваÑÑ, он оÑ
ваÑÑÐ²Ð°ÐµÑ Ð²ÐµÑÑ lifespan (жизненнÑй Ñикл) пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Ñлово «lifespan» ÑÑÐ°Ð½ÐµÑ Ð²Ð°Ð¶Ð½Ñм ÑеÑез ÑекÑÐ½Ð´Ñ ð).
+
+ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð½Ð°ÑÑÑойки ÑеÑÑÑÑов, коÑоÑÑе нÑÐ¶Ð½Ñ Ð´Ð»Ñ Ð²Ñего пÑиложениÑ, коÑоÑÑе ÑазделÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð·Ð°Ð¿ÑоÑами и/или коÑоÑÑе нÑжно заÑем оÑиÑÑиÑÑ. ÐапÑимеÑ, пÑл подклÑÑений к базе даннÑÑ
или загÑÑзка обÑей модели ÐаÑинного обÑÑениÑ.
+
+## ÐаÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ { #use-case }
+
+ÐаÑнем Ñ Ð¿ÑимеÑа ваÑианÑа иÑполÑзованиÑ, а заÑем поÑмоÑÑим, как ÑÑо ÑеÑиÑÑ.
+
+ÐÑедÑÑавим, ÑÑо Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð½ÐµÑколÑко моделей ÐаÑинного обÑÑениÑ, коÑоÑÑе Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¾Ð±ÑабоÑки запÑоÑов. ð¤
+
+ÐÑи же модели ÑазделÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð·Ð°Ð¿ÑоÑами, Ñо еÑÑÑ ÑÑо не одна Ð¼Ð¾Ð´ÐµÐ»Ñ Ð½Ð° запÑоÑ, не одна на полÑзоваÑÐµÐ»Ñ Ð¸ Ñ.п.
+
+ÐÑедÑÑавим, ÑÑо загÑÑзка модели Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно много вÑемени, поÑÐ¾Ð¼Ñ ÑÑо ей нÑжно пÑоÑиÑаÑÑ Ð¼Ð½Ð¾Ð³Ð¾ даннÑÑ
Ñ Ð´Ð¸Ñка. ÐоÑÑÐ¾Ð¼Ñ Ð²Ñ Ð½Ðµ Ñ
оÑиÑе делаÑÑ ÑÑо Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ запÑоÑа.
+
+ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð·Ð°Ð³ÑÑзиÑÑ ÐµÑ Ð½Ð° веÑÑ
нем ÑÑовне модÑлÑ/Ñайла, но ÑÑо ознаÑало бÑ, ÑÑо Ð¼Ð¾Ð´ÐµÐ»Ñ Ð·Ð°Ð³ÑÑжаеÑÑÑ Ð´Ð°Ð¶Ðµ еÑли Ð²Ñ Ð¿ÑоÑÑо запÑÑкаеÑе пÑоÑÑой авÑомаÑиÑеÑкий ÑеÑÑ; Ñогда ÑÑÐ¾Ñ ÑеÑÑ Ð±ÑÐ´ÐµÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñм, Ñак как ÐµÐ¼Ñ Ð¿ÑидеÑÑÑ Ð¶Ð´Ð°ÑÑ Ð·Ð°Ð³ÑÑзки модели пеÑед запÑÑком незавиÑимой ÑаÑÑи кода.
+
+Ðменно ÑÑо Ð¼Ñ Ð¸ ÑеÑим: давайÑе загÑÑжаÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¿ÐµÑед Ñем, как наÑнÑÑÑÑ Ð¾Ð±ÑабоÑка запÑоÑов, но ÑолÑко непоÑÑедÑÑвенно пеÑед Ñем, как пÑиложение наÑÐ½ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð°Ð¿ÑоÑÑ, а не во вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки кода.
+
+## Lifespan { #lifespan }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ Ð´Ð»Ñ startup и shutdown, иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑ `lifespan` пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `FastAPI` и Â«Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа» (ÑеÑез ÑекÑÐ½Ð´Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ ÑÑо ÑÑо).
+
+ÐаÑнем Ñ Ð¿ÑимеÑа, а заÑем ÑазбеÑÑм его подÑобнее.
+
+ÐÑ ÑоздаÑм аÑинÑ
ÑоннÑÑ ÑÑнкÑÐ¸Ñ `lifespan()` Ñ `yield` пÑимеÑно Ñак:
+
+{* ../../docs_src/events/tutorial003.py hl[16,19] *}
+
+ÐдеÑÑ Ð¼Ñ ÑимÑлиÑÑем доÑогÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ startup по загÑÑзке модели, помеÑÐ°Ñ (ÑикÑивнÑÑ) ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸ в ÑловаÑÑ Ñ Ð¼Ð¾Ð´ÐµÐ»Ñми ÐаÑинного обÑÑÐµÐ½Ð¸Ñ Ð´Ð¾ `yield`. ÐÑÐ¾Ñ ÐºÐ¾Ð´ бÑÐ´ÐµÑ Ð²Ñполнен до Ñого, как пÑиложение наÑÐ½ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð°Ð¿ÑоÑÑ, во вÑÐµÐ¼Ñ startup.
+
+РзаÑем ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле `yield` Ð¼Ñ Ð²ÑгÑÑжаем моделÑ. ÐÑÐ¾Ñ ÐºÐ¾Ð´ бÑÐ´ÐµÑ Ð²Ñполнен поÑле Ñого, как пÑиложение законÑÐ¸Ñ Ð¾Ð±ÑабаÑÑваÑÑ Ð·Ð°Ð¿ÑоÑÑ, непоÑÑедÑÑвенно пеÑед shutdown. ÐÑо можеÑ, напÑимеÑ, оÑвободиÑÑ ÑеÑÑÑÑÑ, Ñакие как памÑÑÑ Ð¸Ð»Ð¸ GPU.
+
+/// tip | СовеÑ
+
+`shutdown` пÑоизойдÑÑ, когда Ð²Ñ Ð¾ÑÑанавливаеÑе пÑиложение.
+
+Ðозможно, вам нÑжно запÑÑÑиÑÑ Ð½Ð¾Ð²ÑÑ Ð²ÐµÑÑиÑ, или Ð²Ñ Ð¿ÑоÑÑо ÑÑÑали Ð¾Ñ Ð½ÐµÐ³Ð¾. ð¤·
+
+///
+
+### ФÑнкÑÐ¸Ñ lifespan { #lifespan-function }
+
+ÐеÑвое, на ÑÑо ÑÑÐ¾Ð¸Ñ Ð¾Ð±ÑаÑиÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, â Ð¼Ñ Ð¾Ð¿ÑеделÑем аÑинÑ
ÑоннÑÑ ÑÑнкÑÐ¸Ñ Ñ `yield`. ÐÑо оÑÐµÐ½Ñ Ð¿Ð¾Ñ
оже на ÐавиÑимоÑÑи Ñ `yield`.
+
+{* ../../docs_src/events/tutorial003.py hl[14:19] *}
+
+ÐеÑÐ²Ð°Ñ ÑаÑÑÑ ÑÑнкÑии, до `yield`, бÑÐ´ÐµÑ Ð²Ñполнена до запÑÑка пÑиложениÑ.
+
+Ð ÑаÑÑÑ Ð¿Ð¾Ñле `yield` бÑÐ´ÐµÑ Ð²Ñполнена поÑле завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ð¿ÑиложениÑ.
+
+### ÐÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа { #async-context-manager }
+
+ÐÑли пÑиÑмоÑÑеÑÑÑÑ, ÑÑнкÑÐ¸Ñ Ð´ÐµÐºÐ¾ÑиÑована `@asynccontextmanager`.
+
+ÐÑо пÑевÑаÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ Ð² «аÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа».
+
+{* ../../docs_src/events/tutorial003.py hl[1,13] *}
+
+ÐÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа в Python â ÑÑо Ñо, ÑÑо можно иÑполÑзоваÑÑ Ð² опеÑаÑоÑе `with`. ÐапÑимеÑ, `open()` можно иÑполÑзоваÑÑ ÐºÐ°Ðº Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа:
+
+```Python
+with open("file.txt") as file:
+ file.read()
+```
+
+РпоÑледниÑ
веÑÑиÑÑ
Python еÑÑÑ Ñакже аÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа. Ðго иÑполÑзÑÑÑ Ñ `async with`:
+
+```Python
+async with lifespan(app):
+ await do_stuff()
+```
+
+Ðогда Ð²Ñ ÑоздаÑÑе Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа или аÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа, как вÑÑе, он пеÑед вÑ
одом в блок `with` вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ ÐºÐ¾Ð´ до `yield`, а поÑле вÑÑ
ода из блока `with` вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ ÐºÐ¾Ð´ поÑле `yield`.
+
+РнаÑем пÑимеÑе вÑÑе Ð¼Ñ Ð½Ðµ иÑполÑзÑем его напÑÑмÑÑ, а пеÑедаÑм его в FastAPI, ÑÑÐ¾Ð±Ñ Ð¾Ð½ иÑполÑзовал его Ñам.
+
+ÐаÑамеÑÑ `lifespan` пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `FastAPI` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð°ÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа, поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пеÑедаÑÑ ÐµÐ¼Ñ Ð½Ð°Ñ Ð½Ð¾Ð²Ñй аÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа `lifespan`.
+
+{* ../../docs_src/events/tutorial003.py hl[22] *}
+
+## ÐлÑÑеÑнаÑивнÑе ÑобÑÑÐ¸Ñ (ÑÑÑаÑевÑие) { #alternative-events-deprecated }
+
+/// warning | ÐÑедÑпÑеждение
+
+РекомендÑемÑй ÑпоÑоб обÑабаÑÑваÑÑ startup и shutdown â иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `lifespan` пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `FastAPI`, как опиÑано вÑÑе. ÐÑли Ð²Ñ ÑкажеÑе паÑамеÑÑ `lifespan`, обÑабоÑÑики ÑобÑÑий `startup` и `shutdown` болÑÑе вÑзÑваÑÑÑÑ Ð½Ðµ бÑдÑÑ. Ðибо вÑÑ ÑеÑез `lifespan`, либо вÑÑ ÑеÑез ÑобÑÑÐ¸Ñ â не одновÑеменно.
+
+ÐÑÑ ÑаÑÑÑ, ÑкоÑее вÑего, можно пÑопÑÑÑиÑÑ.
+
+///
+
+ÐÑÑÑ Ð°Ð»ÑÑеÑнаÑивнÑй ÑпоÑоб опÑеделиÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ, коÑоÑÑÑ Ð½Ñжно вÑполниÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ startup и во вÑÐµÐ¼Ñ shutdown.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð¾Ð±ÑабоÑÑики ÑобÑÑий (ÑÑнкÑии), коÑоÑÑе нÑжно вÑполниÑÑ Ð´Ð¾ ÑÑаÑÑа пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ пÑи его завеÑÑении.
+
+ÐÑи ÑÑнкÑии можно обÑÑвиÑÑ Ñ `async def` или обÑÑнÑм `def`.
+
+### СобÑÑие `startup` { #startup-event }
+
+ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑÑнкÑиÑ, коÑоÑÑÑ Ð½Ñжно запÑÑÑиÑÑ Ð´Ð¾ ÑÑаÑÑа пÑиложениÑ, обÑÑвиÑе ÐµÑ ÐºÐ°Ðº обÑабоÑÑик ÑобÑÑÐ¸Ñ `"startup"`:
+
+{* ../../docs_src/events/tutorial001.py hl[8] *}
+
+Ð ÑÑом ÑлÑÑае ÑÑнкÑиÑ-обÑабоÑÑик ÑобÑÑÐ¸Ñ `startup` иниÑиализиÑÑÐµÑ Â«Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
» items (ÑÑо пÑоÑÑо `dict`) некоÑоÑÑми знаÑениÑми.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð±Ð¾Ð»ÐµÐµ одного обÑабоÑÑика ÑобÑÑиÑ.
+
+РваÑе пÑиложение не наÑÐ½ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð°Ð¿ÑоÑÑ, пока вÑе обÑабоÑÑики ÑобÑÑÐ¸Ñ `startup` не завеÑÑаÑÑÑ.
+
+### СобÑÑие `shutdown` { #shutdown-event }
+
+ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑÑнкÑиÑ, коÑоÑÑÑ Ð½Ñжно запÑÑÑиÑÑ Ð¿Ñи завеÑÑении ÑабоÑÑ Ð¿ÑиложениÑ, обÑÑвиÑе ÐµÑ ÐºÐ°Ðº обÑабоÑÑик ÑобÑÑÐ¸Ñ `"shutdown"`:
+
+{* ../../docs_src/events/tutorial002.py hl[6] *}
+
+ÐдеÑÑ ÑÑнкÑиÑ-обÑабоÑÑик ÑобÑÑÐ¸Ñ `shutdown` запиÑÐµÑ ÑÑÑÐ¾ÐºÑ ÑекÑÑа `"Application shutdown"` в Ñайл `log.txt`.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+Ð ÑÑнкÑии `open()` паÑамеÑÑ `mode="a"` ознаÑÐ°ÐµÑ Â«Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÂ» (append), Ñо еÑÑÑ ÑÑÑока бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð° в ÐºÐ¾Ð½ÐµÑ Ñайла, без пеÑезапиÑи пÑедÑдÑÑего ÑодеÑжимого.
+
+///
+
+/// tip | СовеÑ
+
+ÐбÑаÑиÑе внимание, ÑÑо в ÑÑом ÑлÑÑае Ð¼Ñ Ð¸ÑполÑзÑем ÑÑандаÑÑнÑÑ Python-ÑÑнкÑÐ¸Ñ `open()`, коÑоÑÐ°Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑвÑÐµÑ Ñ Ñайлом.
+
+То еÑÑÑ ÑÑо I/O (ввод/вÑвод), ÑÑебÑÑÑий «ожиданиÑ» запиÑи на диÑк.
+
+Ðо `open()` не иÑполÑзÑÐµÑ `async` и `await`.
+
+ÐоÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¾Ð±ÑÑвлÑем обÑабоÑÑик ÑобÑÑÐ¸Ñ Ð¾Ð±ÑÑнÑм `def` вмеÑÑо `async def`.
+
+///
+
+### `startup` и `shutdown` вмеÑÑе { #startup-and-shutdown-together }
+
+С вÑÑокой веÑоÑÑноÑÑÑÑ Ð»Ð¾Ð³Ð¸ÐºÐ° Ð´Ð»Ñ Ð²Ð°Ñего startup и shutdown ÑвÑзана: Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе Ñ
оÑеÑÑ ÑÑо-Ñо запÑÑÑиÑÑ, а заÑем завеÑÑиÑÑ, полÑÑиÑÑ ÑеÑÑÑÑ, а заÑем оÑвободиÑÑ ÐµÐ³Ð¾ и Ñ.д.
+
+ÐелаÑÑ ÑÑо в оÑделÑнÑÑ
ÑÑнкÑиÑÑ
, коÑоÑÑе не ÑазделÑÑÑ Ð¾Ð±ÑÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ Ð¸Ð»Ð¸ пеÑеменнÑе, Ñложнее, Ñак как пÑидÑÑÑÑ Ñ
ÑаниÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² глобалÑнÑÑ
пеÑеменнÑÑ
или иÑполÑзоваÑÑ Ð¿Ð¾Ñ
ожие пÑиÑмÑ.
+
+ÐоÑÑÐ¾Ð¼Ñ ÑепеÑÑ ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ `lifespan`, как опиÑано вÑÑе.
+
+## ТеÑ
ниÑеÑкие деÑали { #technical-details }
+
+Ðемного ÑеÑ
ниÑеÑкиÑ
подÑобноÑÑей Ð´Ð»Ñ Ð»ÑбопÑÑнÑÑ
Ñмников. ð¤
+
+Ðод капоÑом, в ASGI-ÑеÑ
ниÑеÑкой ÑпеÑиÑикаÑии, ÑÑо ÑаÑÑÑ ÐÑоÑокола Lifespan, и он опÑеделÑÐµÑ ÑобÑÑÐ¸Ñ `startup` и `shutdown`.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑоÑиÑаÑÑ Ð±Ð¾Ð»ÑÑе пÑо обÑабоÑÑики `lifespan` в Starlette в докÑменÑаÑии Starlette по Lifespan.
+
+ÐклÑÑÐ°Ñ Ñо, как ÑабоÑаÑÑ Ñ ÑоÑÑоÑнием lifespan, коÑоÑое можно иÑполÑзоваÑÑ Ð² дÑÑгиÑ
ÑаÑÑÑÑ
ваÑего кода.
+
+///
+
+## ÐодпÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ { #sub-applications }
+
+ð¨ ÐмейÑе в видÑ, ÑÑо ÑÑи ÑобÑÑÐ¸Ñ lifespan (startup и shutdown) бÑдÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ ÑолÑко Ð´Ð»Ñ Ð¾Ñновного пÑиложениÑ, а не Ð´Ð»Ñ [ÐодпÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â Mounts](sub-applications.md){.internal-link target=_blank}.
diff --git a/docs/ru/docs/advanced/generate-clients.md b/docs/ru/docs/advanced/generate-clients.md
new file mode 100644
index 000000000..ee52412c6
--- /dev/null
+++ b/docs/ru/docs/advanced/generate-clients.md
@@ -0,0 +1,208 @@
+# ÐенеÑаÑÐ¸Ñ SDK { #generating-sdks }
+
+ÐоÑколÑÐºÑ **FastAPI** оÑнован на ÑпеÑиÑикаÑии **OpenAPI**, его API можно опиÑаÑÑ Ð² ÑÑандаÑÑном ÑоÑмаÑе, понÑÑном множеÑÑÐ²Ñ Ð¸Ð½ÑÑÑÑменÑов.
+
+ÐÑо ÑпÑоÑÐ°ÐµÑ Ð³ÐµÐ½ÐµÑаÑÐ¸Ñ Ð°ÐºÑÑалÑной **докÑменÑаÑии**, клиенÑÑкиÑ
библиоÑек (**SDKs**) на ÑазнÑÑ
ÑзÑкаÑ
, а Ñакже **ÑеÑÑиÑованиÑ** или **воÑкÑÐ»Ð¾Ñ Ð°Ð²ÑомаÑизаÑии**, коÑоÑÑе оÑÑаÑÑÑÑ ÑинÑ
ÑонизиÑованнÑми Ñ Ð²Ð°Ñим кодом.
+
+Ð ÑÑом ÑÑководÑÑве Ð²Ñ ÑзнаеÑе, как ÑгенеÑиÑоваÑÑ **TypeScript SDK** Ð´Ð»Ñ Ð²Ð°Ñего бÑкенда на FastAPI.
+
+## ÐенеÑаÑоÑÑ SDK Ñ Ð¾ÑкÑÑÑÑм иÑÑ
однÑм кодом { #open-source-sdk-generators }
+
+Ðибкий ваÑÐ¸Ð°Ð½Ñ â OpenAPI Generator, коÑоÑÑй поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ **многие ÑзÑки пÑогÑаммиÑованиÑ** и ÑÐ¼ÐµÐµÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ SDK из ваÑей ÑпеÑиÑикаÑии OpenAPI.
+
+ÐÐ»Ñ **TypeScriptâклиенÑов** Hey API â ÑпеÑиализиÑованное ÑеÑение, обеÑпеÑиваÑÑее опÑималÑнÑй опÑÑ Ð´Ð»Ñ ÑкоÑиÑÑÐµÐ¼Ñ TypeScript.
+
+ÐолÑÑе генеÑаÑоÑов SDK можно найÑи на OpenAPI.Tools.
+
+/// tip | СовеÑ
+
+FastAPI авÑомаÑиÑеÑки генеÑиÑÑÐµÑ ÑпеÑиÑикаÑии **OpenAPI 3.1**, поÑÑÐ¾Ð¼Ñ Ð»Ñбой иÑполÑзÑемÑй инÑÑÑÑÐ¼ÐµÐ½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ поддеÑживаÑÑ ÑÑÑ Ð²ÐµÑÑиÑ.
+
+///
+
+## ÐенеÑаÑоÑÑ SDK Ð¾Ñ ÑпонÑоÑов FastAPI { #sdk-generators-from-fastapi-sponsors }
+
+Ð ÑÑом Ñазделе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÑеÑÐµÐ½Ð¸Ñ Ñ **венÑÑÑной поддеÑжкой** и **поддеÑжкой компаний** Ð¾Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¹, коÑоÑÑе ÑпонÑиÑÑÑÑ FastAPI. ÐÑи пÑодÑкÑÑ Ð¿ÑедоÑÑавлÑÑÑ **дополниÑелÑнÑе возможноÑÑи** и **инÑегÑаÑии** ÑвеÑÑ
вÑÑококаÑеÑÑвенно генеÑиÑÑемÑÑ
SDK.
+
+ÐлагодаÑÑ â¨ [**ÑпонÑоÑÑÑÐ²Ñ FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ⨠ÑÑи компании помогаÑÑ Ð¾Ð±ÐµÑпеÑиваÑÑ, ÑÑÐ¾Ð±Ñ ÑÑеймвоÑк и его **ÑкоÑиÑÑема** оÑÑавалиÑÑ Ð·Ð´Ð¾ÑовÑми и **ÑÑÑойÑивÑми**.
+
+ÐÑ
ÑпонÑоÑÑÑво Ñакже демонÑÑÑиÑÑÐµÑ ÑеÑÑÑзнÑÑ Ð¿ÑивеÑженноÑÑÑ **ÑообÑеÑÑвÑ** FastAPI (вам), показÑваÑ, ÑÑо им важно не ÑолÑко пÑедоÑÑавлÑÑÑ **оÑлиÑнÑй ÑеÑвиÑ**, но и поддеÑживаÑÑ **надÑжнÑй и пÑоÑвеÑаÑÑий ÑÑеймвоÑк** FastAPI. ð
+
+ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе попÑобоваÑÑ:
+
+* Speakeasy
+* Stainless
+* liblab
+
+ÐекоÑоÑÑе из ÑÑиÑ
ÑеÑений Ñакже могÑÑ Ð±ÑÑÑ open source или имеÑÑ Ð±ÐµÑплаÑнÑе ÑаÑиÑÑ, Ñак ÑÑо Ð²Ñ ÑможеÑе попÑобоваÑÑ Ð¸Ñ
без ÑинанÑовÑÑ
заÑÑаÑ. ÐÑÑгие коммеÑÑеÑкие генеÑаÑоÑÑ SDK доÑÑÑÐ¿Ð½Ñ Ð¸ иÑ
можно найÑи онлайн. ð¤
+
+## СоздаÑÑ TypeScript SDK { #create-a-typescript-sdk }
+
+ÐаÑнÑм Ñ Ð¿ÑоÑÑого пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI:
+
+{* ../../docs_src/generate_clients/tutorial001_py39.py hl[7:9,12:13,16:17,21] *}
+
+ÐбÑаÑиÑе внимание, ÑÑо *опеÑаÑии пÑÑи (обÑабоÑÑики пÑÑи)* опÑеделÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸, коÑоÑÑе они иÑполÑзÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾Ð¹ нагÑÑзки запÑоÑа и полезной нагÑÑзки оÑвеÑа, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ `Item` и `ResponseMessage`.
+
+### ÐокÑменÑаÑÐ¸Ñ API { #api-docs }
+
+ÐÑли пеÑейÑи на `/docs`, Ð²Ñ ÑвидиÑе **ÑÑ
емÑ** даннÑÑ
, оÑпÑавлÑемÑÑ
в запÑоÑаÑ
и пÑинимаемÑÑ
в оÑвеÑаÑ
:
+
+
+
+ÐÑ Ð²Ð¸Ð´Ð¸Ñе ÑÑи ÑÑ
емÑ, поÑÐ¾Ð¼Ñ ÑÑо они бÑли обÑÑÐ²Ð»ÐµÐ½Ñ Ñ Ð¼Ð¾Ð´ÐµÐ»Ñми в пÑиложении.
+
+ÐÑа инÑоÑмаÑÐ¸Ñ Ð´Ð¾ÑÑÑпна в **ÑÑ
еме OpenAPI** пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ заÑем оÑобÑажаеÑÑÑ Ð² докÑменÑаÑии API.
+
+Та же инÑоÑмаÑÐ¸Ñ Ð¸Ð· моделей, вклÑÑÑÐ½Ð½Ð°Ñ Ð² OpenAPI, Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ **генеÑаÑии клиенÑÑкого кода**.
+
+### Hey API { #hey-api }
+
+Ðак ÑолÑко Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð¿Ñиложение FastAPI Ñ Ð¼Ð¾Ð´ÐµÐ»Ñми, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Hey API Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии TypeScriptâклиенÑа. СамÑй бÑÑÑÑÑй ÑпоÑоб ÑделаÑÑ ÑÑо â ÑеÑез npx.
+
+```sh
+npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
+```
+
+ÐÑо ÑгенеÑиÑÑÐµÑ TypeScript SDK в `./src/client`.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ, как ÑÑÑановиÑÑ `@hey-api/openapi-ts` и поÑиÑаÑÑ Ð¾ ÑгенеÑиÑованном ÑезÑлÑÑаÑе на иÑ
ÑайÑе.
+
+### ÐÑполÑзование SDK { #using-the-sdk }
+
+ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе импоÑÑиÑоваÑÑ Ð¸ иÑполÑзоваÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑкий код. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак, обÑаÑиÑе внимание, ÑÑо Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе авÑозавеÑÑение Ð´Ð»Ñ Ð¼ÐµÑодoв:
+
+
+
+ÐÑ Ñакже полÑÑиÑе авÑозавеÑÑение Ð´Ð»Ñ Ð¾ÑпÑавлÑемой полезной нагÑÑзки:
+
+
+
+/// tip | СовеÑ
+
+ÐбÑаÑиÑе внимание на авÑозавеÑÑение Ð´Ð»Ñ `name` и `price`, ÑÑо бÑло опÑеделено в пÑиложении FastAPI, в модели `Item`.
+
+///
+
+ÐÑ Ð¿Ð¾Ð»ÑÑиÑе оÑибки пÑÑмо в ÑедакÑоÑе Ð´Ð»Ñ Ð¾ÑпÑавлÑемÑÑ
даннÑÑ
:
+
+
+
+ÐбÑÐµÐºÑ Ð¾ÑвеÑа Ñакже бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð°Ð²ÑозавеÑÑение:
+
+
+
+## ÐÑиложение FastAPI Ñ Ñегами { #fastapi-app-with-tags }
+
+Ðо многиÑ
ÑлÑÑаÑÑ
ваÑе пÑиложение FastAPI бÑÐ´ÐµÑ Ð±Ð¾Ð»ÑÑе, и вÑ, веÑоÑÑно, бÑдеÑе иÑполÑзоваÑÑ Ñеги, ÑÑÐ¾Ð±Ñ ÑазделÑÑÑ ÑазнÑе гÑÑÐ¿Ð¿Ñ *опеÑаÑий пÑÑи*.
+
+ÐапÑимеÑ, Ñ Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñаздел Ð´Ð»Ñ **items** и дÑÑгой Ñаздел Ð´Ð»Ñ **users**, и они могÑÑ Ð±ÑÑÑ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ñ Ñегами:
+
+{* ../../docs_src/generate_clients/tutorial002_py39.py hl[21,26,34] *}
+
+### ÐенеÑаÑÐ¸Ñ TypeScriptâклиенÑа Ñ Ñегами { #generate-a-typescript-client-with-tags }
+
+ÐÑли Ð²Ñ Ð³ÐµÐ½ÐµÑиÑÑеÑе ÐºÐ»Ð¸ÐµÐ½Ñ Ð´Ð»Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI Ñ Ð¸ÑполÑзованием Ñегов, обÑÑно клиенÑÑкий код Ñакже бÑÐ´ÐµÑ ÑазделÑн по Ñегам.
+
+Таким обÑазом Ð²Ñ ÑможеÑе имеÑÑ Ð²ÑÑ Ð¿ÑавилÑно ÑпоÑÑдоÑеннÑм и ÑгÑÑппиÑованнÑм в клиенÑÑком коде:
+
+
+
+Ð ÑÑом ÑлÑÑае Ñ Ð²Ð°Ñ ÐµÑÑÑ:
+
+* `ItemsService`
+* `UsersService`
+
+### Ðмена меÑодов клиенÑа { #client-method-names }
+
+СейÑÐ°Ñ ÑгенеÑиÑованнÑе имена меÑодов вÑоде `createItemItemsPost` вÑглÑдÑÑ Ð½Ðµ оÑÐµÐ½Ñ Ð°ÐºÐºÑÑаÑно:
+
+```TypeScript
+ItemsService.createItemItemsPost({name: "Plumbus", price: 5})
+```
+
+...ÑÑо поÑомÑ, ÑÑо генеÑаÑÐ¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа иÑполÑзÑÐµÑ Ð²Ð½ÑÑÑенний **ID опеÑаÑии** OpenAPI Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ *опеÑаÑии пÑÑи*.
+
+OpenAPI ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ ÐºÐ°Ð¶Ð´Ñй ID опеÑаÑии бÑл Ñникален ÑÑеди вÑеÑ
*опеÑаÑий пÑÑи*, поÑÑÐ¾Ð¼Ñ FastAPI иÑполÑзÑÐµÑ **Ð¸Ð¼Ñ ÑÑнкÑии**, **пÑÑÑ** и **HTTPâмеÑод/опеÑаÑиÑ** Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии ÑÑого ID опеÑаÑии, Ñак как Ñаким обÑазом можно гаÑанÑиÑоваÑÑ ÑникалÑноÑÑÑ ID опеÑаÑий.
+
+Ðо далее Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ, как ÑÑо ÑлÑÑÑиÑÑ. ð¤
+
+## ÐолÑзоваÑелÑÑкие ID опеÑаÑий и лÑÑÑие имена меÑодов { #custom-operation-ids-and-better-method-names }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе **измениÑÑ** ÑпоÑоб **генеÑаÑии** ÑÑиÑ
ID опеÑаÑий, ÑÑÐ¾Ð±Ñ ÑделаÑÑ Ð¸Ñ
пÑоÑе, а имена меÑодов в клиенÑаÑ
â **более пÑоÑÑÑми**.
+
+Ð ÑÑом ÑлÑÑае вам нÑжно бÑÐ´ÐµÑ Ð¾Ð±ÐµÑпеÑиÑÑ, ÑÑÐ¾Ð±Ñ ÐºÐ°Ð¶Ð´Ñй ID опеÑаÑии бÑл **ÑникалÑнÑм** дÑÑгим ÑпоÑобом.
+
+ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе гаÑанÑиÑоваÑÑ, ÑÑо Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ *опеÑаÑии пÑÑи* еÑÑÑ Ñег, и заÑем генеÑиÑоваÑÑ ID опеÑаÑии на оÑнове **Ñега** и **имени** *опеÑаÑии пÑÑи* (имени ÑÑнкÑии).
+
+### ÐолÑзоваÑелÑÑÐºÐ°Ñ ÑÑнкÑÐ¸Ñ Ð³ÐµÐ½ÐµÑаÑии ÑникалÑного ID { #custom-generate-unique-id-function }
+
+FastAPI иÑполÑзÑÐµÑ **ÑникалÑнÑй ID** Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ *опеÑаÑии пÑÑи*, коÑоÑÑй пÑименÑеÑÑÑ Ð´Ð»Ñ **ID опеÑаÑии**, а Ñакже Ð´Ð»Ñ Ð¸Ð¼Ñн лÑбÑÑ
необÑ
одимÑÑ
полÑзоваÑелÑÑкиÑ
моделей запÑоÑов или оÑвеÑов.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе каÑÑомизиÑоваÑÑ ÑÑÑ ÑÑнкÑиÑ. Ðна пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ `APIRoute` и возвÑаÑÐ°ÐµÑ ÑÑÑокÑ.
+
+ÐапÑимеÑ, здеÑÑ Ð±ÐµÑÑÑÑÑ Ð¿ÐµÑвÑй Ñег (ÑкоÑее вÑего Ñ Ð²Ð°Ñ Ð¾Ð´Ð¸Ð½ Ñег) и Ð¸Ð¼Ñ *опеÑаÑии пÑÑи* (Ð¸Ð¼Ñ ÑÑнкÑии).
+
+ÐаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑедаÑÑ ÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкÑÑ ÑÑнкÑÐ¸Ñ Ð² **FastAPI** ÑеÑез паÑамеÑÑ `generate_unique_id_function`:
+
+{* ../../docs_src/generate_clients/tutorial003_py39.py hl[6:7,10] *}
+
+### ÐенеÑаÑÐ¸Ñ TypeScriptâклиенÑа Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкими ID опеÑаÑий { #generate-a-typescript-client-with-custom-operation-ids }
+
+ТепеÑÑ, еÑли Ñнова ÑгенеÑиÑоваÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ, Ð²Ñ ÑвидиÑе, ÑÑо имена меÑодов ÑлÑÑÑилиÑÑ:
+
+
+
+Ðак видиÑе, ÑепеÑÑ Ð¸Ð¼ÐµÐ½Ð° меÑодов ÑодеÑÐ¶Ð°Ñ Ñег, а заÑем Ð¸Ð¼Ñ ÑÑнкÑии; болÑÑе они не вклÑÑаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· URLâпÑÑи и HTTPâопеÑаÑии.
+
+### ÐÑедобÑабоÑка ÑпеÑиÑикаÑии OpenAPI Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑоÑа клиенÑа { #preprocess-the-openapi-specification-for-the-client-generator }
+
+СгенеÑиÑованном коде вÑÑ ÐµÑÑ ÐµÑÑÑ **дÑблиÑÑÑÑаÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ**.
+
+ÐÑ Ñже знаем, ÑÑо ÑÑÐ¾Ñ Ð¼ÐµÑод оÑноÑиÑÑÑ Ðº **items**, поÑÐ¾Ð¼Ñ ÑÑо ÑÑо Ñлово еÑÑÑ Ð² `ItemsService` (взÑÑо из Ñега), но пÑи ÑÑом Ð¸Ð¼Ñ Ñега вÑÑ ÐµÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ пÑеÑикÑом к имени меÑода. ð
+
+СкоÑее вÑего Ð¼Ñ Ð·Ð°Ñ
оÑим оÑÑавиÑÑ ÑÑо в OpenAPI в Ñелом, Ñак как ÑÑо гаÑанÑиÑÑеÑ, ÑÑо ID опеÑаÑий бÑдÑÑ **ÑникалÑнÑ**.
+
+Ðо Ð´Ð»Ñ ÑгенеÑиÑованного клиенÑа Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ **модиÑиÑиÑоваÑÑ** ID опеÑаÑий OpenAPI непоÑÑедÑÑвенно пеÑед генеÑаÑией клиенÑов, ÑÑÐ¾Ð±Ñ ÑделаÑÑ Ð¸Ð¼ÐµÐ½Ð° меÑодов более пÑиÑÑнÑми и **ÑиÑÑÑми**.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ ÑкаÑаÑÑ OpenAPI JSON в Ñайл `openapi.json`, а заÑем **ÑбÑаÑÑ ÑÑÐ¾Ñ Ð¿ÑеÑикÑâÑег** Ñаким ÑкÑипÑом:
+
+{* ../../docs_src/generate_clients/tutorial004.py *}
+
+//// tab | Node.js
+
+```Javascript
+{!> ../../docs_src/generate_clients/tutorial004.js!}
+```
+
+////
+
+ÐоÑле ÑÑого ID опеÑаÑий бÑдÑÑ Ð¿ÐµÑÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ñ Ñ ÑегоâÑо вÑоде `items-get_items` пÑоÑÑо в `get_items`, и генеÑаÑÐ¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа ÑÐ¼Ð¾Ð¶ÐµÑ ÑоздаваÑÑ Ð±Ð¾Ð»ÐµÐµ пÑоÑÑÑе имена меÑодов.
+
+### ÐенеÑаÑÐ¸Ñ TypeScriptâклиенÑа Ñ Ð¿ÑедобÑабоÑаннÑм OpenAPI { #generate-a-typescript-client-with-the-preprocessed-openapi }
+
+Так как конеÑнÑй ÑезÑлÑÑÐ°Ñ ÑепеÑÑ Ð² Ñайле `openapi.json`, нÑжно обновиÑÑ Ð²Ñ
одное ÑаÑположение:
+
+```sh
+npx @hey-api/openapi-ts -i ./openapi.json -o src/client
+```
+
+ÐоÑле генеÑаÑии нового клиенÑа Ñ Ð²Ð°Ñ Ð±ÑдÑÑ **ÑиÑÑÑе имена меÑодов**, Ñо вÑем **авÑозавеÑÑением**, **оÑибками пÑÑмо в ÑедакÑоÑе** и Ñ.д.:
+
+
+
+## ÐÑеимÑÑеÑÑва { #benefits }
+
+ÐÑи иÑполÑзовании авÑомаÑиÑеÑки ÑгенеÑиÑованнÑÑ
клиенÑов Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе **авÑозавеÑÑение** длÑ:
+
+* ÐеÑодов.
+* ÐаннÑÑ
запÑоÑа â в Ñеле запÑоÑа, queryâпаÑамеÑÑаÑ
и Ñ.д.
+* ÐаннÑÑ
оÑвеÑа.
+
+У Ð²Ð°Ñ Ñакже бÑдÑÑ **оÑибки пÑÑмо в ÑедакÑоÑе** Ð´Ð»Ñ Ð²Ñего.
+
+РкаждÑй Ñаз, когда Ð²Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑеÑе код бÑкенда и **пеÑегенеÑиÑÑеÑе** ÑÑонÑенд, в нÑм поÑвÑÑÑÑ Ð½Ð¾Ð²Ñе *опеÑаÑии пÑÑи* как меÑодÑ, ÑÑаÑÑе бÑдÑÑ ÑдаленÑ, а лÑбÑе дÑÑгие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾ÑÑазÑÑÑÑ Ð² ÑгенеÑиÑованном коде. ð¤
+
+ÐÑо Ñакже ознаÑаеÑ, ÑÑо еÑли ÑÑоâÑо изменилоÑÑ, ÑÑо бÑÐ´ÐµÑ **оÑÑажено** в клиенÑÑком коде авÑомаÑиÑеÑки. РеÑли Ð²Ñ **ÑобеÑÑÑе** клиенÑ, он завеÑÑиÑÑÑ Ñ Ð¾Ñибкой, еÑли гдеâÑо еÑÑÑ **неÑооÑвеÑÑÑвие** в иÑполÑзÑемÑÑ
даннÑÑ
.
+
+Таким обÑазом, Ð²Ñ **обнаÑÑжиÑе многие оÑибки** оÑÐµÐ½Ñ Ñано в Ñикле ÑазÑабоÑки, вмеÑÑо Ñого ÑÑÐ¾Ð±Ñ Ð¶Ð´Ð°ÑÑ, когда оÑибки пÑоÑвÑÑÑÑ Ñ ÐºÐ¾Ð½ÐµÑнÑÑ
полÑзоваÑелей в пÑодакÑн, и заÑем пÑÑаÑÑÑÑ Ð¾ÑладиÑÑ, в ÑÑм пÑоблема. â¨
diff --git a/docs/ru/docs/advanced/middleware.md b/docs/ru/docs/advanced/middleware.md
new file mode 100644
index 000000000..28802fd57
--- /dev/null
+++ b/docs/ru/docs/advanced/middleware.md
@@ -0,0 +1,97 @@
+# РаÑÑиÑенное иÑполÑзование middleware { #advanced-middleware }
+
+РоÑновном ÑÑководÑÑве Ð²Ñ ÑиÑали, как добавиÑÑ [полÑзоваÑелÑÑкое middleware](../tutorial/middleware.md){.internal-link target=_blank} в ваÑе пÑиложение.
+
+РзаÑем â как ÑабоÑаÑÑ Ñ [CORS Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `CORSMiddleware`](../tutorial/cors.md){.internal-link target=_blank}.
+
+Ð ÑÑом Ñазделе поÑмоÑÑим, как иÑполÑзоваÑÑ Ð´ÑÑгие middleware.
+
+## Ðобавление ASGI middleware { #adding-asgi-middlewares }
+
+Так как **FastAPI** оÑнован на Starlette и ÑеализÑÐµÑ ÑпеÑиÑикаÑÐ¸Ñ ASGI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð»Ñбое ASGI middleware.
+
+Middleware не обÑзаÑелÑно должно бÑÑÑ Ñделано ÑпеÑиалÑно Ð´Ð»Ñ FastAPI или Starlette â доÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¾ ÑооÑвеÑÑÑвовало ÑпеÑиÑикаÑии ASGI.
+
+РобÑем ÑлÑÑае ASGI middleware â ÑÑо клаÑÑÑ, коÑоÑÑе ожидаÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ASGIâпÑиложение пеÑвÑм аÑгÑменÑом.
+
+ÐоÑÑÐ¾Ð¼Ñ Ð² докÑменÑаÑии к ÑÑоÑонним ASGI middleware, ÑкоÑее вÑего, Ð²Ñ ÑвидиÑе ÑÑоâÑо вÑоде:
+
+```Python
+from unicorn import UnicornMiddleware
+
+app = SomeASGIApp()
+
+new_app = UnicornMiddleware(app, some_config="rainbow")
+```
+
+Ðо FastAPI (ÑоÑнее, Starlette) пÑедоÑÑавлÑÐµÑ Ð±Ð¾Ð»ÐµÐµ пÑоÑÑой ÑпоÑоб, коÑоÑÑй гаÑанÑиÑÑÐµÑ ÐºÐ¾ÑÑекÑнÑÑ Ð¾Ð±ÑабоÑÐºÑ Ð²Ð½ÑÑÑенниÑ
оÑибок ÑеÑвеÑа и коÑÑекÑнÑÑ ÑабоÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкиÑ
обÑабоÑÑиков иÑклÑÑений.
+
+ÐÐ»Ñ ÑÑого иÑполÑзÑйÑе `app.add_middleware()` (как в пÑимеÑе Ñ CORS).
+
+```Python
+from fastapi import FastAPI
+from unicorn import UnicornMiddleware
+
+app = FastAPI()
+
+app.add_middleware(UnicornMiddleware, some_config="rainbow")
+```
+
+`app.add_middleware()` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÐºÐ»Ð°ÑÑ middleware в каÑеÑÑве пеÑвого аÑгÑменÑа и лÑбÑе дополниÑелÑнÑе аÑгÑменÑÑ, коÑоÑÑе бÑдÑÑ Ð¿ÐµÑÐµÐ´Ð°Ð½Ñ ÑÑÐ¾Ð¼Ñ middleware.
+
+## ÐÑÑÑоеннÑе middleware { #integrated-middlewares }
+
+**FastAPI** вклÑÑÐ°ÐµÑ Ð½ÐµÑколÑко middleware Ð´Ð»Ñ ÑаÑпÑоÑÑÑанÑннÑÑ
ÑÑенаÑиев. Ðиже ÑаÑÑмоÑÑим, как иÑ
иÑполÑзоваÑÑ.
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+Ð ÑледÑÑÑиÑ
пÑимеÑаÑ
Ð²Ñ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette.middleware.something import SomethingMiddleware`.
+
+**FastAPI** пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко middleware в `fastapi.middleware` Ð´Ð»Ñ ÑдобÑÑва ÑазÑабоÑÑика. Ðо болÑÑинÑÑво доÑÑÑпнÑÑ
middleware пÑиÑ
Ð¾Ð´Ð¸Ñ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Starlette.
+
+///
+
+## `HTTPSRedirectMiddleware` { #httpsredirectmiddleware }
+
+ÐаÑанÑиÑÑеÑ, ÑÑо вÑе вÑ
одÑÑие запÑоÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ Ð»Ð¸Ð±Ð¾ `https`, либо `wss`.
+
+ÐÑбой вÑ
одÑÑий запÑÐ¾Ñ Ð¿Ð¾ `http` или `ws` бÑÐ´ÐµÑ Ð¿ÐµÑенапÑавлен на безопаÑнÑÑ ÑÑ
емÑ.
+
+{* ../../docs_src/advanced_middleware/tutorial001.py hl[2,6] *}
+
+## `TrustedHostMiddleware` { #trustedhostmiddleware }
+
+ÐаÑанÑиÑÑеÑ, ÑÑо во вÑеÑ
вÑ
одÑÑиÑ
запÑоÑаÑ
коÑÑекÑно ÑÑÑановлен `Host`âзаголовок, ÑÑÐ¾Ð±Ñ Ð·Ð°ÑиÑиÑÑÑÑ Ð¾Ñ Ð°Ñак на HTTPâзаголовок Host.
+
+{* ../../docs_src/advanced_middleware/tutorial002.py hl[2,6:8] *}
+
+ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие аÑгÑменÑÑ:
+
+- `allowed_hosts` â ÑпиÑок доменнÑÑ
имÑн, коÑоÑÑе ÑледÑÐµÑ ÑазÑеÑиÑÑ ÐºÐ°Ðº имена Ñ
оÑÑов. ÐодÑÑановки вида `*.example.com` поддеÑживаÑÑÑÑ Ð´Ð»Ñ ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´Ð¾Ð¼ÐµÐ½Ð¾Ð². ЧÑÐ¾Ð±Ñ ÑазÑеÑиÑÑ Ð»Ñбой Ñ
оÑÑ, иÑполÑзÑйÑе либо `allowed_hosts=["*"]`, либо не добавлÑйÑе ÑÑо middleware.
+- `www_redirect` â еÑли ÑÑÑановлено в True, запÑоÑÑ Ðº неâwww веÑÑиÑм ÑазÑеÑÑннÑÑ
Ñ
оÑÑов бÑдÑÑ Ð¿ÐµÑенапÑавлÑÑÑÑÑ Ð½Ð° иÑ
wwwâаналоги. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â `True`.
+
+ÐÑли вÑ
одÑÑий запÑÐ¾Ñ Ð½Ðµ пÑоÑ
Ð¾Ð´Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑиÑ, бÑÐ´ÐµÑ Ð¾ÑпÑавлен оÑÐ²ÐµÑ `400`.
+
+## `GZipMiddleware` { #gzipmiddleware }
+
+ÐбÑабаÑÑÐ²Ð°ÐµÑ GZipâоÑвеÑÑ Ð´Ð»Ñ Ð»ÑбÑÑ
запÑоÑов, коÑоÑÑе вклÑÑаÑÑ `"gzip"` в заголовке `Accept-Encoding`.
+
+ÐÑо middleware обÑабаÑÑÐ²Ð°ÐµÑ ÐºÐ°Ðº обÑÑнÑе, Ñак и поÑоковÑе оÑвеÑÑ.
+
+{* ../../docs_src/advanced_middleware/tutorial003.py hl[2,6] *}
+
+ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие аÑгÑменÑÑ:
+
+- `minimum_size` â не ÑжимаÑÑ GZipâом оÑвеÑÑ, ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾ÑоÑÑÑ
менÑÑе ÑÑого минималÑного знаÑÐµÐ½Ð¸Ñ Ð² байÑаÑ
. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â `500`.
+- `compresslevel` â ÑÑÐ¾Ð²ÐµÐ½Ñ GZipâÑжаÑиÑ. Целое ÑиÑло Ð¾Ñ 1 до 9. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â `9`. Ðолее низкое знаÑение â бÑÑÑÑеее ÑжаÑие, но болÑÑий ÑÐ°Ð·Ð¼ÐµÑ Ñайла; более вÑÑокое знаÑение â более медленное ÑжаÑие, но менÑÑий ÑÐ°Ð·Ð¼ÐµÑ Ñайла.
+
+## ÐÑÑгие middleware { #other-middlewares }
+
+СÑÑеÑÑвÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ дÑÑгиÑ
ASGI middleware.
+
+ÐапÑимеÑ:
+
+- `ProxyHeadersMiddleware` Ð¾Ñ Uvicorn
+- MessagePack
+
+ЧÑÐ¾Ð±Ñ ÑвидеÑÑ Ð´ÑÑгие доÑÑÑпнÑе middleware, поÑмоÑÑиÑе докÑменÑаÑÐ¸Ñ Ð¿Ð¾ middleware в Starlette и ÑпиÑок ASGI Awesome.
diff --git a/docs/ru/docs/advanced/openapi-callbacks.md b/docs/ru/docs/advanced/openapi-callbacks.md
new file mode 100644
index 000000000..faf58370b
--- /dev/null
+++ b/docs/ru/docs/advanced/openapi-callbacks.md
@@ -0,0 +1,186 @@
+# ÐбÑаÑнÑе вÑÐ·Ð¾Ð²Ñ Ð² OpenAPI { #openapi-callbacks }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ API Ñ *опеÑаÑией пÑÑи* (обÑабоÑÑиком пÑÑи), коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¸Ð½Ð¸ÑииÑоваÑÑ HTTP-запÑÐ¾Ñ Ðº *внеÑÐ½ÐµÐ¼Ñ API*, ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÐºÐµÐ¼-Ñо дÑÑгим (ÑкоÑее вÑего Ñем же ÑазÑабоÑÑиком, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð²Ð°Ñ API).
+
+ÐÑоÑеÑÑ, пÑоиÑÑ
одÑÑий, когда ваÑе пÑиложение API обÑаÑаеÑÑÑ Ðº *внеÑÐ½ÐµÐ¼Ñ API*, назÑваеÑÑÑ Â«callback» (обÑаÑнÑй вÑзов). ÐÑогÑаммное обеÑпеÑение, напиÑанное внеÑним ÑазÑабоÑÑиком, оÑпÑавлÑÐµÑ HTTP-запÑÐ¾Ñ Ð²Ð°ÑÐµÐ¼Ñ API, а заÑем Ð²Ð°Ñ API вÑполнÑÐµÑ Ð¾Ð±ÑаÑнÑй вÑзов, оÑпÑавлÑÑ HTTP-запÑÐ¾Ñ Ð²Ð¾ *внеÑний API* (коÑоÑÑй, веÑоÑÑно, Ñоже Ñоздал ÑÐ¾Ñ Ð¶Ðµ ÑазÑабоÑÑик).
+
+Ð ÑÑом ÑлÑÑае вам Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑоваÑÑ, как должно вÑглÑдеÑÑ ÑÑо внеÑнее API: какÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* оно должно имеÑÑ, какое Ñело запÑоÑа ожидаÑÑ, какой оÑÐ²ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¸ Ñ.д.
+
+## ÐÑиложение Ñ Ð¾Ð±ÑаÑнÑми вÑзовами { #an-app-with-callbacks }
+
+ÐавайÑе ÑаÑÑмоÑÑим ÑÑо на пÑимеÑе.
+
+ÐÑедÑÑавÑÑе, ÑÑо Ð²Ñ ÑазÑабаÑÑваеÑе пÑиложение, позволÑÑÑее ÑоздаваÑÑ ÑÑеÑа.
+
+ÐÑи ÑÑеÑа бÑдÑÑ Ð¸Ð¼ÐµÑÑ `id`, `title` (необÑзаÑелÑнÑй), `customer` и `total`.
+
+ÐолÑзоваÑÐµÐ»Ñ Ð²Ð°Ñего API (внеÑний ÑазÑабоÑÑик) ÑоздаÑÑ ÑÑÐµÑ Ð² ваÑем API Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ POST-запÑоÑа.
+
+ÐаÑем Ð²Ð°Ñ API (пÑедположим) ÑÐ´ÐµÐ»Ð°ÐµÑ ÑледÑÑÑее:
+
+* ÐÑпÑÐ°Ð²Ð¸Ñ ÑÑÐµÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð²Ð½ÐµÑнего ÑазÑабоÑÑика.
+* ÐолÑÑÐ¸Ñ Ð¾Ð¿Ð»Ð°ÑÑ.
+* ÐÑпÑÐ°Ð²Ð¸Ñ Ñведомление обÑаÑно полÑзоваÑÐµÐ»Ñ API (внеÑÐ½ÐµÐ¼Ñ ÑазÑабоÑÑикÑ).
+ * ÐÑо бÑÐ´ÐµÑ Ñделано оÑпÑавкой POST-запÑоÑа (из *ваÑего API*) в *внеÑний API*, пÑедоÑÑавленнÑй ÑÑим внеÑним ÑазÑабоÑÑиком (ÑÑо и еÑÑÑ Â«callback»).
+
+## ÐбÑÑное пÑиложение **FastAPI** { #the-normal-fastapi-app }
+
+СнаÑала поÑмоÑÑим, как бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð¾Ð±ÑÑное пÑиложение API до Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑного вÑзова.
+
+РнÑм бÑÐ´ÐµÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, коÑоÑÐ°Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ñело запÑоÑа `Invoice`, и query-паÑамеÑÑ `callback_url`, ÑодеÑжаÑий URL Ð´Ð»Ñ Ð¾Ð±ÑаÑного вÑзова.
+
+ÐÑа ÑаÑÑÑ Ð²Ð¿Ð¾Ð»Ð½Ðµ обÑÑна, болÑÑÐ°Ñ ÑаÑÑÑ ÐºÐ¾Ð´Ð° вам Ñже знакома:
+
+{* ../../docs_src/openapi_callbacks/tutorial001.py hl[9:13,36:53] *}
+
+/// tip | СовеÑ
+
+Query-паÑамеÑÑ `callback_url` иÑполÑзÑÐµÑ Ñип Pydantic Url.
+
+///
+
+ÐдинÑÑвенное новое â ÑÑо `callbacks=invoices_callback_router.routes` в каÑеÑÑве аÑгÑменÑа *декоÑаÑоÑа опеÑаÑии пÑÑи*. Ðалее ÑазбеÑÑмÑÑ, ÑÑо ÑÑо Ñакое.
+
+## ÐокÑменÑиÑование обÑаÑного вÑзова { #documenting-the-callback }
+
+РеалÑнÑй код обÑаÑного вÑзова бÑÐ´ÐµÑ ÑилÑно завиÑеÑÑ Ð¾Ñ Ð²Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ API.
+
+Ð, веÑоÑÑно, он бÑÐ´ÐµÑ Ð·Ð°Ð¼ÐµÑно оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ðº дÑÑгомÑ.
+
+ÐÑо могÑÑ Ð±ÑÑÑ Ð±ÑквалÑно одна-две ÑÑÑоки кода, напÑимеÑ:
+
+```Python
+callback_url = "https://example.com/api/v1/invoices/events/"
+httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
+```
+
+Ðо, возможно, ÑÐ°Ð¼Ð°Ñ Ð²Ð°Ð¶Ð½Ð°Ñ ÑаÑÑÑ Ð¾Ð±ÑаÑного вÑзова â ÑÑо ÑбедиÑÑÑÑ, ÑÑо полÑзоваÑÐµÐ»Ñ Ð²Ð°Ñего API (внеÑний ÑазÑабоÑÑик) пÑавилÑно ÑеализÑÐµÑ *внеÑний API* в ÑооÑвеÑÑÑвии Ñ Ð´Ð°Ð½Ð½Ñми, коÑоÑÑе *Ð²Ð°Ñ API* бÑÐ´ÐµÑ Ð¾ÑпÑавлÑÑÑ Ð² Ñеле запÑоÑа обÑаÑного вÑзова и Ñ.п.
+
+ÐоÑÑÐ¾Ð¼Ñ Ð´Ð°Ð»ÐµÐµ Ð¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ код, докÑменÑиÑÑÑÑий, как должен вÑглÑдеÑÑ ÑÑÐ¾Ñ *внеÑний API*, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¾Ð±ÑаÑнÑй вÑзов Ð¾Ñ *ваÑего API*.
+
+ÐÑа докÑменÑаÑÐ¸Ñ Ð¾ÑобÑазиÑÑÑ Ð² Swagger UI по адÑеÑÑ `/docs` в ваÑем API и Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð²Ð½ÐµÑним ÑазÑабоÑÑикам понÑÑÑ, как поÑÑÑоиÑÑ *внеÑний API*.
+
+Ð ÑÑом пÑимеÑе Ñам обÑаÑнÑй вÑзов не ÑеализÑеÑÑÑ (ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñего одна ÑÑÑока кода), ÑеализÑеÑÑÑ ÑолÑко ÑаÑÑÑ Ñ Ð´Ð¾ÐºÑменÑаÑией.
+
+/// tip | СовеÑ
+
+Сам обÑаÑнÑй вÑзов â ÑÑо вÑего лиÑÑ HTTP-запÑоÑ.
+
+РеализÑÑ Ð¾Ð±ÑаÑнÑй вÑзов, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ, напÑимеÑ, HTTPX или Requests.
+
+///
+
+## ÐапиÑиÑе код докÑменÑаÑии обÑаÑного вÑзова { #write-the-callback-documentation-code }
+
+ÐÑÐ¾Ñ ÐºÐ¾Ð´ не бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð² ваÑем пÑиложении, он нÑжен ÑолÑко Ð´Ð»Ñ *докÑменÑиÑованиÑ* Ñого, как должен вÑглÑдеÑÑ *внеÑний API*.
+
+Ðо Ð²Ñ Ñже знаеÑе, как легко полÑÑиÑÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð´Ð»Ñ API Ñ **FastAPI**.
+
+ÐÑ Ð¸ÑполÑзÑем Ñе же знаниÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑоваÑÑ, как должен вÑглÑдеÑÑ *внеÑний API*... Ñоздав *опеÑаÑии пÑÑи*, коÑоÑÑе внеÑний API должен ÑеализоваÑÑ (Ñе, коÑоÑÑе Ð²Ð°Ñ API бÑÐ´ÐµÑ Ð²ÑзÑваÑÑ).
+
+/// tip | СовеÑ
+
+Ðогда Ð²Ñ Ð¿Ð¸ÑеÑе код Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑаÑного вÑзова, полезно пÑедÑÑавиÑÑ, ÑÑо Ð²Ñ â ÑÐ¾Ñ ÑамÑй *внеÑний ÑазÑабоÑÑик*. Ð ÑÑо Ð²Ñ ÑейÑÐ°Ñ ÑеализÑеÑе *внеÑний API*, а не *Ñвой API*.
+
+ÐÑеменное пÑинÑÑие ÑÑой ÑоÑки зÑÐµÐ½Ð¸Ñ (внеÑнего ÑазÑабоÑÑика) Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð½ÑÑиÑивно понÑÑÑ, кÑда помеÑÑиÑÑ Ð¿Ð°ÑамеÑÑÑ, какÑÑ Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ Ñела запÑоÑа, Ð´Ð»Ñ Ð¾ÑвеÑа и Ñ.д. во *внеÑнем API*.
+
+///
+
+### СоздайÑе `APIRouter` Ð´Ð»Ñ Ð¾Ð±ÑаÑного вÑзова { #create-a-callback-apirouter }
+
+СнаÑала ÑоздайÑе новÑй `APIRouter`, коÑоÑÑй бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко обÑаÑнÑÑ
вÑзовов.
+
+{* ../../docs_src/openapi_callbacks/tutorial001.py hl[3,25] *}
+
+### СоздайÑе *опеÑаÑÐ¸Ñ Ð¿ÑÑи* Ð´Ð»Ñ Ð¾Ð±ÑаÑного вÑзова { #create-the-callback-path-operation }
+
+ЧÑÐ¾Ð±Ñ ÑоздаÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* Ð´Ð»Ñ Ð¾Ð±ÑаÑного вÑзова, иÑполÑзÑйÑе ÑÐ¾Ñ Ð¶Ðµ `APIRouter`, коÑоÑÑй Ð²Ñ Ñоздали вÑÑе.
+
+Ðна должна вÑглÑдеÑÑ ÐºÐ°Ðº обÑÑÐ½Ð°Ñ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* FastAPI:
+
+* ÐеÑоÑÑно, в ней должно бÑÑÑ Ð¾Ð±ÑÑвление Ñела запÑоÑа, напÑÐ¸Ð¼ÐµÑ `body: InvoiceEvent`.
+* Ð Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑÑвление модели оÑвеÑа, напÑÐ¸Ð¼ÐµÑ `response_model=InvoiceEventReceived`.
+
+{* ../../docs_src/openapi_callbacks/tutorial001.py hl[16:18,21:22,28:32] *}
+
+ÐÑÑÑ 2 оÑновнÑÑ
оÑлиÑÐ¸Ñ Ð¾Ñ Ð¾Ð±ÑÑной *опеÑаÑии пÑÑи*:
+
+* Ðй не нÑжен ÑеалÑнÑй код, поÑÐ¾Ð¼Ñ ÑÑо ваÑе пÑиложение никогда не бÑÐ´ÐµÑ Ð²ÑзÑваÑÑ ÑÑÑ ÑÑнкÑиÑ. Ðна иÑполÑзÑеÑÑÑ ÑолÑко Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ *внеÑнего API*. ÐоÑÑÐ¾Ð¼Ñ Ð² ÑÑнкÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑоÑÑо `pass`.
+* *ÐÑÑÑ* Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð²ÑÑажение OpenAPI 3 (подÑобнее ниже), где можно иÑполÑзоваÑÑ Ð¿ÐµÑеменнÑе Ñ Ð¿Ð°ÑамеÑÑами и ÑаÑÑи иÑÑ
одного HTTP-запÑоÑа, оÑпÑавленного *ваÑÐµÐ¼Ñ API*.
+
+### ÐÑÑажение пÑÑи Ð´Ð»Ñ Ð¾Ð±ÑаÑного вÑзова { #the-callback-path-expression }
+
+*ÐÑÑÑ* обÑаÑного вÑзова Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð²ÑÑажение OpenAPI 3, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ ÑаÑÑи иÑÑ
одного запÑоÑа, оÑпÑавленного *ваÑÐµÐ¼Ñ API*.
+
+РнаÑем ÑлÑÑае ÑÑо `str`:
+
+```Python
+"{$callback_url}/invoices/{$request.body.id}"
+```
+
+ÐÑак, еÑли полÑзоваÑÐµÐ»Ñ Ð²Ð°Ñего API (внеÑний ÑазÑабоÑÑик) оÑпÑавлÑÐµÑ HTTP-запÑÐ¾Ñ Ð²Ð°ÑÐµÐ¼Ñ API по адÑеÑÑ:
+
+```
+https://yourapi.com/invoices/?callback_url=https://www.external.org/events
+```
+
+Ñ Ñелом JSON:
+
+```JSON
+{
+ "id": "2expen51ve",
+ "customer": "Mr. Richie Rich",
+ "total": "9999"
+}
+```
+
+Ñо *Ð²Ð°Ñ API* обÑабоÑÐ°ÐµÑ ÑÑÑÑ Ð¸, в какой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾Ð·Ð¶Ðµ, оÑпÑÐ°Ð²Ð¸Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¾Ð±ÑаÑного вÑзова на `callback_url` (*внеÑний API*):
+
+```
+https://www.external.org/events/invoices/2expen51ve
+```
+
+Ñ Ñелом JSON пÑимеÑно Ñакого вида:
+
+```JSON
+{
+ "description": "Payment celebration",
+ "paid": true
+}
+```
+
+и бÑÐ´ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð¾Ñ *внеÑнего API* оÑÐ²ÐµÑ Ñ Ñелом JSON вида:
+
+```JSON
+{
+ "ok": true
+}
+```
+
+/// tip | СовеÑ
+
+ÐбÑаÑиÑе внимание, ÑÑо иÑполÑзÑемÑй URL обÑаÑного вÑзова ÑодеÑÐ¶Ð¸Ñ URL, полÑÑеннÑй как query-паÑамеÑÑ Ð² `callback_url` (`https://www.external.org/events`), а Ñакже `id` ÑÑÑÑа из Ñела JSON (`2expen51ve`).
+
+///
+
+### ÐодклÑÑиÑе маÑÑÑÑÑизаÑÐ¾Ñ Ð¾Ð±ÑаÑного вÑзова { #add-the-callback-router }
+
+Ð ÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð½ÐµÐ¾Ð±Ñ
одимÑе *опеÑаÑии пÑÑи* обÑаÑного вÑзова (Ñе, коÑоÑÑе *внеÑний ÑазÑабоÑÑик* должен ÑеализоваÑÑ Ð²Ð¾ *внеÑнем API*) в Ñозданном вÑÑе маÑÑÑÑÑизаÑоÑе обÑаÑнÑÑ
вÑзовов.
+
+ТепеÑÑ Ð¸ÑполÑзÑйÑе паÑамеÑÑ `callbacks` в *декоÑаÑоÑе опеÑаÑии пÑÑи ваÑего API*, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑедаÑÑ Ð°ÑÑибÑÑ `.routes` (ÑÑо, по ÑÑÑи, пÑоÑÑо `list` маÑÑÑÑÑов/*опеÑаÑий пÑÑи*) из ÑÑого маÑÑÑÑÑизаÑоÑа обÑаÑнÑÑ
вÑзовов:
+
+{* ../../docs_src/openapi_callbacks/tutorial001.py hl[35] *}
+
+/// tip | СовеÑ
+
+ÐбÑаÑиÑе внимание, ÑÑо Ð²Ñ Ð¿ÐµÑедаÑÑе не Ñам маÑÑÑÑÑизаÑÐ¾Ñ (`invoices_callback_router`) в `callback=`, а его аÑÑибÑÑ `.routes`, Ñо еÑÑÑ `invoices_callback_router.routes`.
+
+///
+
+### ÐÑовеÑÑÑе докÑменÑаÑÐ¸Ñ { #check-the-docs }
+
+ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ Ð¿Ñиложение и пеÑейÑи по адÑеÑÑ http://127.0.0.1:8000/docs.
+
+ÐÑ ÑвидиÑе докÑменÑаÑиÑ, вклÑÑаÑÑÑÑ Ñаздел «Callbacks» Ð´Ð»Ñ Ð²Ð°Ñей *опеÑаÑии пÑÑи*, коÑоÑÑй показÑваеÑ, как должен вÑглÑдеÑÑ *внеÑний API*:
+
+
diff --git a/docs/ru/docs/advanced/openapi-webhooks.md b/docs/ru/docs/advanced/openapi-webhooks.md
new file mode 100644
index 000000000..d38cf315f
--- /dev/null
+++ b/docs/ru/docs/advanced/openapi-webhooks.md
@@ -0,0 +1,55 @@
+# ÐебÑ
Ñки OpenAPI { #openapi-webhooks }
+
+ÐÑваÑÑ ÑлÑÑаи, когда Ð²Ñ Ñ
оÑиÑе ÑообÑиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑм ваÑего API, ÑÑо ваÑе пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ Ð¸Ñ
пÑиложение (оÑпÑавив HTTP-запÑоÑ) Ñ Ð½ÐµÐºÐ¾ÑоÑÑми даннÑми, обÑÑно ÑÑÐ¾Ð±Ñ ÑведомиÑÑ Ð¾ каком-Ñо ÑобÑÑии.
+
+ÐÑо ознаÑаеÑ, ÑÑо вмеÑÑо обÑÑного пÑоÑеÑÑа, когда полÑзоваÑели оÑпÑавлÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð²Ð°ÑÐµÐ¼Ñ API, Ð²Ð°Ñ API (или ваÑе пÑиложение) Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑпÑавлÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð² иÑ
ÑиÑÑÐµÐ¼Ñ (в иÑ
API, иÑ
пÑиложение).
+
+ÐбÑÑно ÑÑо назÑваеÑÑÑ Ð²ÐµÐ±Ñ
Ñком.
+
+## Шаги вебÑ
Ñков { #webhooks-steps }
+
+ÐбÑÑно пÑоÑеÑÑ Ñаков: Ð²Ñ Ð¾Ð¿ÑеделÑеÑе в Ñвоем коде, какое ÑообÑение Ð²Ñ Ð±ÑдеÑе оÑпÑавлÑÑÑ, Ñо еÑÑÑ Ñело запÑоÑа.
+
+ÐÑ Ñакже опÑеделÑеÑе, в какие моменÑÑ (пÑи какиÑ
ÑобÑÑиÑÑ
) ваÑе пÑиложение бÑÐ´ÐµÑ Ð¾ÑпÑавлÑÑÑ ÑÑи запÑоÑÑ.
+
+РваÑи полÑзоваÑели каким-Ñо обÑазом (напÑимеÑ, в вебâпанели) ÑказÑваÑÑ URL-адÑеÑ, на коÑоÑÑй ваÑе пÑиложение должно оÑпÑавлÑÑÑ ÑÑи запÑоÑÑ.
+
+ÐÑÑ Ð»Ð¾Ð³Ð¸ÐºÐ° ÑегиÑÑÑаÑии URL-адÑеÑов Ð´Ð»Ñ Ð²ÐµÐ±Ñ
Ñков и код, коÑоÑÑй ÑеалÑно оÑпÑавлÑÐµÑ ÑÑи запÑоÑÑ, Ñеликом на ваÑей ÑÑоÑоне. ÐÑ Ð¿Ð¸ÑеÑе ÑÑо Ñак, как вам нÑжно, в Ñвоем ÑобÑÑвенном коде.
+
+## ÐокÑменÑиÑование вебÑ
Ñков Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ FastAPI и OpenAPI { #documenting-webhooks-with-fastapi-and-openapi }
+
+С FastAPI, иÑполÑзÑÑ OpenAPI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑÑиÑ
вебÑ
Ñков, ÑÐ¸Ð¿Ñ HTTP-опеÑаÑий, коÑоÑÑе ваÑе пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑпÑавлÑÑÑ (напÑимеÑ, `POST`, `PUT` и Ñ.д.), а Ñакже Ñела запÑоÑов, коÑоÑÑе ваÑе пÑиложение бÑÐ´ÐµÑ Ð¾ÑпÑавлÑÑÑ.
+
+ÐÑо знаÑиÑелÑно ÑпÑоÑÑÐ¸Ñ Ð²Ð°Ñим полÑзоваÑелÑм ÑеализаÑÐ¸Ñ Ð¸Ñ
API Ð´Ð»Ñ Ð¿Ñиема ваÑиÑ
вебÑ
Ñк-запÑоÑов; возможно, они даже ÑмогÑÑ Ð°Ð²ÑомаÑиÑеÑки ÑгенеÑиÑоваÑÑ ÑаÑÑÑ ÐºÐ¾Ð´Ð° Ñвоего API.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐебÑ
Ñки доÑÑÑÐ¿Ð½Ñ Ð² OpenAPI 3.1.0 и вÑÑе, поддеÑживаÑÑÑÑ Ð² FastAPI `0.99.0` и новее.
+
+///
+
+## ÐÑиложение Ñ Ð²ÐµÐ±Ñ
Ñками { #an-app-with-webhooks }
+
+ÐÑи Ñоздании пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° **FastAPI** еÑÑÑ Ð°ÑÑибÑÑ `webhooks`, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑого можно обÑÑвлÑÑÑ Ð²ÐµÐ±Ñ
Ñки Ñак же, как Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе опеÑаÑии пÑÑи (обÑабоÑÑики пÑÑи), напÑÐ¸Ð¼ÐµÑ Ñ `@app.webhooks.post()`.
+
+{* ../../docs_src/openapi_webhooks/tutorial001.py hl[9:13,36:53] *}
+
+ÐпÑеделеннÑе вами вебÑ
Ñки попадÑÑ Ð² ÑÑ
ÐµÐ¼Ñ **OpenAPI** и в авÑомаÑиÑеÑкий **инÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии**.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐбÑÐµÐºÑ `app.webhooks` на Ñамом деле â ÑÑо обÑÑнÑй `APIRouter`, ÑÐ¾Ñ Ð¶Ðµ Ñип, коÑоÑÑй Ð²Ñ Ð¸ÑполÑзÑеÑе пÑи ÑÑÑÑкÑÑÑиÑовании пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ неÑколÑким Ñайлам.
+
+///
+
+ÐбÑаÑиÑе внимание: в ÑлÑÑае Ñ Ð²ÐµÐ±Ñ
Ñками Ð²Ñ Ð½Ð° Ñамом деле не обÑÑвлÑеÑе пÑÑÑ (напÑимеÑ, `/items/`), пеÑедаваемÑй ÑÑда ÑекÑÑ â ÑÑо лиÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð²ÐµÐ±Ñ
Ñка (Ð¸Ð¼Ñ ÑобÑÑиÑ). ÐапÑимеÑ, в `@app.webhooks.post("new-subscription")` Ð¸Ð¼Ñ Ð²ÐµÐ±Ñ
Ñка â `new-subscription`.
+
+ÐÑо ÑвÑзано Ñ Ñем, ÑÑо пÑедполагаеÑÑÑ: ÑакÑиÑеÑкий URLâпÑÑÑ, по коÑоÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ Ñ
оÑÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²ÐµÐ±Ñ
Ñка, ваÑи полÑзоваÑели ÑкажÑÑ ÐºÐ°ÐºÐ¸Ð¼-Ñо дÑÑгим обÑазом (напÑимеÑ, в вебâпанели).
+
+### ÐоÑмоÑÑиÑе докÑменÑаÑÐ¸Ñ { #check-the-docs }
+
+ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ Ð¿Ñиложение и пеÑейÑи по ÑÑÑлке http://127.0.0.1:8000/docs.
+
+ÐÑ ÑвидиÑе, ÑÑо в докÑменÑаÑии еÑÑÑ Ð¾Ð±ÑÑнÑе опеÑаÑии пÑÑи, а Ñакже поÑвилиÑÑ Ð²ÐµÐ±Ñ
Ñки:
+
+
diff --git a/docs/ru/docs/advanced/path-operation-advanced-configuration.md b/docs/ru/docs/advanced/path-operation-advanced-configuration.md
new file mode 100644
index 000000000..fcb3cd47f
--- /dev/null
+++ b/docs/ru/docs/advanced/path-operation-advanced-configuration.md
@@ -0,0 +1,204 @@
+# РаÑÑиÑÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑий пÑÑи { #path-operation-advanced-configuration }
+
+## OpenAPI operationId { #openapi-operationid }
+
+/// warning | ÐÑедÑпÑеждение
+
+ÐÑли Ð²Ñ Ð½Ðµ «ÑкÑпеÑÑ» по OpenAPI, ÑкоÑее вÑего, ÑÑо вам не нÑжно.
+
+///
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ OpenAPI `operationId`, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² ваÑей *опеÑаÑии пÑÑи*, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа `operation_id`.
+
+ÐÑжно ÑбедиÑÑÑÑ, ÑÑо он Ñникален Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ опеÑаÑии.
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial001.py hl[6] *}
+
+### ÐÑполÑзование имени ÑÑнкÑии-обÑабоÑÑика пÑÑи как operationId { #using-the-path-operation-function-name-as-the-operationid }
+
+ÐÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑÑнкÑий ваÑиÑ
API в каÑеÑÑве `operationId`, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑойÑи по вÑем из ниÑ
и пеÑеопÑеделиÑÑ `operation_id` каждой *опеÑаÑии пÑÑи* Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸Ñ
`APIRoute.name`.
+
+ÐелаÑÑ ÑÑо ÑледÑÐµÑ Ð¿Ð¾Ñле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÑеÑ
*опеÑаÑий пÑÑи*.
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial002.py hl[2, 12:21, 24] *}
+
+/// tip | СовеÑ
+
+ÐÑли Ð²Ñ Ð²ÑзÑваеÑе `app.openapi()` вÑÑÑнÑÑ, обновиÑе `operationId` до ÑÑого.
+
+///
+
+/// warning | ÐÑедÑпÑеждение
+
+ÐÑли Ð²Ñ Ð´ÐµÐ»Ð°ÐµÑе ÑÑо, ÑбедиÑеÑÑ, ÑÑо ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· ваÑиÑ
*ÑÑнкÑий-обÑабоÑÑиков пÑÑи* Ð¸Ð¼ÐµÐµÑ ÑникалÑное имÑ.
+
+Ðаже еÑли они наÑ
одÑÑÑÑ Ð² ÑазнÑÑ
модÑлÑÑ
(ÑайлаÑ
Python).
+
+///
+
+## ÐÑклÑÑиÑÑ Ð¸Ð· OpenAPI { #exclude-from-openapi }
+
+ЧÑÐ¾Ð±Ñ Ð¸ÑклÑÑиÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* из генеÑиÑÑемой ÑÑ
ÐµÐ¼Ñ OpenAPI (а знаÑиÑ, и из авÑомаÑиÑеÑкой докÑменÑаÑии), иÑполÑзÑйÑе паÑамеÑÑ `include_in_schema` и ÑÑÑановиÑе его в `False`:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial003.py hl[6] *}
+
+## РаÑÑиÑенное опиÑание из docstring { #advanced-description-from-docstring }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе огÑаниÑиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑÑок из docstring *ÑÑнкÑии-обÑабоÑÑика пÑÑи*, иÑполÑзÑемÑÑ
Ð´Ð»Ñ OpenAPI.
+
+Ðобавление `\f` (ÑкÑаниÑованного Ñимвола «form feed») заÑÑÐ°Ð²Ð¸Ñ **FastAPI** обÑезаÑÑ ÑекÑÑ, иÑполÑзÑемÑй Ð´Ð»Ñ OpenAPI, в ÑÑой ÑоÑке.
+
+ÐÑа ÑаÑÑÑ Ð½Ðµ попадÑÑ Ð² докÑменÑаÑиÑ, но дÑÑгие инÑÑÑÑменÑÑ (напÑимеÑ, Sphinx) ÑмогÑÑ Ð¸ÑполÑзоваÑÑ Ð¾ÑÑалÑное.
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial004.py hl[19:29] *}
+
+## ÐополниÑелÑнÑе оÑвеÑÑ { #additional-responses }
+
+ÐÑ, веÑоÑÑно, Ñже видели, как обÑÑвлÑÑÑ `response_model` и `status_code` Ð´Ð»Ñ *опеÑаÑии пÑÑи*.
+
+ÐÑо опÑеделÑÐµÑ Ð¼ÐµÑаданнÑе об оÑновном оÑвеÑе *опеÑаÑии пÑÑи*.
+
+Также можно обÑÑвлÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе оÑвеÑÑ Ñ Ð¸Ñ
моделÑми, ÑÑаÑÑÑ-кодами и Ñ.д.
+
+РдокÑменÑаÑии еÑÑÑ ÑÐµÐ»Ð°Ñ Ð³Ð»Ð°Ð²Ð° об ÑÑом â [ÐополниÑелÑнÑе оÑвеÑÑ Ð² OpenAPI](additional-responses.md){.internal-link target=_blank}.
+
+## ÐополниÑелÑнÑе даннÑе OpenAPI { #openapi-extra }
+
+Ðогда Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе *опеÑаÑÐ¸Ñ Ð¿ÑÑи* в ÑвоÑм пÑиложении, **FastAPI** авÑомаÑиÑеÑки генеÑиÑÑÐµÑ ÑооÑвеÑÑÑвÑÑÑие меÑаданнÑе об ÑÑой *опеÑаÑии пÑÑи* Ð´Ð»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð² ÑÑ
ÐµÐ¼Ñ OpenAPI.
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+Ð ÑпеÑиÑикаÑии OpenAPI ÑÑо назÑваеÑÑÑ ÐбÑÐµÐºÑ Ð¾Ð¿ÐµÑаÑии.
+
+///
+
+Ðн ÑодеÑÐ¶Ð¸Ñ Ð²ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± *опеÑаÑии пÑÑи* и иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии авÑомаÑиÑеÑкой докÑменÑаÑии.
+
+Там еÑÑÑ `tags`, `parameters`, `requestBody`, `responses` и Ñ.д.
+
+ÐÑа ÑпеÑиÑикаÑÐ¸Ñ OpenAPI, ÑпеÑиÑиÑÐ½Ð°Ñ Ð´Ð»Ñ *опеÑаÑии пÑÑи*, обÑÑно генеÑиÑÑеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки **FastAPI**, но Ð²Ñ Ñакже можеÑе ÐµÑ ÑаÑÑиÑиÑÑ.
+
+/// tip | СовеÑ
+
+ÐÑо низкоÑÑÐ¾Ð²Ð½ÐµÐ²Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑаÑÑиÑениÑ.
+
+ÐÑли вам нÑжно лиÑÑ Ð¾Ð±ÑÑвиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе оÑвеÑÑ, Ñдобнее ÑделаÑÑ ÑÑо ÑеÑез [ÐополниÑелÑнÑе оÑвеÑÑ Ð² OpenAPI](additional-responses.md){.internal-link target=_blank}.
+
+///
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑаÑÑиÑиÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI Ð´Ð»Ñ *опеÑаÑии пÑÑи* Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа `openapi_extra`.
+
+### РаÑÑиÑÐµÐ½Ð¸Ñ OpenAPI { #openapi-extensions }
+
+`openapi_extra` Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑигодиÑÑÑÑ, напÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвиÑÑ [РаÑÑиÑÐµÐ½Ð¸Ñ OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specificationExtensions):
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial005.py hl[6] *}
+
+ÐÑли Ð²Ñ Ð¾ÑкÑоеÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API, ваÑе ÑаÑÑиÑение поÑвиÑÑÑ Ð²Ð½Ð¸Ð·Ñ ÑÑÑаниÑÑ ÐºÐ¾Ð½ÐºÑеÑной *опеÑаÑии пÑÑи*.
+
+
+
+РеÑли Ð²Ñ Ð¿Ð¾ÑмоÑÑиÑе на иÑоговÑй OpenAPI (по адÑеÑÑ `/openapi.json` ваÑего API), Ð²Ñ Ñакже ÑвидиÑе ÑÐ²Ð¾Ñ ÑаÑÑиÑение в ÑоÑÑаве опиÑÐ°Ð½Ð¸Ñ ÑооÑвеÑÑÑвÑÑÑей *опеÑаÑии пÑÑи*:
+
+```JSON hl_lines="22"
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "FastAPI",
+ "version": "0.1.0"
+ },
+ "paths": {
+ "/items/": {
+ "get": {
+ "summary": "Read Items",
+ "operationId": "read_items_items__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ },
+ "x-aperture-labs-portal": "blue"
+ }
+ }
+ }
+}
+```
+
+### ÐолÑзоваÑелÑÑÐºÐ°Ñ ÑÑ
ема OpenAPI Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи { #custom-openapi-path-operation-schema }
+
+СловаÑÑ Ð² `openapi_extra` бÑÐ´ÐµÑ Ð¾Ð±ÑединÑн Ñ Ð°Ð²ÑомаÑиÑеÑки ÑгенеÑиÑованной ÑÑ
емой OpenAPI Ð´Ð»Ñ *опеÑаÑии пÑÑи*.
+
+Таким обÑазом, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе даннÑе к авÑомаÑиÑеÑки ÑгенеÑиÑованной ÑÑ
еме.
+
+ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑеÑиÑÑ ÑиÑаÑÑ Ð¸ валидиÑоваÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ñвоим кодом, не иÑполÑзÑÑ Ð°Ð²ÑомаÑиÑеÑкие возможноÑÑи FastAPI и Pydantic, но пÑи ÑÑом заÑ
оÑиÑе опиÑаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð² ÑÑ
еме OpenAPI.
+
+ÐÑо можно ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `openapi_extra`:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial006.py hl[19:36, 39:40] *}
+
+Ð ÑÑом пÑимеÑе Ð¼Ñ Ð½Ðµ обÑÑвлÑли никакÑÑ Pydantic-моделÑ. ФакÑиÑеÑки Ñело запÑоÑа даже не ÑаÑпаÑÑено как JSON, оно ÑиÑаеÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ ÐºÐ°Ðº `bytes`, а ÑÑнкÑÐ¸Ñ `magic_data_reader()` бÑÐ´ÐµÑ Ð¾ÑвеÑаÑÑ Ð·Ð° его паÑÑинг каким-Ñо ÑпоÑобом.
+
+Тем не менее, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ обÑÑвиÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼ÑÑ ÑÑ
ÐµÐ¼Ñ Ð´Ð»Ñ Ñела запÑоÑа.
+
+### ÐолÑзоваÑелÑÑкий Ñип ÑодеÑжимого в OpenAPI { #custom-openapi-content-type }
+
+ÐÑполÑзÑÑ ÑÐ¾Ñ Ð¶Ðµ пÑиÑм, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе воÑполÑзоваÑÑÑÑ Pydantic-моделÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ JSON Schema, коÑоÑÐ°Ñ Ð·Ð°Ñем бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑена в полÑзоваÑелÑÑкий Ñаздел ÑÑ
ÐµÐ¼Ñ OpenAPI Ð´Ð»Ñ *опеÑаÑии пÑÑи*.
+
+Ð Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ ÑÑо, даже еÑли Ñип даннÑÑ
в запÑоÑе â не JSON.
+
+ÐапÑимеÑ, в ÑÑом пÑиложении Ð¼Ñ Ð½Ðµ иÑполÑзÑем вÑÑÑоеннÑÑ ÑÑнкÑионалÑноÑÑÑ FastAPI Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ JSON Schema из моделей Pydantic, Ñавно как и авÑомаÑиÑеÑкÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ JSON. ÐÑ Ð¾Ð±ÑÑвлÑем Ñип ÑодеÑжимого запÑоÑа как YAML, а не JSON:
+
+//// tab | Pydantic v2
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007.py hl[17:22, 24] *}
+
+////
+
+//// tab | Pydantic v1
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_pv1.py hl[17:22, 24] *}
+
+////
+
+/// info | ÐнÑоÑмаÑиÑ
+
+Ð Pydantic веÑÑии 1 меÑод Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ JSON Schema модели назÑвалÑÑ `Item.schema()`, в Pydantic веÑÑии 2 меÑод назÑваеÑÑÑ `Item.model_json_schema()`.
+
+///
+
+Тем не менее, Ñ
оÑÑ Ð¼Ñ Ð½Ðµ иÑполÑзÑем вÑÑÑоеннÑÑ ÑÑнкÑионалÑноÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ, Ð¼Ñ Ð²ÑÑ Ñавно иÑполÑзÑем Pydantic-моделÑ, ÑÑÐ¾Ð±Ñ Ð²ÑÑÑнÑÑ ÑгенеÑиÑоваÑÑ JSON Schema Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
, коÑоÑÑе Ð¼Ñ Ñ
оÑим полÑÑиÑÑ Ð² YAML.
+
+ÐаÑем Ð¼Ñ ÑабоÑаем Ñ Ð·Ð°Ð¿ÑоÑом напÑÑмÑÑ Ð¸ извлекаем Ñело как `bytes`. ÐÑо ознаÑаеÑ, ÑÑо FastAPI даже не попÑÑаеÑÑÑ ÑаÑпаÑÑиÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½ÑÑ Ð½Ð°Ð³ÑÑÐ·ÐºÑ Ð·Ð°Ð¿ÑоÑа как JSON.
+
+РзаÑем в наÑем коде Ð¼Ñ Ð½Ð°Ð¿ÑÑмÑÑ Ð¿Ð°ÑÑим ÑÑÐ¾Ñ YAML и Ñнова иÑполÑзÑем ÑÑ Ð¶Ðµ Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии YAML-ÑодеÑжимого:
+
+//// tab | Pydantic v2
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007.py hl[26:33] *}
+
+////
+
+//// tab | Pydantic v1
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_pv1.py hl[26:33] *}
+
+////
+
+/// info | ÐнÑоÑмаÑиÑ
+
+Ð Pydantic веÑÑии 1 меÑод Ð´Ð»Ñ Ð¿Ð°ÑÑинга и валидаÑии обÑекÑа назÑвалÑÑ `Item.parse_obj()`, в Pydantic веÑÑии 2 меÑод назÑваеÑÑÑ `Item.model_validate()`.
+
+///
+
+/// tip | СовеÑ
+
+ÐдеÑÑ Ð¼Ñ Ð¿ÐµÑеиÑполÑзÑем ÑÑ Ð¶Ðµ Pydantic-моделÑ.
+
+Ðо аналогиÑно Ð¼Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð²Ð°Ð»Ð¸Ð´Ð¸ÑоваÑÑ Ð´Ð°Ð½Ð½Ñе и каким-Ñо дÑÑгим ÑпоÑобом.
+
+///
diff --git a/docs/ru/docs/advanced/response-headers.md b/docs/ru/docs/advanced/response-headers.md
new file mode 100644
index 000000000..81e52cb69
--- /dev/null
+++ b/docs/ru/docs/advanced/response-headers.md
@@ -0,0 +1,41 @@
+# HTTP-заголовки оÑвеÑа { #response-headers }
+
+## ÐÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `Response` { #use-a-response-parameter }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей ÑÑнкÑии-обÑабоÑÑике пÑÑи (как можно ÑделаÑÑ Ð¸ Ð´Ð»Ñ cookie).
+
+РзаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑанавливаÑÑ HTTP-заголовки в ÑÑом *вÑеменном* обÑекÑе оÑвеÑа.
+
+{* ../../docs_src/response_headers/tutorial002.py hl[1, 7:8] *}
+
+ÐоÑле ÑÑого Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе веÑнÑÑÑ Ð»Ñбой нÑжнÑй обÑекÑ, как обÑÑно (напÑимеÑ, `dict`, Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¸Ð· Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ.д.).
+
+Ð, еÑли Ð²Ñ Ð¾Ð±ÑÑвили `response_model`, он вÑÑ Ñавно бÑÐ´ÐµÑ Ð¸ÑполÑзован Ð´Ð»Ñ ÑилÑÑÑаÑии и пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÑнного обÑекÑа.
+
+**FastAPI** иÑполÑзÑÐµÑ ÑÑÐ¾Ñ *вÑеменнÑй* оÑвеÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð²Ð»ÐµÑÑ HTTP-заголовки (а Ñакже cookie и ÑÑаÑÑÑ-код) и помеÑÑÐ¸Ñ Ð¸Ñ
в ÑиналÑнÑй HTTP-оÑвеÑ, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÑнное вами знаÑение, оÑÑилÑÑÑованное ÑоглаÑно `response_model`.
+
+ÐÑ Ñакже можеÑе обÑÑвлÑÑÑ Ð¿Ð°ÑамеÑÑ `Response` в завиÑимоÑÑÑÑ
и ÑÑÑанавливаÑÑ Ð² ниÑ
заголовки (и cookie).
+
+## ÐеÑнÑÑÑ `Response` напÑÑмÑÑ { #return-a-response-directly }
+
+ÐÑ Ñакже можеÑе добавиÑÑ HTTP-заголовки, когда возвÑаÑаеÑе `Response` напÑÑмÑÑ.
+
+СоздайÑе оÑвеÑ, как опиÑано в [ÐеÑнÑÑÑ Response напÑÑмÑÑ](response-directly.md){.internal-link target=_blank}, и пеÑедайÑе заголовки как дополниÑелÑнÑй паÑамеÑÑ:
+
+{* ../../docs_src/response_headers/tutorial001.py hl[10:12] *}
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette.responses import Response` или `from starlette.responses import JSONResponse`.
+
+**FastAPI** пÑедоÑÑавлÑÐµÑ Ñе же ÑамÑе `starlette.responses` как `fastapi.responses` â Ð´Ð»Ñ Ð²Ð°Ñего ÑдобÑÑва как ÑазÑабоÑÑика. Ðо болÑÑинÑÑво доÑÑÑпнÑÑ
клаÑÑов оÑвеÑов поÑÑÑпаÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Starlette.
+
+РпоÑколÑÐºÑ `Response` ÑаÑÑо иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÑÑановки заголовков и cookie, **FastAPI** Ñакже пÑедоÑÑавлÑÐµÑ ÐµÐ³Ð¾ как `fastapi.Response`.
+
+///
+
+## ÐолÑзоваÑелÑÑкие HTTP-заголовки { #custom-headers }
+
+ÐомниÑе, ÑÑо ÑобÑÑвеннÑе пÑопÑиеÑаÑнÑе заголовки можно добавлÑÑÑ, иÑполÑзÑÑ Ð¿ÑеÑÐ¸ÐºÑ `X-`.
+
+Ðо еÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие заголовки, коÑоÑÑе Ð²Ñ Ñ
оÑиÑе показÑваÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð² бÑаÑзеÑе, вам нÑжно добавиÑÑ Ð¸Ñ
в наÑÑÑойки CORS (подÑобнее Ñм. в [CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md){.internal-link target=_blank}), иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑ `expose_headers`, опиÑаннÑй в докÑменÑаÑии Starlette по CORS.
diff --git a/docs/ru/docs/advanced/security/http-basic-auth.md b/docs/ru/docs/advanced/security/http-basic-auth.md
new file mode 100644
index 000000000..41e62d4bf
--- /dev/null
+++ b/docs/ru/docs/advanced/security/http-basic-auth.md
@@ -0,0 +1,107 @@
+# HTTP Basic Auth { #http-basic-auth }
+
+ÐÐ»Ñ ÑамÑÑ
пÑоÑÑÑÑ
ÑлÑÑаев можно иÑполÑзоваÑÑ HTTP Basic Auth.
+
+ÐÑи HTTP Basic Auth пÑиложение Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ HTTP-заголовок, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ паÑолÑ.
+
+ÐÑли его неÑ, возвÑаÑаеÑÑÑ Ð¾Ñибка HTTP 401 «Unauthorized».
+
+Также возвÑаÑаеÑÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº `WWW-Authenticate` Ñо знаÑением `Basic` и необÑзаÑелÑнÑм паÑамеÑÑом `realm`.
+
+ÐÑо говоÑÐ¸Ñ Ð±ÑаÑзеÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ Ð²ÑÑÑоенное окно запÑоÑа имени полÑзоваÑÐµÐ»Ñ Ð¸ паÑолÑ.
+
+ÐаÑем, когда Ð²Ñ Ð²Ð²Ð¾Ð´Ð¸Ñе ÑÑи даннÑе, бÑаÑÐ·ÐµÑ Ð°Ð²ÑомаÑиÑеÑки оÑпÑавлÑÐµÑ Ð¸Ñ
в заголовке.
+
+## ÐÑоÑÑой HTTP Basic Auth { #simple-http-basic-auth }
+
+* ÐмпоÑÑиÑÑйÑе `HTTPBasic` и `HTTPBasicCredentials`.
+* СоздайÑе «ÑÑ
емÑ» `security` Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `HTTPBasic`.
+* ÐÑполÑзÑйÑе ÑÑÑ `security` как завиÑимоÑÑÑ Ð² ваÑей *опеÑаÑии пÑÑи*.
+* Ðна возвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÐµÐºÑ Ñипа `HTTPBasicCredentials`:
+ * Ðн ÑодеÑÐ¶Ð¸Ñ Ð¾ÑпÑавленнÑе `username` и `password`.
+
+{* ../../docs_src/security/tutorial006_an_py39.py hl[4,8,12] *}
+
+Ðогда Ð²Ñ Ð²Ð¿ÐµÑвÑе оÑкÑоеÑе URL (или нажмÑÑе ÐºÐ½Ð¾Ð¿ÐºÑ Â«Execute» в докÑменÑаÑии), бÑаÑÐ·ÐµÑ Ð¿Ð¾Ð¿ÑоÑÐ¸Ñ Ð²Ð²ÐµÑÑи Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ паÑолÑ:
+
+
+
+## ÐÑовеÑка имени полÑзоваÑÐµÐ»Ñ { #check-the-username }
+
+ÐÐ¾Ñ Ð±Ð¾Ð»ÐµÐµ полнÑй пÑимеÑ.
+
+ÐÑполÑзÑйÑе завиÑимоÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ, коÑÑекÑÐ½Ñ Ð»Ð¸ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ паÑолÑ.
+
+ÐÐ»Ñ ÑÑого иÑполÑзÑйÑе ÑÑандаÑÑнÑй модÑÐ»Ñ Python `secrets` Ð´Ð»Ñ Ð¿ÑовеÑки имени полÑзоваÑÐµÐ»Ñ Ð¸ паÑолÑ.
+
+`secrets.compare_digest()` должен полÑÑаÑÑ `bytes` или `str`, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ ÑолÑко ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ASCII (английÑкие ÑимволÑ). ÐÑо знаÑиÑ, ÑÑо он не бÑÐ´ÐµÑ ÑабоÑаÑÑ Ñ Ñимволами вÑоде `á`, как в `Sebastián`.
+
+ЧÑÐ¾Ð±Ñ ÑÑо обÑабоÑаÑÑ, ÑнаÑала пÑеобÑазÑем `username` и `password` в `bytes`, закодиÑовав иÑ
в UTF-8.
+
+ÐаÑем можно иÑполÑзоваÑÑ `secrets.compare_digest()`, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо `credentials.username` Ñавен `"stanleyjobson"`, а `credentials.password` â `"swordfish"`.
+
+{* ../../docs_src/security/tutorial007_an_py39.py hl[1,12:24] *}
+
+ÐÑо бÑло Ð±Ñ Ð¿Ð¾Ñ
оже на:
+
+```Python
+if not (credentials.username == "stanleyjobson") or not (credentials.password == "swordfish"):
+ # ÐеÑнÑÑÑ Ð¾ÑибкÑ
+ ...
+```
+
+Ðо иÑполÑзÑÑ `secrets.compare_digest()`, Ð²Ñ Ð·Ð°ÑиÑиÑе код Ð¾Ñ Ð°Ñак Ñипа «ÑÐ°Ð¹Ð¼Ð¸Ð½Ð³Ð¾Ð²Ð°Ñ Ð°Ñака» (аÑака по вÑемени).
+
+### ТайминговÑе аÑаки { #timing-attacks }
+
+ЧÑо Ñакое «ÑÐ°Ð¹Ð¼Ð¸Ð½Ð³Ð¾Ð²Ð°Ñ Ð°Ñака»?
+
+ÐÑедÑÑавим, ÑÑо злоÑмÑÑленники пÑÑаÑÑÑÑ ÑгадаÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ паÑолÑ.
+
+Рони оÑпÑавлÑÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ полÑзоваÑÐµÐ»Ñ `johndoe` и паÑолем `love123`.
+
+Тогда Python-код в ваÑем пÑиложении бÑÐ´ÐµÑ ÑквиваленÑен ÑемÑ-Ñо вÑоде:
+
+```Python
+if "johndoe" == "stanleyjobson" and "love123" == "swordfish":
+ ...
+```
+
+Ðо в моменÑ, когда Python ÑÑÐ°Ð²Ð½Ð¸Ñ Ð¿ÐµÑвÑÑ `j` в `johndoe` Ñ Ð¿ÐµÑвой `s` в `stanleyjobson`, он веÑнÑÑ `False`, поÑÐ¾Ð¼Ñ ÑÑо Ñже ÑÑно, ÑÑо ÑÑÑоки не ÑовпадаÑÑ, ÑеÑив, ÑÑо Â«Ð½ÐµÑ ÑмÑÑла ÑÑаÑиÑÑ ÑеÑÑÑÑÑ Ð½Ð° ÑÑавнение оÑÑалÑнÑÑ
бÑкв». РваÑе пÑиложение оÑвеÑÐ¸Ñ Â«ÐевеÑное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ паÑолÑ».
+
+ÐаÑем злоÑмÑÑленники попÑобÑÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ `stanleyjobsox` и паÑÐ¾Ð»Ñ `love123`.
+
+Ð Ð²Ð°Ñ ÐºÐ¾Ð´ ÑÐ´ÐµÐ»Ð°ÐµÑ ÑÑо-Ñо вÑоде:
+
+```Python
+if "stanleyjobsox" == "stanleyjobson" and "love123" == "swordfish":
+ ...
+```
+
+PythonÑ Ð¿ÑидÑÑÑÑ ÑÑавниÑÑ Ð²ÐµÑÑ Ð¾Ð±Ñий пÑеÑÐ¸ÐºÑ `stanleyjobso` в `stanleyjobsox` и `stanleyjobson`, пÑежде Ñем понÑÑÑ, ÑÑо ÑÑÑоки оÑлиÑаÑÑÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð½Ð° оÑÐ²ÐµÑ Â«ÐевеÑное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ паÑолÑ» ÑйдÑÑ Ð½Ð° неÑколÑко микÑоÑекÑнд болÑÑе.
+
+#### ÐÑÐµÐ¼Ñ Ð¾ÑвеÑа Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð·Ð»Ð¾ÑмÑÑленникам { #the-time-to-answer-helps-the-attackers }
+
+ÐамеÑаÑ, ÑÑо ÑеÑÐ²ÐµÑ Ð¿ÑиÑлал «ÐевеÑное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ паÑолÑ» на неÑколÑко микÑоÑекÑнд позже, злоÑмÑÑленники поймÑÑ, ÑÑо какаÑ-Ñо ÑаÑÑÑ Ð±Ñла Ñгадана â наÑалÑнÑе бÑÐºÐ²Ñ Ð²ÐµÑнÑ.
+
+Тогда они могÑÑ Ð¿Ð¾Ð¿ÑобоваÑÑ Ñнова, знаÑ, ÑÑо пÑавилÑнее ÑÑо-Ñо ближе к `stanleyjobsox`, Ñем к `johndoe`.
+
+#### «ÐÑоÑеÑÑионалÑнаÑ» аÑака { #a-professional-attack }
+
+ÐонеÑно, злоÑмÑÑленники не бÑдÑÑ Ð´ÐµÐ»Ð°ÑÑ Ð²ÑÑ ÑÑо вÑÑÑнÑÑ â они напиÑÑÑ Ð¿ÑогÑаммÑ, возможно, Ñ ÑÑÑÑÑами или миллионами попÑÑок в ÑекÑндÑ. РбÑдÑÑ Ð¿Ð¾Ð´Ð±Ð¸ÑаÑÑ Ð¿Ð¾ одной дополниÑелÑной веÑной бÑкве за Ñаз.
+
+Так за минÑÑÑ Ð¸Ð»Ð¸ ÑаÑÑ Ð¾Ð½Ð¸ ÑмогÑÑ ÑгадаÑÑ Ð¿ÑавилÑнÑе Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ паÑÐ¾Ð»Ñ â Ñ Â«Ð¿Ð¾Ð¼Ð¾ÑÑÑ» наÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â иÑполÑзÑÑ Ð»Ð¸ÑÑ Ð²ÑемÑ, заÑÑаÑенное на оÑвеÑ.
+
+#### ÐÑпÑавление Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `secrets.compare_digest()` { #fix-it-with-secrets-compare-digest }
+
+Ðо в наÑем коде Ð¼Ñ Ð¸ÑполÑзÑем `secrets.compare_digest()`.
+
+ÐкÑаÑÑе: ÑÑавнение `stanleyjobsox` Ñ `stanleyjobson` займÑÑ ÑÑолÑко же вÑемени, ÑколÑко и ÑÑавнение `johndoe` Ñ `stanleyjobson`. То же оÑноÑиÑÑÑ Ð¸ к паÑолÑ.
+
+Таким обÑазом, иÑполÑзÑÑ `secrets.compare_digest()` в коде пÑиложениÑ, Ð²Ñ Ð·Ð°ÑиÑиÑе его Ð¾Ñ Ð²Ñего ÑÑого клаÑÑа аÑак на безопаÑноÑÑÑ.
+
+### ÐозвÑÐ°Ñ Ð¾Ñибки { #return-the-error }
+
+ÐоÑле Ñого как обнаÑÑжено, ÑÑо ÑÑÑÑнÑе даннÑе некоÑÑекÑнÑ, веÑниÑе `HTTPException` Ñо ÑÑаÑÑÑ-кодом оÑвеÑа 401 (Ñем же, ÑÑо и пÑи оÑÑÑÑÑÑвии ÑÑÑÑнÑÑ
даннÑÑ
) и добавÑÑе HTTP-заголовок `WWW-Authenticate`, ÑÑÐ¾Ð±Ñ Ð±ÑаÑÐ·ÐµÑ Ñнова показал окно вÑ
ода:
+
+{* ../../docs_src/security/tutorial007_an_py39.py hl[26:30] *}
diff --git a/docs/ru/docs/advanced/security/index.md b/docs/ru/docs/advanced/security/index.md
new file mode 100644
index 000000000..912e4812a
--- /dev/null
+++ b/docs/ru/docs/advanced/security/index.md
@@ -0,0 +1,19 @@
+# РаÑÑиÑÐµÐ½Ð½Ð°Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑ { #advanced-security }
+
+## ÐополниÑелÑнÑе возможноÑÑи { #additional-features }
+
+ÐÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе возможноÑÑи Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ Ð¿Ð¾Ð¼Ð¸Ð¼Ð¾ ÑеÑ
, ÑÑо опиÑÐ°Ð½Ñ Ð² [УÑебник â Ð ÑководÑÑво полÑзоваÑелÑ: ÐезопаÑноÑÑÑ](../../tutorial/security/index.md){.internal-link target=_blank}.
+
+/// tip | СовеÑ
+
+СледÑÑÑие ÑÐ°Ð·Ð´ÐµÐ»Ñ **не обÑзаÑелÑно ÑвлÑÑÑÑÑ Â«Ð¿ÑодвинÑÑÑми»**.
+
+Рвозможно, ÑÑо ÑеÑение Ð´Ð»Ñ Ð²Ð°Ñего ваÑианÑа иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñ
одиÑÑÑ Ð² одном из ниÑ
.
+
+///
+
+## СнаÑала пÑоÑиÑайÑе ÑÑководÑÑво { #read-the-tutorial-first }
+
+Ð ÑледÑÑÑиÑ
ÑазделаÑ
пÑедполагаеÑÑÑ, ÑÑо Ð²Ñ Ñже пÑоÑиÑали оÑновной [УÑебник â Ð ÑководÑÑво полÑзоваÑелÑ: ÐезопаÑноÑÑÑ](../../tutorial/security/index.md){.internal-link target=_blank}.
+
+ÐÑе они оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð° ÑеÑ
же конÑепÑиÑÑ
, но пÑедоÑÑавлÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе возможноÑÑи.
diff --git a/docs/ru/docs/advanced/security/oauth2-scopes.md b/docs/ru/docs/advanced/security/oauth2-scopes.md
new file mode 100644
index 000000000..8788df199
--- /dev/null
+++ b/docs/ru/docs/advanced/security/oauth2-scopes.md
@@ -0,0 +1,274 @@
+# OAuth2 scopes { #oauth2-scopes }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ OAuth2 scopes (scope - облаÑÑÑ, Ñамки) напÑÑмÑÑ Ñ **FastAPI** â они инÑегÑиÑÐ¾Ð²Ð°Ð½Ñ Ð¸ ÑабоÑаÑÑ Ð±ÐµÑÑовно.
+
+ÐÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð²Ð°Ð¼ имеÑÑ Ð±Ð¾Ð»ÐµÐµ деÑалÑнÑÑ ÑиÑÑÐµÐ¼Ñ ÑазÑеÑений по ÑÑандаÑÑÑ OAuth2, инÑегÑиÑованнÑÑ Ð² ваÑе OpenAPIâпÑиложение (и докÑменÑаÑÐ¸Ñ API).
+
+OAuth2 Ñо scopes â ÑÑо меÑ
анизм, коÑоÑÑй иÑполÑзÑÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ кÑÑпнÑе пÑовайдеÑÑ Ð°ÑÑенÑиÑикаÑии: Facebook, Google, GitHub, Microsoft, X (Twitter) и Ñ.д. Ðни пÑименÑÑÑ ÐµÐ³Ð¾, ÑÑÐ¾Ð±Ñ Ð¿ÑедоÑÑавлÑÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑе ÑазÑеÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑм и пÑиложениÑм.
+
+ÐаждÑй Ñаз, когда Ð²Ñ Â«Ð²Ñ
одиÑе ÑеÑез» Facebook, Google, GitHub, Microsoft, X (Twitter), ÑÑо пÑиложение иÑполÑзÑÐµÑ OAuth2 Ñо scopes.
+
+Ð ÑÑом Ñазделе Ð²Ñ ÑвидиÑе, как ÑпÑавлÑÑÑ Ð°ÑÑенÑиÑикаÑией и авÑоÑизаÑией Ñ Ñеми же OAuth2 scopes в ваÑем пÑиложении на **FastAPI**.
+
+/// warning | ÐÑедÑпÑеждение
+
+ÐÑо более-менее пÑодвинÑÑÑй Ñаздел. ÐÑли Ð²Ñ ÑолÑко наÑинаеÑе, можеÑе пÑопÑÑÑиÑÑ ÐµÐ³Ð¾.
+
+Ðам не обÑзаÑелÑно нÑÐ¶Ð½Ñ OAuth2 scopes â аÑÑенÑиÑикаÑÐ¸Ñ Ð¸ авÑоÑизаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑеализоваÑÑ Ð»ÑбÑм нÑжнÑм вам ÑпоÑобом.
+
+Ðо OAuth2 Ñо scopes можно кÑаÑиво инÑегÑиÑоваÑÑ Ð² Ð²Ð°Ñ API (ÑеÑез OpenAPI) и докÑменÑаÑÐ¸Ñ API.
+
+Так или инаÑе, Ð²Ñ Ð²Ñе Ñавно бÑдеÑе пÑименÑÑÑ ÑÑи scopes или какие-Ñо дÑÑгие ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи/авÑоÑизаÑии, как вам нÑжно, в ваÑем коде.
+
+Ðо многиÑ
ÑлÑÑаÑÑ
OAuth2 Ñо scopes Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð±ÑÑоÑнÑм.
+
+Ðо еÑли Ð²Ñ Ð·Ð½Ð°ÐµÑе, ÑÑо ÑÑо нÑжно, или вам пÑоÑÑо инÑеÑеÑно â пÑодолжайÑе ÑÑение.
+
+///
+
+## OAuth2 scopes и OpenAPI { #oauth2-scopes-and-openapi }
+
+СпеÑиÑикаÑÐ¸Ñ OAuth2 опÑеделÑÐµÑ Â«scopes» как ÑпиÑок ÑÑÑок, ÑазделÑннÑÑ
пÑобелами.
+
+СодеÑжимое каждой Ñакой ÑÑÑоки Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð»Ñбой ÑоÑмаÑ, но не должно ÑодеÑжаÑÑ Ð¿Ñобелов.
+
+ÐÑи scopes пÑедÑÑавлÑÑÑ Â«ÑазÑеÑениÑ».
+
+Ð OpenAPI (напÑимеÑ, в докÑменÑаÑии API) можно опÑеделиÑÑ Â«ÑÑ
ÐµÐ¼Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи» (security schemes).
+
+Ðогда одна из ÑакиÑ
ÑÑ
ем безопаÑноÑÑи иÑполÑзÑÐµÑ OAuth2, Ð²Ñ Ñакже можеÑе обÑÑвлÑÑÑ Ð¸ иÑполÑзоваÑÑ scopes.
+
+ÐаждÑй «scope» â ÑÑо пÑоÑÑо ÑÑÑока (без пÑобелов).
+
+ÐбÑÑно они иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ
ÑазÑеÑений безопаÑноÑÑи, напÑимеÑ:
+
+- `users:read` или `users:write` â ÑаÑпÑоÑÑÑанÑннÑе пÑимеÑÑ.
+- `instagram_basic` иÑполÑзÑеÑÑÑ Facebook / Instagram.
+- `https://www.googleapis.com/auth/drive` иÑполÑзÑеÑÑÑ Google.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+Ð OAuth2 «scope» â ÑÑо пÑоÑÑо ÑÑÑока, обÑÑвлÑÑÑÐ°Ñ ÑÑебÑемое конкÑеÑное ÑазÑеÑение.
+
+Ðеважно, еÑÑÑ Ð»Ð¸ Ñам дÑÑгие ÑимволÑ, Ñакие как `:`, или ÑÑо URL.
+
+ÐÑи деÑали завиÑÑÑ Ð¾Ñ ÑеализаÑии.
+
+ÐÐ»Ñ OAuth2 ÑÑо пÑоÑÑо ÑÑÑоки.
+
+///
+
+## ÐзглÑд издалека { #global-view }
+
+СнаÑала бÑÑÑÑо поÑмоÑÑим, ÑÑо изменилоÑÑ Ð¿Ð¾ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¿ÑимеÑами из оÑновного Ñаздела **УÑебник - Ð ÑководÑÑво полÑзоваÑелÑ** â [OAuth2 Ñ Ð¿Ð°Ñолем (и Ñ
еÑиÑованием), Bearer Ñ JWT-Ñокенами](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank}. ТепеÑÑ â Ñ Ð¸ÑполÑзованием OAuth2 scopes:
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *}
+
+ТепеÑÑ ÑаÑÑмоÑÑим ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñаг за Ñагом.
+
+## OAuth2 ÑÑ
ема безопаÑноÑÑи { #oauth2-security-scheme }
+
+ÐеÑвое изменение â Ð¼Ñ Ð¾Ð±ÑÑвлÑем ÑÑ
ÐµÐ¼Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи OAuth2 Ñ Ð´Ð²ÑÐ¼Ñ Ð´Ð¾ÑÑÑпнÑми scopes: `me` и `items`.
+
+ÐаÑамеÑÑ `scopes` полÑÑÐ°ÐµÑ `dict`, где каждÑй scope â ÑÑо клÑÑ, а опиÑание â знаÑение:
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[63:66] *}
+
+Так как ÑепеÑÑ Ð¼Ñ Ð¾Ð±ÑÑвлÑем ÑÑи scopes, они поÑвÑÑÑÑ Ð² докÑменÑаÑии API пÑи вÑ
оде/авÑоÑизаÑии.
+
+Ð Ð²Ñ ÑможеÑе вÑбÑаÑÑ, какие scopes Ð²Ñ Ñ
оÑиÑе вÑдаÑÑ Ð´Ð¾ÑÑÑп: `me` и `items`.
+
+ÐÑо ÑÐ¾Ñ Ð¶Ðµ меÑ
анизм, когда Ð²Ñ Ð´Ð°ÑÑе ÑазÑеÑÐµÐ½Ð¸Ñ Ð¿Ñи вÑ
оде ÑеÑез Facebook, Google, GitHub и Ñ.д.:
+
+
+
+## JWT-ÑÐ¾ÐºÐµÐ½Ñ Ñо scopes { #jwt-token-with-scopes }
+
+ТепеÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñе опеÑаÑÐ¸Ñ Ð¿ÑÑи, вÑдаÑÑÑÑ Ñокен, ÑÑÐ¾Ð±Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð·Ð°Ð¿ÑоÑеннÑе scopes.
+
+ÐÑ Ð²ÑÑ ÐµÑÑ Ð¸ÑполÑзÑем ÑÐ¾Ñ Ð¶Ðµ `OAuth2PasswordRequestForm`. Ðн вклÑÑÐ°ÐµÑ ÑвойÑÑво `scopes` Ñ `list` из `str` â каждÑй scope, полÑÑеннÑй в запÑоÑе.
+
+Ð Ð¼Ñ Ð²Ð¾Ð·Ð²ÑаÑаем scopes как ÑаÑÑÑ JWTâÑокена.
+
+/// danger | ÐпаÑноÑÑÑ
+
+ÐÐ»Ñ Ð¿ÑоÑÑоÑÑ Ð·Ð´ÐµÑÑ Ð¼Ñ Ð¿ÑоÑÑо добавлÑем полÑÑеннÑе scopes пÑÑмо в Ñокен.
+
+Ðо в ваÑем пÑиложении, в ÑелÑÑ
безопаÑноÑÑи, ÑледÑÐµÑ ÑбедиÑÑÑÑ, ÑÑо Ð²Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑе ÑолÑко Ñе scopes, коÑоÑÑе полÑзоваÑÐµÐ»Ñ Ð´ÐµÐ¹ÑÑвиÑелÑно Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ, или Ñе, коÑоÑÑе Ð²Ñ Ð·Ð°Ñанее опÑеделили.
+
+///
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[157] *}
+
+## ÐбÑÑвление scopes в *обÑабоÑÑикаÑ
пÑÑей* и завиÑимоÑÑÑÑ
{ #declare-scopes-in-path-operations-and-dependencies }
+
+ТепеÑÑ Ð¾Ð±ÑÑвим, ÑÑо опеÑаÑÐ¸Ñ Ð¿ÑÑи Ð´Ð»Ñ `/users/me/items/` ÑÑебÑÐµÑ scope `items`.
+
+ÐÐ»Ñ ÑÑого импоÑÑиÑÑем и иÑполÑзÑем `Security` из `fastapi`.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `Security` Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей (как `Depends`), но `Security` Ñакже пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ `scopes` Ñо ÑпиÑком scopes (ÑÑÑок).
+
+Ð ÑÑом ÑлÑÑае Ð¼Ñ Ð¿ÐµÑедаÑм ÑÑнкÑиÑâзавиÑимоÑÑÑ `get_current_active_user` в `Security` (ÑоÑно Ñак же, как Ñделали Ð±Ñ Ñ `Depends`).
+
+Ðо Ð¼Ñ Ñакже пеÑедаÑм `list` scopes â в данном ÑлÑÑае ÑолÑко один scope: `items` (иÑ
могло бÑÑÑ Ð±Ð¾Ð»ÑÑе).
+
+Ð ÑÑнкÑиÑâзавиÑимоÑÑÑ `get_current_active_user` Ñоже Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑÑвлÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð²Ð¸ÑимоÑÑи не ÑолÑко ÑеÑез `Depends`, но и ÑеÑез `Security`, обÑÑвлÑÑ ÑÐ²Ð¾Ñ Ð¿Ð¾Ð´Ð·Ð°Ð²Ð¸ÑимоÑÑÑ (`get_current_user`) и дополниÑелÑнÑе ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ scopes.
+
+Рданном ÑлÑÑае ÑÑебÑеÑÑÑ scope `me` (иÑ
Ñакже могло бÑÑÑ Ð±Ð¾Ð»ÑÑе одного).
+
+/// note | ÐÑимеÑание
+
+Ðам не обÑзаÑелÑно добавлÑÑÑ ÑазнÑе scopes в ÑазнÑÑ
меÑÑаÑ
.
+
+ÐÑ Ð´ÐµÐ»Ð°ÐµÐ¼ ÑÑо здеÑÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ, как **FastAPI** обÑабаÑÑÐ²Ð°ÐµÑ scopes, обÑÑвленнÑе на ÑазнÑÑ
ÑÑовнÑÑ
.
+
+///
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
+
+/// info | ТеÑ
ниÑеÑкие деÑали
+
+`Security` на Ñамом деле ÑвлÑеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»Ð°ÑÑом `Depends` и Ð¸Ð¼ÐµÐµÑ Ð²Ñего один дополниÑелÑнÑй паÑамеÑÑ, коÑоÑÑй Ð¼Ñ ÑаÑÑмоÑÑим позже.
+
+Ðо иÑполÑзÑÑ `Security` вмеÑÑо `Depends`, **FastAPI** бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, ÑÑо можно обÑÑвлÑÑÑ security scopes, иÑполÑзоваÑÑ Ð¸Ñ
внÑÑÑи и докÑменÑиÑоваÑÑ API в OpenAPI.
+
+Ðднако когда Ð²Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑеÑе `Query`, `Path`, `Depends`, `Security` и дÑÑгие из `fastapi`, ÑÑо на Ñамом деле ÑÑнкÑии, возвÑаÑаÑÑие ÑпеÑиалÑнÑе клаÑÑÑ.
+
+///
+
+## ÐÑполÑзование `SecurityScopes` { #use-securityscopes }
+
+ТепеÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ð¼ завиÑимоÑÑÑ `get_current_user`.
+
+Ðменно ÐµÑ Ð¸ÑполÑзÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи вÑÑе.
+
+ÐдеÑÑ Ð¼Ñ Ð¸ÑполÑзÑем ÑÑ Ð¶Ðµ ÑÑ
ÐµÐ¼Ñ OAuth2, ÑозданнÑÑ Ñанее, обÑÑвлÑÑ ÐµÑ ÐºÐ°Ðº завиÑимоÑÑÑ: `oauth2_scheme`.
+
+ÐоÑколÑÐºÑ Ñ ÑÑой ÑÑнкÑииâзавиÑимоÑÑи Ð½ÐµÑ ÑобÑÑвеннÑÑ
ÑÑебований по scopes, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ `Depends` Ñ `oauth2_scheme` â нам не нÑжно иÑполÑзоваÑÑ `Security`, еÑли не ÑÑебÑеÑÑÑ ÑказÑваÑÑ security scopes.
+
+ÐÑ Ñакже обÑÑвлÑем ÑпеÑиалÑнÑй паÑамеÑÑ Ñипа `SecurityScopes`, импоÑÑиÑованнÑй из `fastapi.security`.
+
+ÐлаÑÑ `SecurityScopes` поÑ
ож на `Request` (ÑеÑез `Request` Ð¼Ñ Ð¿Ð¾Ð»ÑÑали Ñам обÑÐµÐºÑ Ð·Ð°Ð¿ÑоÑа).
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[9,106] *}
+
+## ÐÑполÑзование `scopes` { #use-the-scopes }
+
+ÐаÑамеÑÑ `security_scopes` бÑÐ´ÐµÑ Ñипа `SecurityScopes`.
+
+У него еÑÑÑ ÑвойÑÑво `scopes` Ñо ÑпиÑком, ÑодеÑжаÑим вÑе scopes, ÑÑебÑемÑе им Ñамим и вÑеми завиÑимоÑÑÑми, иÑполÑзÑÑÑими его как подзавиÑимоÑÑÑ. То еÑÑÑ Ð²Ñеми «завиÑÑÑими»⦠ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð²ÑÑаÑÑ Ð·Ð°Ð¿ÑÑанно, ниже еÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑное обÑÑÑнение.
+
+ÐбÑÐµÐºÑ `security_scopes` (клаÑÑ `SecurityScopes`) Ñакже пÑедоÑÑавлÑÐµÑ Ð°ÑÑибÑÑ `scope_str` â ÑÑо одна ÑÑÑока Ñ ÑÑими scopes, ÑазделÑннÑми пÑобелами (Ð¼Ñ Ð±Ñдем ÐµÑ Ð¸ÑполÑзоваÑÑ).
+
+ÐÑ ÑоздаÑм `HTTPException`, коÑоÑÑй можем пеÑеиÑполÑзоваÑÑ (`raise`) в неÑколÑкиÑ
меÑÑаÑ
.
+
+Ð ÑÑом иÑклÑÑении Ð¼Ñ Ð²ÐºÐ»ÑÑаем ÑÑебÑемÑе scopes (еÑли еÑÑÑ) в виде ÑÑÑоки, ÑазделÑнной пÑобелами (иÑполÑзÑÑ `scope_str`). ÐÑÑ ÑÑÑÐ¾ÐºÑ Ñо scopes Ð¼Ñ Ð¿Ð¾Ð¼ÐµÑаем в HTTPâзаголовок `WWW-Authenticate` (ÑÑо ÑаÑÑÑ ÑпеÑиÑикаÑии).
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[106,108:116] *}
+
+## ÐÑовеÑка `username` и ÑоÑмаÑа даннÑÑ
{ #verify-the-username-and-data-shape }
+
+ÐÑ Ð¿ÑовеÑÑем, ÑÑо полÑÑили `username`, и извлекаем scopes.
+
+ÐаÑем валидиÑÑем ÑÑи даннÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Pydanticâмодели (пеÑеÑ
ваÑÑÐ²Ð°Ñ Ð¸ÑклÑÑение `ValidationError`), и еÑли Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка пÑи ÑÑении JWTâÑокена или пÑи валидаÑии даннÑÑ
Ñ Pydantic, Ð¼Ñ Ð²ÑзÑваем `HTTPException`, Ñозданное Ñанее.
+
+ÐÐ»Ñ ÑÑого Ð¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»Ñем PydanticâÐ¼Ð¾Ð´ÐµÐ»Ñ `TokenData`, добавлÑÑ Ð½Ð¾Ð²Ð¾Ðµ ÑвойÑÑво `scopes`.
+
+ÐалидиÑÑÑ Ð´Ð°Ð½Ð½Ñе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Pydantic, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑдоÑÑовеÑиÑÑÑÑ, ÑÑо Ñ Ð½Ð°Ñ, напÑимеÑ, именно `list` из `str` Ñо scopes и `str` Ñ `username`.
+
+Рне, Ñкажем, `dict` или ÑÑоâÑо еÑÑ â Ð²ÐµÐ´Ñ ÑÑо могло Ð±Ñ Ð³Ð´ÐµâÑо позже ÑломаÑÑ Ð¿Ñиложение и ÑоздаÑÑ ÑиÑк Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи.
+
+ÐÑ Ñакже пÑовеÑÑем, ÑÑо ÑÑÑеÑÑвÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ñаким именем, и еÑли Ð½ÐµÑ â вÑзÑваем Ñо же иÑклÑÑение, Ñозданное Ñанее.
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[47,117:129] *}
+
+## ÐÑовеÑка `scopes` { #verify-the-scopes }
+
+ТепеÑÑ Ð¿ÑовеÑÑем, ÑÑо вÑе ÑÑебÑемÑе scopes â ÑÑой завиÑимоÑÑÑÑ Ð¸ вÑеми завиÑÑÑими (вклÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи) â пÑиÑÑÑÑÑвÑÑÑ ÑÑеди scopes, пÑедоÑÑавленнÑÑ
в полÑÑенном Ñокене, инаÑе вÑзÑваем `HTTPException`.
+
+ÐÐ»Ñ ÑÑого иÑполÑзÑем `security_scopes.scopes`, ÑодеÑжаÑий `list` Ñо вÑеми ÑÑими scopes как `str`.
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[130:136] *}
+
+## ÐеÑево завиÑимоÑÑей и scopes { #dependency-tree-and-scopes }
+
+ÐÑÑ Ñаз ÑаÑÑмоÑÑим деÑево завиÑимоÑÑей и scopes.
+
+Так как Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑи `get_current_active_user` еÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð²Ð¸ÑимоÑÑÑ `get_current_user`, scope `"me"`, обÑÑвленнÑй в `get_current_active_user`, бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑÑн в ÑпиÑок ÑÑебÑемÑÑ
scopes в `security_scopes.scopes`, пеÑедаваемÑй в `get_current_user`.
+
+Сама опеÑаÑÐ¸Ñ Ð¿ÑÑи Ñоже обÑÑвлÑÐµÑ scope â `"items"`, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ Ñакже бÑÐ´ÐµÑ Ð² ÑпиÑке `security_scopes.scopes`, пеÑедаваемом в `get_current_user`.
+
+ÐеÑаÑÑ
Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей и scopes вÑглÑÐ´Ð¸Ñ Ñак:
+
+- ÐпеÑаÑÐ¸Ñ Ð¿ÑÑи `read_own_items`:
+ - ÐапÑаÑÐ¸Ð²Ð°ÐµÑ scopes `["items"]` Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑÑ:
+ - `get_current_active_user`:
+ - ФÑнкÑиÑâзавиÑимоÑÑÑ `get_current_active_user`:
+ - ÐапÑаÑÐ¸Ð²Ð°ÐµÑ scopes `["me"]` Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑÑ:
+ - `get_current_user`:
+ - ФÑнкÑиÑâзавиÑимоÑÑÑ `get_current_user`:
+ - СобÑÑвеннÑÑ
scopes не запÑаÑиваеÑ.
+ - ÐÐ¼ÐµÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ, иÑполÑзÑÑÑÑÑ `oauth2_scheme`.
+ - ÐÐ¼ÐµÐµÑ Ð¿Ð°ÑамеÑÑ `security_scopes` Ñипа `SecurityScopes`:
+ - ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ `security_scopes` Ð¸Ð¼ÐµÐµÑ ÑвойÑÑво `scopes` Ñ `list`, ÑодеÑжаÑим вÑе обÑÑвленнÑе вÑÑе scopes, Ñо еÑÑÑ:
+ - `security_scopes.scopes` бÑÐ´ÐµÑ ÑодеÑжаÑÑ `["me", "items"]` Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи `read_own_items`.
+ - `security_scopes.scopes` бÑÐ´ÐµÑ ÑодеÑжаÑÑ `["me"]` Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи `read_users_me`, поÑÐ¾Ð¼Ñ ÑÑо он обÑÑвлен в завиÑимоÑÑи `get_current_active_user`.
+ - `security_scopes.scopes` бÑÐ´ÐµÑ ÑодеÑжаÑÑ `[]` (ниÑего) Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи `read_system_status`, поÑÐ¾Ð¼Ñ ÑÑо Ñам не обÑÑвлÑлÑÑ `Security` Ñо `scopes`, и его завиÑимоÑÑÑ `get_current_user` Ñоже не обÑÑвлÑÐµÑ `scopes`.
+
+/// tip | СовеÑ
+
+ÐажнÑй и «магиÑеÑкий» Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð·Ð´ÐµÑÑ Ð² Ñом, ÑÑо `get_current_user` бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÑазнÑй ÑпиÑок `scopes` Ð´Ð»Ñ Ð¿ÑовеÑки Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ опеÑаÑии пÑÑи.
+
+ÐÑÑ ÑÑо завиÑÐ¸Ñ Ð¾Ñ `scopes`, обÑÑвленнÑÑ
в каждой опеÑаÑии пÑÑи и в каждой завиÑимоÑÑи в деÑеве завиÑимоÑÑей конкÑеÑной опеÑаÑии пÑÑи.
+
+///
+
+## ÐолÑÑе деÑалей о `SecurityScopes` { #more-details-about-securityscopes }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `SecurityScopes` в лÑбой ÑоÑке и в неÑколÑкиÑ
меÑÑаÑ
â необÑзаÑелÑно в «коÑневой» завиÑимоÑÑи.
+
+Ðн вÑегда бÑÐ´ÐµÑ ÑодеÑжаÑÑ security scopes, обÑÑвленнÑе в ÑекÑÑиÑ
завиÑимоÑÑÑÑ
`Security`, и вÑеми завиÑÑÑими â Ð´Ð»Ñ ÑÑой конкÑеÑной опеÑаÑии пÑÑи и ÑÑого конкÑеÑного деÑева завиÑимоÑÑей.
+
+ÐоÑколÑÐºÑ `SecurityScopes` бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð²Ñе scopes, обÑÑвленнÑе завиÑÑÑими, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÐµÐ³Ð¾, ÑÑÐ¾Ð±Ñ ÑенÑÑализованно пÑовеÑÑÑÑ Ð½Ð°Ð»Ð¸Ñие ÑÑебÑемÑÑ
scopes в Ñокене в одной ÑÑнкÑииâзавиÑимоÑÑи, а заÑем обÑÑвлÑÑÑ ÑазнÑе ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ scopes в ÑазнÑÑ
опеÑаÑиÑÑ
пÑÑи.
+
+Ðни бÑдÑÑ Ð¿ÑовеÑÑÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ опеÑаÑии пÑÑи.
+
+## ÐÑовеÑим ÑÑо { #check-it }
+
+ÐÑкÑойÑе докÑменÑаÑÐ¸Ñ API â Ð²Ñ ÑможеÑе аÑÑенÑиÑиÑиÑоваÑÑÑÑ Ð¸ ÑказаÑÑ, какие scopes Ð²Ñ Ñ
оÑиÑе авÑоÑизоваÑÑ.
+
+
+
+ÐÑли Ð²Ñ Ð½Ðµ вÑбеÑеÑе ни один scope, Ð²Ñ Ð±ÑдеÑе «аÑÑенÑиÑиÑиÑованÑ», но пÑи попÑÑке доÑÑÑпа к `/users/me/` или `/users/me/items/` полÑÑиÑе оÑÐ¸Ð±ÐºÑ Ð¾ недоÑÑаÑоÑнÑÑ
ÑазÑеÑениÑÑ
. ÐÑи ÑÑом доÑÑÑп к `/status/` бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶ÐµÐ½.
+
+ÐÑли Ð²Ñ Ð²ÑбеÑеÑе scope `me`, но не `items`, Ð²Ñ ÑможеÑе полÑÑиÑÑ Ð´Ð¾ÑÑÑп к `/users/me/`, но не к `/users/me/items/`.
+
+Так и бÑÐ´ÐµÑ Ð¿ÑоиÑÑ
одиÑÑ Ñо ÑÑоÑонним пÑиложением, коÑоÑое попÑÑаеÑÑÑ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº одной из ÑÑиÑ
опеÑаÑий пÑÑи Ñ Ñокеном, пÑедоÑÑавленнÑм полÑзоваÑелем, â в завиÑимоÑÑи Ð¾Ñ Ñого, ÑколÑко ÑазÑеÑений полÑзоваÑÐµÐ»Ñ Ð´Ð°Ð» пÑиложениÑ.
+
+## Ð ÑÑоÑонниÑ
инÑегÑаÑиÑÑ
{ #about-third-party-integrations }
+
+Ð ÑÑом пÑимеÑе Ð¼Ñ Ð¸ÑполÑзÑем OAuth2 «password flow» (аÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ паÑолÑ).
+
+ÐÑо ÑмеÑÑно, когда Ð¼Ñ Ð²Ñ
одим в наÑе ÑобÑÑвенное пÑиложение, веÑоÑÑно, Ñ Ð½Ð°Ñим ÑобÑÑвеннÑм ÑÑонÑендом.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ ÐµÐ¼Ñ Ð´Ð¾Ð²ÐµÑÑÑÑ Ð¿Ñи полÑÑении `username` и `password`, поÑÐ¾Ð¼Ñ ÑÑо он под наÑим конÑÑолем.
+
+Ðо еÑли Ð²Ñ ÑоздаÑÑе OAuth2âпÑиложение, к коÑоÑÐ¾Ð¼Ñ Ð±ÑдÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑÑÑ Ð´ÑÑгие (Ñ.е. Ð²Ñ ÑÑÑоиÑе пÑовайдеÑа аÑÑенÑиÑикаÑии наподобие Facebook, Google, GitHub и Ñ.п.), вам ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð´Ð¸Ð½ из дÑÑгиÑ
«flows».
+
+СамÑй ÑаÑпÑоÑÑÑанÑннÑй â «implicit flow».
+
+СамÑй безопаÑнÑй â «code flow», но он Ñложнее в ÑеализаÑии, Ñак как ÑÑебÑÐµÑ Ð±Ð¾Ð»ÑÑе Ñагов. Ðзâза ÑложноÑÑи многие пÑовайдеÑÑ Ð² иÑоге ÑекомендÑÑÑ Â«implicit flow».
+
+/// note | ÐÑимеÑание
+
+ЧаÑÑо каждÑй пÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ Ð°ÑÑенÑиÑикаÑии назÑÐ²Ð°ÐµÑ Ñвои «flows» поâÑÐ°Ð·Ð½Ð¾Ð¼Ñ â как ÑаÑÑÑ Ð±Ñенда.
+
+Ðо в иÑоге они ÑеализÑÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ ÑÑандаÑÑ OAuth2.
+
+///
+
+FastAPI вклÑÑÐ°ÐµÑ ÑÑилиÑÑ Ð´Ð»Ñ Ð²ÑеÑ
ÑÑиÑ
OAuth2âflows в `fastapi.security.oauth2`.
+
+## `Security` в паÑамеÑÑе `dependencies` декоÑаÑоÑа { #security-in-decorator-dependencies }
+
+ТоÑно Ñак же, как Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ `list` из `Depends` в паÑамеÑÑе `dependencies` декоÑаÑоÑа (Ñм. [ÐавиÑимоÑÑи в декоÑаÑоÑаÑ
опеÑаÑии пÑÑи](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ñам и `Security` Ñо `scopes`.
diff --git a/docs/ru/docs/advanced/settings.md b/docs/ru/docs/advanced/settings.md
new file mode 100644
index 000000000..a335548c3
--- /dev/null
+++ b/docs/ru/docs/advanced/settings.md
@@ -0,0 +1,346 @@
+# ÐаÑÑÑойки и пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ { #settings-and-environment-variables }
+
+Ðо многиÑ
ÑлÑÑаÑÑ
ваÑÐµÐ¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð²Ð½ÐµÑние наÑÑÑойки или конÑигÑÑаÑии, напÑÐ¸Ð¼ÐµÑ ÑекÑеÑнÑе клÑÑи, ÑÑеÑнÑе даннÑе Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑÑеÑнÑе даннÑе Ð´Ð»Ñ emailâÑеÑвиÑов и Ñ.д.
+
+ÐолÑÑинÑÑво ÑакиÑ
наÑÑÑоек ÑвлÑÑÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑемÑми (могÑÑ Ð¼ÐµÐ½ÑÑÑÑÑ), напÑÐ¸Ð¼ÐµÑ URL Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. Рмногие из ниÑ
могÑÑ Ð±ÑÑÑ Â«ÑÑвÑÑвиÑелÑнÑми», напÑÐ¸Ð¼ÐµÑ ÑекÑеÑÑ.
+
+Ðо ÑÑой пÑиÑине обÑÑно иÑ
пеÑедаÑÑ ÑеÑез пеÑеменнÑе окÑÑжениÑ, коÑоÑÑе ÑÑиÑÑваÑÑÑÑ Ð¿Ñиложением.
+
+/// tip | СовеÑ
+
+ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ, ÑÑо Ñакое пеÑеменнÑе окÑÑжениÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑиÑаÑÑ [ÐеÑеменнÑе окÑÑжениÑ](../environment-variables.md){.internal-link target=_blank}.
+
+///
+
+## Ð¢Ð¸Ð¿Ñ Ð¸ валидаÑÐ¸Ñ { #types-and-validation }
+
+ÐеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ ÑодеÑжаÑÑ ÑолÑко ÑекÑÑовÑе ÑÑÑоки, Ñак как они внеÑние по оÑноÑÐµÐ½Ð¸Ñ Ðº Python и Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑовмеÑÑÐ¸Ð¼Ñ Ñ Ð´ÑÑгими пÑогÑаммами и оÑÑалÑной ÑиÑÑемой (и даже Ñ ÑазнÑми опеÑаÑионнÑми ÑиÑÑемами, Ñакими как Linux, Windows, macOS).
+
+ÐÑо ознаÑаеÑ, ÑÑо лÑбое знаÑение, пÑоÑиÑанное в Python из пеÑеменной окÑÑжениÑ, бÑÐ´ÐµÑ `str`, а лÑбÑе пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº дÑÑгим Ñипам или лÑÐ±Ð°Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑÑ Ð² коде.
+
+## Pydantic `Settings` { #pydantic-settings }
+
+Ð ÑÑаÑÑÑÑ, Pydantic пÑедоÑÑавлÑÐµÑ Ð¾ÑлиÑнÑÑ ÑÑилиÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ ÑÑими наÑÑÑойками, поÑÑÑпаÑÑими из пеÑеменнÑÑ
окÑÑжениÑ, â Pydantic: ÑпÑавление наÑÑÑойками.
+
+### УÑÑановка `pydantic-settings` { #install-pydantic-settings }
+
+СнаÑала ÑбедиÑеÑÑ, ÑÑо Ð²Ñ Ñоздали [виÑÑÑалÑное окÑÑжение](../virtual-environments.md){.internal-link target=_blank}, акÑивиÑовали его, а заÑем ÑÑÑановили Ð¿Ð°ÐºÐµÑ `pydantic-settings`:
+
+
+
+```console
+$ pip install pydantic-settings
+---> 100%
+```
+
+
+
+Ðн Ñакже вклÑÑен пÑи ÑÑÑановке набоÑа `all` Ñ:
+
+
+
+```console
+$ pip install "fastapi[all]"
+---> 100%
+```
+
+
+
+/// info | ÐнÑоÑмаÑиÑ
+
+Ð Pydantic v1 он вÑ
одил в оÑновной пакеÑ. ТепеÑÑ Ð¾Ð½ ÑаÑпÑоÑÑÑанÑеÑÑÑ ÐºÐ°Ðº оÑделÑнÑй пакеÑ, ÑÑÐ¾Ð±Ñ Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ ÑÑÑановиÑÑ ÐµÐ³Ð¾ ÑолÑко пÑи необÑ
одимоÑÑи.
+
+///
+
+### Создание обÑекÑа `Settings` { #create-the-settings-object }
+
+ÐмпоÑÑиÑÑйÑе `BaseSettings` из Pydantic и ÑоздайÑе подклаÑÑ, оÑÐµÐ½Ñ Ð¿Ð¾Ñ
ожий на PydanticâмоделÑ.
+
+ÐналогиÑно PydanticâмоделÑм, Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе аÑÑибÑÑÑ ÐºÐ»Ð°ÑÑа Ñ Ð°Ð½Ð½Ð¾ÑаÑиÑми Ñипов и, пÑи необÑ
одимоÑÑи, знаÑениÑми по ÑмолÑаниÑ.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð²Ñе Ñе же возможноÑÑи валидаÑии и инÑÑÑÑменÑÑ, ÑÑо и Ð´Ð»Ñ Pydanticâмоделей, напÑÐ¸Ð¼ÐµÑ ÑазнÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
и дополниÑелÑнÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ ÑеÑез `Field()`.
+
+//// tab | Pydantic v2
+
+{* ../../docs_src/settings/tutorial001.py hl[2,5:8,11] *}
+
+////
+
+//// tab | Pydantic v1
+
+/// info | ÐнÑоÑмаÑиÑ
+
+Ð Pydantic v1 Ð²Ñ Ð±Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑовали `BaseSettings` напÑÑмÑÑ Ð¸Ð· `pydantic`, а не из `pydantic_settings`.
+
+///
+
+{* ../../docs_src/settings/tutorial001_pv1.py hl[2,5:8,11] *}
+
+////
+
+/// tip | СовеÑ
+
+ÐÑли вам нÑжно ÑÑо-Ñо бÑÑÑÑо ÑкопиÑоваÑÑ Ð¸ вÑÑавиÑÑ, не иÑполÑзÑйÑе ÑÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ â воÑполÑзÑйÑеÑÑ Ð¿Ð¾Ñледним ниже.
+
+///
+
+ÐаÑем, когда Ð²Ñ ÑоздаеÑе ÑкземплÑÑ ÑÑого клаÑÑа `Settings` (в наÑем ÑлÑÑае обÑÐµÐºÑ `settings`), Pydantic пÑоÑиÑÐ°ÐµÑ Ð¿ÐµÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ ÑегиÑÑÑонезавиÑимо, Ñо еÑÑÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð² веÑÑ
нем ÑегиÑÑÑе `APP_NAME` бÑÐ´ÐµÑ Ð¿ÑоÑиÑана Ð´Ð»Ñ Ð°ÑÑибÑÑа `app_name`.
+
+Ðалее он пÑеобÑазÑÐµÑ Ð¸ пÑовалидиÑÑÐµÑ Ð´Ð°Ð½Ð½Ñе. ÐоÑÑÐ¾Ð¼Ñ Ð¿Ñи иÑполÑзовании обÑекÑа `settings` Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе даннÑе ÑеÑ
Ñипов, коÑоÑÑе обÑÑвили (напÑимеÑ, `items_per_user` бÑÐ´ÐµÑ `int`).
+
+### ÐÑполÑзование `settings` { #use-the-settings }
+
+ÐаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ `settings` в ваÑем пÑиложении:
+
+{* ../../docs_src/settings/tutorial001.py hl[18:20] *}
+
+### ÐапÑÑк ÑеÑвеÑа { #run-the-server }
+
+Ðалее Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ ÑеÑвеÑ, пеÑедав конÑигÑÑаÑии ÑеÑез пеÑеменнÑе окÑÑжениÑ. ÐапÑимеÑ, можно задаÑÑ `ADMIN_EMAIL` и `APP_NAME` Ñак:
+
+
+
+```console
+$ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.py
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+/// tip | СовеÑ
+
+ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð½ÐµÑколÑко пеÑеменнÑÑ
окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ командÑ, пÑоÑÑо ÑазделÑйÑе иÑ
пÑобелами и ÑкажиÑе вÑе пеÑед командой.
+
+///
+
+Тогда паÑамеÑÑ `admin_email` бÑÐ´ÐµÑ ÑÑÑановлен в `"deadpool@example.com"`.
+
+`app_name` бÑÐ´ÐµÑ `"ChimichangApp"`.
+
+Ð `items_per_user` ÑоÑ
ÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ `50`.
+
+## ÐаÑÑÑойки в дÑÑгом модÑле { #settings-in-another-module }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑнеÑÑи ÑÑи наÑÑÑойки в дÑÑгой модÑлÑ, как показано в Ñазделе [ÐолÑÑие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â неÑколÑко Ñайлов](../tutorial/bigger-applications.md){.internal-link target=_blank}.
+
+ÐапÑимеÑ, Ñ Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñайл `config.py` Ñо ÑледÑÑÑим ÑодеÑжимÑм:
+
+{* ../../docs_src/settings/app01/config.py *}
+
+РзаÑем иÑполÑзоваÑÑ ÐµÐ³Ð¾ в Ñайле `main.py`:
+
+{* ../../docs_src/settings/app01/main.py hl[3,11:13] *}
+
+/// tip | СовеÑ
+
+Ðам Ñакже понадобиÑÑÑ Ñайл `__init__.py`, как в Ñазделе [ÐолÑÑие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â неÑколÑко Ñайлов](../tutorial/bigger-applications.md){.internal-link target=_blank}.
+
+///
+
+## ÐаÑÑÑойки как завиÑимоÑÑÑ { #settings-in-a-dependency }
+
+Ðногда Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ пÑедоÑÑавлÑÑÑ Ð½Ð°ÑÑÑойки ÑеÑез завиÑимоÑÑÑ, вмеÑÑо глобалÑного обÑекÑа `settings`, иÑполÑзÑемого повÑÑдÑ.
+
+ÐÑо оÑобенно Ñдобно пÑи ÑеÑÑиÑовании, Ñак как оÑÐµÐ½Ñ Ð»ÐµÐ³ÐºÐ¾ пеÑеопÑеделиÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ñвоими наÑÑÑойками.
+
+### Файл конÑигÑÑаÑии { #the-config-file }
+
+ÐÑÐ¾Ð´Ð¾Ð»Ð¶Ð°Ñ Ð¿ÑедÑдÑÑий пÑимеÑ, Ð²Ð°Ñ Ñайл `config.py` Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
+
+{* ../../docs_src/settings/app02/config.py hl[10] *}
+
+ÐбÑаÑиÑе внимание, ÑÑо ÑепеÑÑ Ð¼Ñ Ð½Ðµ Ñоздаем ÑкземплÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ `settings = Settings()`.
+
+### ÐÑновной Ñайл пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ { #the-main-app-file }
+
+ТепеÑÑ Ð¼Ñ Ñоздаем завиÑимоÑÑÑ, коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð½Ð¾Ð²Ñй `config.Settings()`.
+
+{* ../../docs_src/settings/app02_an_py39/main.py hl[6,12:13] *}
+
+/// tip | СовеÑ
+
+СкоÑо Ð¼Ñ Ð¾Ð±ÑÑдим `@lru_cache`.
+
+Ðока можно ÑÑиÑаÑÑ, ÑÑо `get_settings()` â ÑÑо обÑÑÐ½Ð°Ñ ÑÑнкÑиÑ.
+
+///
+
+ÐаÑем Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ запÑоÑиÑÑ ÐµÐµ в *ÑÑнкÑии-обÑабоÑÑике пÑÑи* как завиÑимоÑÑÑ Ð¸ иÑполÑзоваÑÑ Ñам, где нÑжно.
+
+{* ../../docs_src/settings/app02_an_py39/main.py hl[17,19:21] *}
+
+### ÐаÑÑÑойки и ÑеÑÑиÑование { #settings-and-testing }
+
+Ðалее бÑÐ´ÐµÑ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑо пÑедоÑÑавиÑÑ Ð´ÑÑгой обÑÐµÐºÑ Ð½Ð°ÑÑÑоек во вÑÐµÐ¼Ñ ÑеÑÑиÑованиÑ, Ñоздав пеÑеопÑеделение завиÑимоÑÑи Ð´Ð»Ñ `get_settings`:
+
+{* ../../docs_src/settings/app02/test_main.py hl[9:10,13,21] *}
+
+РпеÑеопÑеделении завиÑимоÑÑи Ð¼Ñ Ð·Ð°Ð´Ð°ÐµÐ¼ новое знаÑение `admin_email` пÑи Ñоздании нового обÑекÑа `Settings`, а заÑем возвÑаÑаем ÑÑÐ¾Ñ Ð½Ð¾Ð²Ñй обÑекÑ.
+
+ÐоÑле ÑÑого можно пÑоÑеÑÑиÑоваÑÑ, ÑÑо он иÑполÑзÑеÑÑÑ.
+
+## ЧÑение Ñайла `.env` { #reading-a-env-file }
+
+ÐÑли Ñ Ð²Ð°Ñ Ð¼Ð½Ð¾Ð³Ð¾ наÑÑÑоек, коÑоÑÑе могÑÑ ÑаÑÑо менÑÑÑÑÑ, возможно в ÑазнÑÑ
окÑÑжениÑÑ
, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдобно помеÑÑиÑÑ Ð¸Ñ
в Ñайл и ÑиÑаÑÑ Ð¾ÑÑÑда как пеÑеменнÑе окÑÑжениÑ.
+
+ÐÑа пÑакÑика доÑÑаÑоÑно ÑаÑпÑоÑÑÑанена и Ð¸Ð¼ÐµÐµÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ: Ñакие пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑно ÑазмеÑаÑÑ Ð² Ñайле `.env`, а Ñам Ñайл назÑваÑÑ Â«dotenv».
+
+/// tip | СовеÑ
+
+Файл, наÑинаÑÑийÑÑ Ñ ÑоÑки (`.`), ÑвлÑеÑÑÑ ÑкÑÑÑÑм в ÑиÑÑемаÑ
, подобнÑÑ
Unix, ÑакиÑ
как Linux и macOS.
+
+Ðо Ñайл dotenv не обÑзаÑелÑно должен имеÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñакое имÑ.
+
+///
+
+Pydantic поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑение ÑакиÑ
Ñайлов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²Ð½ÐµÑней библиоÑеки. ÐодÑобнее Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑиÑаÑÑ Ð·Ð´ÐµÑÑ: Pydantic Settings: поддеÑжка Dotenv (.env).
+
+/// tip | СовеÑ
+
+ЧÑÐ¾Ð±Ñ ÑÑо ÑабоÑало, вам нÑжно `pip install python-dotenv`.
+
+///
+
+### Файл `.env` { #the-env-file }
+
+У Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñайл `.env` Ñо ÑледÑÑÑим ÑодеÑжимÑм:
+
+```bash
+ADMIN_EMAIL="deadpool@example.com"
+APP_NAME="ChimichangApp"
+```
+
+### ЧÑение наÑÑÑоек из `.env` { #read-settings-from-env }
+
+ÐаÑем обновиÑе Ð²Ð°Ñ `config.py` Ñак:
+
+//// tab | Pydantic v2
+
+{* ../../docs_src/settings/app03_an/config.py hl[9] *}
+
+/// tip | СовеÑ
+
+ÐÑÑибÑÑ `model_config` иÑполÑзÑеÑÑÑ ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð½ÑигÑÑаÑии Pydantic. ÐодÑобнее Ñм. Pydantic: Concepts: Configuration.
+
+///
+
+////
+
+//// tab | Pydantic v1
+
+{* ../../docs_src/settings/app03_an/config_pv1.py hl[9:10] *}
+
+/// tip | СовеÑ
+
+ÐлаÑÑ `Config` иÑполÑзÑеÑÑÑ ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð½ÑигÑÑаÑии Pydantic. ÐодÑобнее Ñм. Pydantic Model Config.
+
+///
+
+////
+
+/// info | ÐнÑоÑмаÑиÑ
+
+Ð Pydantic веÑÑии 1 конÑигÑÑаÑÐ¸Ñ Ð·Ð°Ð´Ð°Ð²Ð°Ð»Ð°ÑÑ Ð²Ð¾ внÑÑÑеннем клаÑÑе `Config`, в Pydantic веÑÑии 2 â в аÑÑибÑÑе `model_config`. ÐÑÐ¾Ñ Ð°ÑÑибÑÑ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ `dict`, и ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð°Ð²ÑозавеÑÑение и оÑибки «на леÑÑ», Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе импоÑÑиÑоваÑÑ Ð¸ иÑполÑзоваÑÑ `SettingsConfigDict` Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑÑого `dict`.
+
+///
+
+ÐдеÑÑ Ð¼Ñ Ð·Ð°Ð´Ð°ÐµÐ¼ паÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии `env_file` внÑÑÑи ваÑего клаÑÑа Pydantic `Settings` и ÑÑÑанавливаем знаÑение ÑавнÑм имени Ñайла dotenv, коÑоÑÑй Ñ
оÑим иÑполÑзоваÑÑ.
+
+### Создание `Settings` ÑолÑко один Ñаз Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `lru_cache` { #creating-the-settings-only-once-with-lru-cache }
+
+ЧÑение Ñайла Ñ Ð´Ð¸Ñка обÑÑно заÑÑаÑÐ½Ð°Ñ (медленнаÑ) опеÑаÑиÑ, поÑÑомÑ, веÑоÑÑно, Ð²Ñ Ð·Ð°Ñ
оÑиÑе ÑделаÑÑ ÑÑо один Ñаз и заÑем пеÑеиÑполÑзоваÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ обÑÐµÐºÑ Ð½Ð°ÑÑÑоек, а не ÑиÑаÑÑ Ñайл пÑи каждом запÑоÑе.
+
+Ðо каждÑй Ñаз, когда Ð¼Ñ Ð´ÐµÐ»Ð°ÐµÐ¼:
+
+```Python
+Settings()
+```
+
+ÑоздаеÑÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ `Settings`, и пÑи Ñоздании он Ñнова ÑÑиÑÑÐ²Ð°ÐµÑ Ñайл `.env`.
+
+ÐÑли Ð±Ñ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑи бÑла Ñакой:
+
+```Python
+def get_settings():
+ return Settings()
+```
+
+Ð¼Ñ Ð±Ñ Ñоздавали ÑÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ запÑоÑа и ÑиÑали Ñайл `.env` на каждÑй запÑоÑ. â ï¸
+
+Ðо Ñак как Ð¼Ñ Ð¸ÑполÑзÑем декоÑаÑÐ¾Ñ `@lru_cache` ÑвеÑÑ
Ñ, обÑÐµÐºÑ `Settings` бÑÐ´ÐµÑ Ñоздан ÑолÑко один Ñаз â пÑи пеÑвом вÑзове. âï¸
+
+{* ../../docs_src/settings/app03_an_py39/main.py hl[1,11] *}
+
+ÐаÑем пÑи лÑбÑÑ
поÑледÑÑÑиÑ
вÑзоваÑ
`get_settings()` в завиÑимоÑÑÑÑ
Ð´Ð»Ñ ÑледÑÑÑиÑ
запÑоÑов, вмеÑÑо вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð½ÑÑÑеннего кода `get_settings()` и ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ обÑекÑа `Settings`, бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ ÑÐ¾Ñ Ð¶Ðµ обÑекÑ, ÑÑо бÑл возвÑаÑен пÑи пеÑвом вÑзове, Ñнова и Ñнова.
+
+#### ТеÑ
ниÑеÑкие деÑали `lru_cache` { #lru-cache-technical-details }
+
+`@lru_cache` модиÑиÑиÑÑÐµÑ Ð´ÐµÐºÐ¾ÑиÑÑемÑÑ ÑÑнкÑÐ¸Ñ Ñак, ÑÑо она возвÑаÑÐ°ÐµÑ Ñо же знаÑение, ÑÑо и в пеÑвÑй Ñаз, вмеÑÑо повÑоÑного вÑÑиÑлениÑ, Ñо еÑÑÑ Ð²Ð¼ÐµÑÑо вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° ÑÑнкÑии каждÑй Ñаз.
+
+Таким обÑазом, ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð´ декоÑаÑоÑом бÑÐ´ÐµÑ Ð²Ñполнена один Ñаз Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ комбинаÑии аÑгÑменÑов. ÐаÑем знаÑениÑ, возвÑаÑеннÑе Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из ÑÑиÑ
комбинаÑий, бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ñнова и Ñнова пÑи вÑзове ÑÑнкÑии Ñ ÑоÑно Ñакой же комбинаÑией аÑгÑменÑов.
+
+ÐапÑимеÑ, еÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑÑнкÑиÑ:
+
+```Python
+@lru_cache
+def say_hi(name: str, salutation: str = "Ms."):
+ return f"Hello {salutation} {name}"
+```
+
+ваÑа пÑогÑамма Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ñак:
+
+```mermaid
+sequenceDiagram
+
+participant code as Code
+participant function as say_hi()
+participant execute as Execute function
+
+ rect rgba(0, 255, 0, .1)
+ code ->> function: say_hi(name="Camila")
+ function ->> execute: execute function code
+ execute ->> code: return the result
+ end
+
+ rect rgba(0, 255, 255, .1)
+ code ->> function: say_hi(name="Camila")
+ function ->> code: return stored result
+ end
+
+ rect rgba(0, 255, 0, .1)
+ code ->> function: say_hi(name="Rick")
+ function ->> execute: execute function code
+ execute ->> code: return the result
+ end
+
+ rect rgba(0, 255, 0, .1)
+ code ->> function: say_hi(name="Rick", salutation="Mr.")
+ function ->> execute: execute function code
+ execute ->> code: return the result
+ end
+
+ rect rgba(0, 255, 255, .1)
+ code ->> function: say_hi(name="Rick")
+ function ->> code: return stored result
+ end
+
+ rect rgba(0, 255, 255, .1)
+ code ->> function: say_hi(name="Camila")
+ function ->> code: return stored result
+ end
+```
+
+Ð ÑлÑÑае наÑей завиÑимоÑÑи `get_settings()` ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð¾Ð±Ñе не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð°ÑгÑменÑов, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð° вÑегда возвÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¾ и Ñо же знаÑение.
+
+Таким обÑазом, она Ð²ÐµÐ´ÐµÑ ÑÐµÐ±Ñ Ð¿Ð¾ÑÑи как глобалÑÐ½Ð°Ñ Ð¿ÐµÑеменнаÑ. Ðо Ñак как иÑполÑзÑеÑÑÑ ÑÑнкÑиÑâзавиÑимоÑÑÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ легко пеÑеопÑеделиÑÑ ÐµÐµ Ð´Ð»Ñ ÑеÑÑиÑованиÑ.
+
+`@lru_cache` â ÑаÑÑÑ `functools`, ÑÑо вÑ
Ð¾Ð´Ð¸Ñ Ð² ÑÑандаÑÑнÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Python. ÐодÑобнее можно пÑоÑиÑаÑÑ Ð² докÑменÑаÑии Python по `@lru_cache`.
+
+## ÐÑоги { #recap }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Pydantic Settings Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÑойками и конÑигÑÑаÑиÑми ваÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ моÑÑÑ Pydanticâмоделей.
+
+* ÐÑполÑзÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ, Ð²Ñ ÑпÑоÑаеÑе ÑеÑÑиÑование.
+* Ðожно иÑполÑзоваÑÑ ÑÐ°Ð¹Ð»Ñ `.env`.
+* `@lru_cache` позволÑÐµÑ Ð½Ðµ ÑиÑаÑÑ Ñайл dotenv Ñнова и Ñнова Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ запÑоÑа, пÑи ÑÑом Ð´Ð°Ð²Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÐµÑеопÑеделÑÑÑ ÐµÐ³Ð¾ во вÑÐµÐ¼Ñ ÑеÑÑиÑованиÑ.
diff --git a/docs/ru/docs/advanced/sub-applications.md b/docs/ru/docs/advanced/sub-applications.md
new file mode 100644
index 000000000..3464f1704
--- /dev/null
+++ b/docs/ru/docs/advanced/sub-applications.md
@@ -0,0 +1,67 @@
+# ÐодпÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â Mounts (монÑиÑование) { #sub-applications-mounts }
+
+ÐÑли вам нÑÐ¶Ð½Ñ Ð´Ð²Ð° незавиÑимÑÑ
пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI, каждое Ñо Ñвоим ÑобÑÑвеннÑм OpenAPI и ÑобÑÑвеннÑми инÑеÑÑейÑами докÑменÑаÑии, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе имеÑÑ Ð¾Ñновное пÑиложение и «ÑмонÑиÑоваÑÑ» одно (или неÑколÑко) подпÑиложений.
+
+## ÐонÑиÑование пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI** { #mounting-a-fastapi-application }
+
+«ÐонÑиÑование» ознаÑÐ°ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ полноÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимого пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ конкÑеÑÐ½Ð¾Ð¼Ñ Ð¿ÑÑи; далее оно бÑÐ´ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð²ÑÑ Ð¿Ð¾Ð´ ÑÑим пÑÑÑм, иÑполÑзÑÑ Ð¾Ð±ÑÑвленнÑе в подпÑиложении _опеÑаÑии пÑÑи_.
+
+### ÐÑиложение веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ { #top-level-application }
+
+СнаÑала ÑоздайÑе оÑновное, веÑÑ
него ÑÑовнÑ, пÑиложение **FastAPI** и его *опеÑаÑии пÑÑи*:
+
+{* ../../docs_src/sub_applications/tutorial001.py hl[3, 6:8] *}
+
+### ÐодпÑиложение { #sub-application }
+
+ÐаÑем ÑоздайÑе подпÑиложение и его *опеÑаÑии пÑÑи*.
+
+ÐÑо подпÑиложение â обÑÑное ÑÑандаÑÑное пÑиложение FastAPI, но именно оно бÑÐ´ÐµÑ Â«ÑмонÑиÑовано»:
+
+{* ../../docs_src/sub_applications/tutorial001.py hl[11, 14:16] *}
+
+### СмонÑиÑÑйÑе подпÑиложение { #mount-the-sub-application }
+
+РваÑем пÑиложении веÑÑ
него ÑÑовнÑ, `app`, ÑмонÑиÑÑйÑе подпÑиложение `subapi`.
+
+Ð ÑÑом ÑлÑÑае оно бÑÐ´ÐµÑ ÑмонÑиÑовано по пÑÑи `/subapi`:
+
+{* ../../docs_src/sub_applications/tutorial001.py hl[11, 19] *}
+
+### ÐÑовеÑÑÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API { #check-the-automatic-api-docs }
+
+ТепеÑÑ Ð·Ð°Ð¿ÑÑÑиÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `fastapi` Ñ Ð²Ð°Ñим Ñайлом:
+
+
+
+```console
+$ fastapi dev main.py
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+РоÑкÑойÑе докÑменÑаÑÐ¸Ñ Ð¿Ð¾ адÑеÑÑ http://127.0.0.1:8000/docs.
+
+ÐÑ ÑвидиÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API Ð´Ð»Ñ Ð¾Ñновного пÑиложениÑ, вклÑÑаÑÑÑÑ ÑолÑко его ÑобÑÑвеннÑе _опеÑаÑии пÑÑи_:
+
+
+
+ÐаÑем оÑкÑойÑе докÑменÑаÑÐ¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ адÑеÑÑ http://127.0.0.1:8000/subapi/docs.
+
+ÐÑ ÑвидиÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿ÑиложениÑ, вклÑÑаÑÑÑÑ ÑолÑко его ÑобÑÑвеннÑе _опеÑаÑии пÑÑи_, вÑе под коÑÑекÑнÑм пÑеÑикÑом подпÑÑи `/subapi`:
+
+
+
+ÐÑли Ð²Ñ Ð¿Ð¾Ð¿ÑобÑеÑе взаимодейÑÑвоваÑÑ Ñ Ð»ÑбÑм из двÑÑ
инÑеÑÑейÑов, вÑÑ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ ÐºÐ¾ÑÑекÑно, поÑÐ¾Ð¼Ñ ÑÑо бÑаÑÐ·ÐµÑ ÑÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÐºÐ¾Ð½ÐºÑеÑÐ½Ð¾Ð¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ подпÑиложениÑ.
+
+### ТеÑ
ниÑеÑкие подÑобноÑÑи: `root_path` { #technical-details-root-path }
+
+Ðогда Ð²Ñ Ð¼Ð¾Ð½ÑиÑÑеÑе подпÑиложение, как опиÑано вÑÑе, FastAPI позабоÑиÑÑÑ Ð¾ пеÑедаÑе пÑÑи монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿ÑиложениÑ, иÑполÑзÑÑ Ð¼ÐµÑ
анизм из ÑпеÑиÑикаÑии ASGI под названием `root_path`.
+
+Таким обÑазом подпÑиложение бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, ÑÑо Ð´Ð»Ñ Ð¸Ð½ÑеÑÑейÑа докÑменÑаÑии нÑжно иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¿ÑеÑÐ¸ÐºÑ Ð¿ÑÑи.
+
+У подпÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñакже могÑÑ Ð±ÑÑÑ Ñвои ÑобÑÑвеннÑе ÑмонÑиÑованнÑе подпÑиложениÑ, и вÑÑ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ ÐºÐ¾ÑÑекÑно, поÑÐ¾Ð¼Ñ ÑÑо FastAPI авÑомаÑиÑеÑки обÑабаÑÑÐ²Ð°ÐµÑ Ð²Ñе ÑÑи `root_path`.
+
+ÐÑ ÑзнаеÑе болÑÑе о `root_path` и о Ñом, как иÑполÑзоваÑÑ ÐµÐ³Ð¾ Ñвно, в Ñазделе [Ðа пÑокÑи](behind-a-proxy.md){.internal-link target=_blank}.
diff --git a/docs/ru/docs/advanced/templates.md b/docs/ru/docs/advanced/templates.md
new file mode 100644
index 000000000..5675ff48a
--- /dev/null
+++ b/docs/ru/docs/advanced/templates.md
@@ -0,0 +1,126 @@
+# Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ { #templates }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð»Ñбой ÑаблонизаÑÐ¾Ñ Ð²Ð¼ÐµÑÑе Ñ **FastAPI**.
+
+ЧаÑÑо вÑбиÑаÑÑ Jinja2 â ÑÐ¾Ñ Ð¶Ðµ, ÑÑо иÑполÑзÑеÑÑÑ Ð²Ð¾ Flask и дÑÑгиÑ
инÑÑÑÑменÑаÑ
.
+
+ÐÑÑÑ ÑÑилиÑÑ Ð´Ð»Ñ Ð¿ÑоÑÑой наÑÑÑойки, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿ÑÑмо в Ñвоем пÑиложении **FastAPI** (пÑедоÑÑавлÑÑÑÑÑ Starlette).
+
+## УÑÑановка завиÑимоÑÑей { #install-dependencies }
+
+УбедиÑеÑÑ, ÑÑо Ð²Ñ Ñоздали [виÑÑÑалÑное окÑÑжение](../virtual-environments.md){.internal-link target=_blank}, акÑивиÑовали его и ÑÑÑановили `jinja2`:
+
+
+
+```console
+$ pip install jinja2
+
+---> 100%
+```
+
+
+
+## ÐÑполÑзование `Jinja2Templates` { #using-jinja2templates }
+
+- ÐмпоÑÑиÑÑйÑе `Jinja2Templates`.
+- СоздайÑе обÑÐµÐºÑ `templates`, коÑоÑÑй ÑможеÑе пеÑеиÑполÑзоваÑÑ Ð¿Ð¾Ð·Ð¶Ðµ.
+- ÐбÑÑвиÑе паÑамеÑÑ `Request` в *опеÑаÑии пÑÑи*, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ñаблон.
+- ÐÑполÑзÑйÑе ÑозданнÑй `templates`, ÑÑÐ¾Ð±Ñ Ð¾ÑÑендеÑиÑÑ Ð¸ веÑнÑÑÑ `TemplateResponse`; пеÑедайÑе Ð¸Ð¼Ñ Ñаблона, обÑÐµÐºÑ `request` и ÑловаÑÑ Â«context» Ñ Ð¿Ð°Ñами клÑÑ-знаÑение Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð½ÑÑÑи Ñаблона Jinja2.
+
+{* ../../docs_src/templates/tutorial001.py hl[4,11,15:18] *}
+
+/// note | ÐÑимеÑание
+
+Ðо FastAPI 0.108.0, Starlette 0.29.0, `name` бÑл пеÑвÑм паÑамеÑÑом.
+
+Также ÑанÑÑе, в пÑедÑдÑÑиÑ
веÑÑиÑÑ
, обÑÐµÐºÑ `request` пеÑедавалÑÑ ÐºÐ°Ðº ÑаÑÑÑ Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑение в конÑекÑÑе Ð´Ð»Ñ Jinja2.
+
+///
+
+/// tip | СовеÑ
+
+ÐÑли ÑказаÑÑ `response_class=HTMLResponse`, инÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии ÑÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделиÑÑ, ÑÑо оÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð² ÑоÑмаÑе HTML.
+
+///
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+Ðожно Ñакже иÑполÑзоваÑÑ `from starlette.templating import Jinja2Templates`.
+
+**FastAPI** пÑедоÑÑавлÑÐµÑ ÑÐ¾Ñ Ð¶Ðµ `starlette.templating` как `fastapi.templating` пÑоÑÑо Ð´Ð»Ñ ÑдобÑÑва ÑазÑабоÑÑика. Ðо болÑÑинÑÑво доÑÑÑпнÑÑ
оÑвеÑов пÑиÑ
одÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Starlette. Так же и Ñ `Request` и `StaticFiles`.
+
+///
+
+## ÐапиÑание Ñаблонов { #writing-templates }
+
+ÐаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ñаблон в `templates/item.html`, напÑимеÑ:
+
+```jinja hl_lines="7"
+{!../../docs_src/templates/templates/item.html!}
+```
+
+### ÐнаÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑекÑÑа Ñаблона { #template-context-values }
+
+Ð HTML, коÑоÑÑй ÑодеÑжиÑ:
+
+{% raw %}
+
+```jinja
+Item ID: {{ id }}
+```
+
+{% endraw %}
+
+...бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ `id`, взÑÑÑй из пеÑеданного вами «context» `dict`:
+
+```Python
+{"id": id}
+```
+
+ÐапÑимеÑ, Ð´Ð»Ñ ID `42` ÑÑо оÑÑендеÑиÑÑÑ ÐºÐ°Ðº:
+
+```html
+Item ID: 42
+```
+
+### ÐÑгÑменÑÑ `url_for` в Ñаблоне { #template-url-for-arguments }
+
+ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `url_for()` внÑÑÑи Ñаблона â он пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ñе же аÑгÑменÑÑ, ÑÑо иÑполÑзовалиÑÑ Ð±Ñ Ð²Ð°Ñей *ÑÑнкÑией-обÑабоÑÑиком пÑÑи*.
+
+Таким обÑазом, ÑÑагменÑ:
+
+{% raw %}
+
+```jinja
+
+```
+
+{% endraw %}
+
+...ÑгенеÑиÑÑÐµÑ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÐ¾Ñ Ð¶Ðµ URL, коÑоÑÑй обÑабаÑÑваеÑÑÑ *ÑÑнкÑией-обÑабоÑÑиком пÑÑи* `read_item(id=id)`.
+
+ÐапÑимеÑ, Ð´Ð»Ñ ID `42` ÑÑо оÑÑендеÑиÑÑÑ ÐºÐ°Ðº:
+
+```html
+
+```
+
+## Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ Ð¸ ÑÑаÑиÑеÑкие ÑÐ°Ð¹Ð»Ñ { #templates-and-static-files }
+
+ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `url_for()` внÑÑÑи Ñаблона, напÑимеÑ, Ñ `StaticFiles`, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð½ÑиÑовали Ñ `name="static"`.
+
+```jinja hl_lines="4"
+{!../../docs_src/templates/templates/item.html!}
+```
+
+Ð ÑÑом пÑимеÑе бÑÐ´ÐµÑ Ñоздана ÑÑÑлка на CSS-Ñайл `static/styles.css` Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ:
+
+```CSS hl_lines="4"
+{!../../docs_src/templates/static/styles.css!}
+```
+
+Ð, Ñак как Ð²Ñ Ð¸ÑполÑзÑеÑе `StaticFiles`, ÑÑÐ¾Ñ CSS-Ñайл бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки «оÑдаваÑÑÑÑ» ваÑим пÑиложением **FastAPI** по URL `/static/styles.css`.
+
+## ÐодÑобнее { #more-details }
+
+ÐолÑÑе подÑобноÑÑей, вклÑÑÐ°Ñ Ñо, как ÑеÑÑиÑоваÑÑ ÑаблонÑ, ÑмоÑÑиÑе в докÑменÑаÑии Starlette по Ñаблонам.
diff --git a/docs/ru/docs/advanced/testing-dependencies.md b/docs/ru/docs/advanced/testing-dependencies.md
new file mode 100644
index 000000000..2846c5b9a
--- /dev/null
+++ b/docs/ru/docs/advanced/testing-dependencies.md
@@ -0,0 +1,53 @@
+# ТеÑÑиÑование завиÑимоÑÑей Ñ Ð¿ÐµÑеопÑеделениÑми { #testing-dependencies-with-overrides }
+
+## ÐеÑеопÑеделение завиÑимоÑÑей во вÑÐµÐ¼Ñ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ { #overriding-dependencies-during-testing }
+
+ÐÑÑÑ ÑÑенаÑии, когда Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¿ÐµÑеопÑеделиÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÑеÑÑиÑованиÑ.
+
+ÐÑ Ð½Ðµ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¸ÑÑ
Ð¾Ð´Ð½Ð°Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð²ÑполнÑлаÑÑ (и лÑбÑе ÐµÑ Ð¿Ð¾Ð´Ð·Ð°Ð²Ð¸ÑимоÑÑи Ñоже).
+
+ÐмеÑÑо ÑÑого Ð²Ñ Ñ
оÑиÑе пÑедоÑÑавиÑÑ Ð´ÑÑгÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко во вÑÐµÐ¼Ñ ÑеÑÑов (возможно, ÑолÑко в некоÑоÑÑÑ
конкÑеÑнÑÑ
ÑеÑÑаÑ
) и бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð·Ð½Ð°Ñение, коÑоÑое можно иÑполÑзоваÑÑ Ð²ÐµÐ·Ð´Ðµ, где иÑполÑзовалоÑÑ Ð·Ð½Ð°Ñение иÑÑ
одной завиÑимоÑÑи.
+
+### ÐаÑианÑÑ Ð¸ÑполÑзованиÑ: внеÑний ÑеÑÐ²Ð¸Ñ { #use-cases-external-service }
+
+ÐÑимеÑ: Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð²Ð½ÐµÑний пÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ Ð°ÑÑенÑиÑикаÑии, к коÑоÑÐ¾Ð¼Ñ Ð½Ñжно обÑаÑаÑÑÑÑ.
+
+ÐÑ Ð¾ÑпÑавлÑеÑе ÐµÐ¼Ñ Ñокен, а он возвÑаÑÐ°ÐµÑ Ð°ÑÑенÑиÑиÑиÑованного полÑзоваÑелÑ.
+
+Такой пÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑаÑÑ Ð¿Ð»Ð°ÑÑ Ð·Ð° каждÑй запÑоÑ, и его вÑзов Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð±Ð¾Ð»ÑÑе вÑемени, Ñем иÑполÑзование ÑикÑиÑованного мок-полÑзоваÑÐµÐ»Ñ Ð´Ð»Ñ ÑеÑÑов.
+
+ÐеÑоÑÑно, Ð²Ñ Ð·Ð°Ñ
оÑиÑе пÑоÑеÑÑиÑоваÑÑ Ð²Ð½ÐµÑний пÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ Ð¾Ð´Ð¸Ð½ Ñаз, но не обÑзаÑелÑно вÑзÑваÑÑ ÐµÐ³Ð¾ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ запÑÑкаемого ÑеÑÑа.
+
+Ð Ñаком ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑеопÑеделиÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ, коÑоÑÐ°Ñ Ð¾Ð±ÑаÑаеÑÑÑ Ðº ÑÑÐ¾Ð¼Ñ Ð¿ÑовайдеÑÑ, и иÑполÑзоваÑÑ ÑобÑÑвеннÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ, возвÑаÑаÑÑÑÑ Ð¼Ð¾Ðº-полÑзоваÑелÑ, ÑолÑко Ð´Ð»Ñ Ð²Ð°ÑиÑ
ÑеÑÑов.
+
+### ÐÑполÑзÑйÑе аÑÑибÑÑ `app.dependency_overrides` { #use-the-app-dependency-overrides-attribute }
+
+ÐÐ»Ñ ÑакиÑ
ÑлÑÑаев Ñ Ð²Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI** еÑÑÑ Ð°ÑÑибÑÑ `app.dependency_overrides`, ÑÑо пÑоÑÑой `dict`.
+
+ЧÑÐ¾Ð±Ñ Ð¿ÐµÑеопÑеделиÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð´Ð»Ñ ÑеÑÑиÑованиÑ, ÑкажиÑе в каÑеÑÑве клÑÑа иÑÑ
однÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ (ÑÑнкÑиÑ), а в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ â ваÑе пеÑеопÑеделение завиÑимоÑÑи (дÑÑгÑÑ ÑÑнкÑиÑ).
+
+Тогда **FastAPI** бÑÐ´ÐµÑ Ð²ÑзÑваÑÑ ÑÑо пеÑеопÑеделение вмеÑÑо иÑÑ
одной завиÑимоÑÑи.
+
+{* ../../docs_src/dependency_testing/tutorial001_an_py310.py hl[26:27,30] *}
+
+/// tip | СовеÑ
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ Ð¿ÐµÑеопÑеделение Ð´Ð»Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑи, иÑполÑзÑемой в лÑбом меÑÑе ваÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI**.
+
+ÐÑÑ
Ð¾Ð´Ð½Ð°Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² ÑÑнкÑии-обÑабоÑÑике пÑÑи, в декоÑаÑоÑе опеÑаÑии пÑÑи (когда Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе возвÑаÑаемое знаÑение), в вÑзове `.include_router()` и Ñ.д.
+
+FastAPI вÑÑ Ñавно ÑÐ¼Ð¾Ð¶ÐµÑ ÐµÑ Ð¿ÐµÑеопÑеделиÑÑ.
+
+///
+
+ÐаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑбÑоÑиÑÑ Ð¿ÐµÑеопÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ (ÑдалиÑÑ Ð¸Ñ
), ÑÑÑановив `app.dependency_overrides` в пÑÑÑой `dict`:
+
+```Python
+app.dependency_overrides = {}
+```
+
+/// tip | СовеÑ
+
+ÐÑли Ð²Ñ Ñ
оÑиÑе пеÑеопÑеделÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ ÑолÑко во вÑÐµÐ¼Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
ÑеÑÑов, задайÑе пеÑеопÑеделение в наÑале ÑеÑÑа (внÑÑÑи ÑÑнкÑии ÑеÑÑа) и ÑбÑоÑÑÑе его в конÑе (в конÑе ÑÑнкÑии ÑеÑÑа).
+
+///
diff --git a/docs/ru/docs/advanced/testing-events.md b/docs/ru/docs/advanced/testing-events.md
new file mode 100644
index 000000000..1bf8e4723
--- /dev/null
+++ b/docs/ru/docs/advanced/testing-events.md
@@ -0,0 +1,12 @@
+# ТеÑÑиÑование ÑобÑÑий: lifespan и startup - shutdown { #testing-events-lifespan-and-startup-shutdown }
+
+ÐÑли вам нÑжно, ÑÑÐ¾Ð±Ñ `lifespan` вÑполнÑлÑÑ Ð² ваÑиÑ
ÑеÑÑаÑ
, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `TestClient` вмеÑÑе Ñ Ð¾Ð¿ÐµÑаÑоÑом `with`:
+
+{* ../../docs_src/app_testing/tutorial004.py hl[9:15,18,27:28,30:32,41:43] *}
+
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе подÑобноÑÑей в ÑÑаÑÑе [ÐапÑÑк lifespan в ÑеÑÑаÑ
на оÑиÑиалÑном ÑайÑе докÑменÑаÑии Starlette.](https://www.starlette.io/lifespan/#running-lifespan-in-tests)
+
+ÐÐ»Ñ ÑÑÑаÑевÑиÑ
ÑобÑÑий `startup` и `shutdown` Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `TestClient` ÑледÑÑÑим обÑазом:
+
+{* ../../docs_src/app_testing/tutorial003.py hl[9:12,20:24] *}
diff --git a/docs/ru/docs/advanced/testing-websockets.md b/docs/ru/docs/advanced/testing-websockets.md
new file mode 100644
index 000000000..7c0ca2594
--- /dev/null
+++ b/docs/ru/docs/advanced/testing-websockets.md
@@ -0,0 +1,13 @@
+# ТеÑÑиÑование WebSocket { #testing-websockets }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÐ¾Ñ Ð¶Ðµ `TestClient` Ð´Ð»Ñ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ WebSocket.
+
+ÐÐ»Ñ ÑÑого иÑполÑзÑйÑе `TestClient` Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑом конÑекÑÑа `with`, подклÑÑаÑÑÑ Ðº WebSocket:
+
+{* ../../docs_src/app_testing/tutorial002.py hl[27:31] *}
+
+/// note | ÐÑимеÑание
+
+ÐодÑобноÑÑи ÑмоÑÑиÑе в докÑменÑаÑии Starlette по ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ WebSocket.
+
+///
diff --git a/docs/ru/docs/advanced/using-request-directly.md b/docs/ru/docs/advanced/using-request-directly.md
new file mode 100644
index 000000000..bff2ddcb7
--- /dev/null
+++ b/docs/ru/docs/advanced/using-request-directly.md
@@ -0,0 +1,56 @@
+# ÐÑÑмое иÑполÑзование Request { #using-the-request-directly }
+
+Ðо ÑÑого Ð²Ñ Ð¾Ð±ÑÑвлÑли нÑжнÑе ÑаÑÑи HTTP-запÑоÑа вмеÑÑе Ñ Ð¸Ñ
Ñипами.
+
+ÐÐ·Ð²Ð»ÐµÐºÐ°Ñ Ð´Ð°Ð½Ð½Ñе из:
+
+* пÑÑи (как паÑамеÑÑов),
+* HTTP-заголовков,
+* Cookie,
+* и Ñ.д.
+
+Тем ÑамÑм **FastAPI** валидиÑÑÐµÑ ÑÑи даннÑе, пÑеобÑазÑÐµÑ Ð¸Ñ
и авÑомаÑиÑеÑки генеÑиÑÑÐµÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð´Ð»Ñ Ð²Ð°Ñего API.
+
+Ðо бÑваÑÑ ÑиÑÑаÑии, когда нÑжно обÑаÑиÑÑÑÑ Ðº обÑекÑÑ `Request` напÑÑмÑÑ.
+
+## ÐодÑобноÑÑи об обÑекÑе `Request` { #details-about-the-request-object }
+
+Так как под капоÑом **FastAPI** â ÑÑо **Starlette** Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑм Ñлоем инÑÑÑÑменÑов, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑи необÑ
одимоÑÑи напÑÑмÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð±ÑÐµÐºÑ `Request` из Starlette.
+
+ÐÑо Ñакже ознаÑаеÑ, ÑÑо еÑли Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе даннÑе напÑÑмÑÑ Ð¸Ð· обÑекÑа `Request` (напÑимеÑ, ÑиÑаеÑе Ñело запÑоÑа), Ñо они не бÑдÑÑ Ð²Ð°Ð»Ð¸Ð´Ð¸ÑоваÑÑÑÑ, конвеÑÑиÑоваÑÑÑÑ Ð¸Ð»Ð¸ докÑменÑиÑоваÑÑÑÑ (Ñ OpenAPI, Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого полÑзоваÑелÑÑкого инÑеÑÑейÑа API) ÑÑедÑÑвами FastAPI.
+
+ÐÑи ÑÑом лÑбой дÑÑгой паÑамеÑÑ, обÑÑвленнÑй обÑÑнÑм обÑазом (напÑимеÑ, Ñело запÑоÑа Ñ Pydantic-моделÑÑ), по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð±ÑÐ´ÐµÑ Ð²Ð°Ð»Ð¸Ð´Ð¸ÑоваÑÑÑÑ, конвеÑÑиÑоваÑÑÑÑ, анноÑиÑоваÑÑÑÑ Ð¸ Ñ.д.
+
+Ðо еÑÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑе ÑлÑÑаи, когда полезно полÑÑиÑÑ Ð¾Ð±ÑÐµÐºÑ `Request`.
+
+## ÐÑполÑзÑйÑе обÑÐµÐºÑ `Request` напÑÑмÑÑ { #use-the-request-object-directly }
+
+ÐÑедÑÑавим, ÑÑо Ð²Ñ Ñ
оÑиÑе полÑÑиÑÑ IP-адÑеÑ/Ñ
оÑÑ ÐºÐ»Ð¸ÐµÐ½Ñа внÑÑÑи ваÑей *ÑÑнкÑии-обÑабоÑÑика пÑÑи*.
+
+ÐÐ»Ñ ÑÑого нÑжно обÑаÑиÑÑÑÑ Ðº запÑоÑÑ Ð½Ð°Ð¿ÑÑмÑÑ.
+
+{* ../../docs_src/using_request_directly/tutorial001.py hl[1,7:8] *}
+
+ÐÑли обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ *ÑÑнкÑии-обÑабоÑÑика пÑÑи* Ñ Ñипом `Request`, **FastAPI** поймÑÑ, ÑÑо нÑжно пеÑедаÑÑ Ð¾Ð±ÑÐµÐºÑ `Request` в ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ.
+
+/// tip | СовеÑ
+
+ÐбÑаÑиÑе внимание, ÑÑо в ÑÑом пÑимеÑе Ð¼Ñ Ð¾Ð±ÑÑвлÑем path-паÑамеÑÑ Ð²Ð¼ÐµÑÑе Ñ Ð¿Ð°ÑамеÑÑом `Request`.
+
+Таким обÑазом, path-паÑамеÑÑ Ð±ÑÐ´ÐµÑ Ð¸Ð·Ð²Ð»ÐµÑÑн, валидиÑован, пÑеобÑазован к ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ Ð¸ задокÑменÑиÑован в OpenAPI.
+
+ТоÑно Ñак же Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвлÑÑÑ Ð»ÑбÑе дÑÑгие паÑамеÑÑÑ ÐºÐ°Ðº обÑÑно и, дополниÑелÑно, полÑÑаÑÑ `Request`.
+
+///
+
+## ÐокÑменÑаÑÐ¸Ñ Ð¿Ð¾ `Request` { #request-documentation }
+
+ÐодÑобнее об обÑекÑе `Request` на оÑиÑиалÑном ÑайÑе докÑменÑаÑии Starlette.
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette.requests import Request`.
+
+**FastAPI** пÑедоÑÑавлÑÐµÑ ÐµÐ³Ð¾ напÑÑмÑÑ Ð´Ð»Ñ ÑдобÑÑва ÑазÑабоÑÑика, но Ñам обÑÐµÐºÑ Ð¿ÑиÑ
Ð¾Ð´Ð¸Ñ Ð¸Ð· Starlette.
+
+///
diff --git a/docs/ru/docs/advanced/wsgi.md b/docs/ru/docs/advanced/wsgi.md
new file mode 100644
index 000000000..1c5bf0a62
--- /dev/null
+++ b/docs/ru/docs/advanced/wsgi.md
@@ -0,0 +1,35 @@
+# ÐодклÑÑение WSGI â Flask, Django и дÑÑгие { #including-wsgi-flask-django-others }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе монÑиÑоваÑÑ WSGIâпÑиложениÑ, как Ð²Ñ Ð²Ð¸Ð´ÐµÐ»Ð¸ в [ÐодпÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â Mounts](sub-applications.md){.internal-link target=_blank}, [Ðа пÑокÑиâÑеÑвеÑом](behind-a-proxy.md){.internal-link target=_blank}.
+
+ÐÐ»Ñ ÑÑого Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `WSGIMiddleware` и обеÑнÑÑÑ Ð¸Ð¼ ваÑе WSGIâпÑиложение, напÑÐ¸Ð¼ÐµÑ Flask, Django и Ñ.д.
+
+## ÐÑполÑзование `WSGIMiddleware` { #using-wsgimiddleware }
+
+ÐÑжно импоÑÑиÑоваÑÑ `WSGIMiddleware`.
+
+ÐаÑем обеÑниÑе WSGIâпÑиложение (напÑимеÑ, Flask) в middleware (ÐÑомежÑÑоÑнÑй Ñлой).
+
+ÐоÑле ÑÑого ÑмонÑиÑÑйÑе его на пÑÑÑ.
+
+{* ../../docs_src/wsgi/tutorial001.py hl[2:3,3] *}
+
+## ÐÑовеÑÑÑе { #check-it }
+
+ТепеÑÑ ÐºÐ°Ð¶Ð´Ñй HTTPâзапÑÐ¾Ñ Ð¿Ð¾ пÑÑи `/v1/` бÑÐ´ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ Ð¿Ñиложением Flask.
+
+РвÑÑ Ð¾ÑÑалÑное бÑÐ´ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ **FastAPI**.
+
+ÐÑли Ð²Ñ Ð·Ð°Ð¿ÑÑÑиÑе ÑÑо и пеÑейдÑÑе по http://localhost:8000/v1/, Ð²Ñ ÑвидиÑе HTTPâоÑÐ²ÐµÑ Ð¾Ñ Flask:
+
+```txt
+Hello, World from Flask!
+```
+
+РеÑли Ð²Ñ Ð¿ÐµÑейдÑÑе по http://localhost:8000/v2, Ð²Ñ ÑвидиÑе HTTPâоÑÐ²ÐµÑ Ð¾Ñ FastAPI:
+
+```JSON
+{
+ "message": "Hello World"
+}
+```
diff --git a/docs/ru/docs/deployment/cloud.md b/docs/ru/docs/deployment/cloud.md
new file mode 100644
index 000000000..a400d1843
--- /dev/null
+++ b/docs/ru/docs/deployment/cloud.md
@@ -0,0 +1,16 @@
+# РазвеÑÑÑвание FastAPI Ñ Ð¾Ð±Ð»Ð°ÑнÑÑ
пÑовайдеÑов { #deploy-fastapi-on-cloud-providers }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿ÑакÑиÑеÑки лÑбого облаÑного пÑовайдеÑа, ÑÑÐ¾Ð±Ñ ÑазвеÑнÑÑÑ Ñвое пÑиложение на FastAPI.
+
+РболÑÑинÑÑве ÑлÑÑаев Ñ Ð¾ÑновнÑÑ
облаÑнÑÑ
пÑовайдеÑов еÑÑÑ ÑÑководÑÑва по ÑазвеÑÑÑÐ²Ð°Ð½Ð¸Ñ FastAPI на иÑ
плаÑÑоÑме.
+
+## ÐблаÑнÑе пÑовайдеÑÑ â ÑпонÑоÑÑ { #cloud-providers-sponsors }
+
+ÐекоÑоÑÑе облаÑнÑе пÑовайдеÑÑ â¨ [**ÑпонÑиÑÑÑÑ FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ⨠â ÑÑо обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð½ÐµÐ¿ÑеÑÑвное и здоÑовое ÑазвиÑие FastAPI и его ÑкоÑиÑÑемÑ.
+
+Ð ÑÑо показÑÐ²Ð°ÐµÑ Ð¸Ñ
иÑкÑеннÑÑ Ð¿ÑивеÑженноÑÑÑ FastAPI и его ÑообÑеÑÑÐ²Ñ (вам): они не ÑолÑко Ñ
оÑÑÑ Ð¿ÑедоÑÑавиÑÑ Ð²Ð°Ð¼ Ñ
оÑоÑий ÑеÑвиÑ, но и ÑÑÑемÑÑÑÑ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо Ñ Ð²Ð°Ñ Ð±ÑÐ´ÐµÑ Ñ
оÑоÑий и ÑÑабилÑнÑй ÑÑеймвоÑк â FastAPI. ð
+
+Ðозможно, Ð²Ñ Ð·Ð°Ñ
оÑиÑе попÑобоваÑÑ Ð¸Ñ
ÑеÑвиÑÑ Ð¸ воÑполÑзоваÑÑÑÑ Ð¸Ñ
ÑÑководÑÑвами:
+
+* Render
+* Railway
diff --git a/docs/ru/docs/deployment/server-workers.md b/docs/ru/docs/deployment/server-workers.md
new file mode 100644
index 000000000..e756ab377
--- /dev/null
+++ b/docs/ru/docs/deployment/server-workers.md
@@ -0,0 +1,139 @@
+# СеÑвеÑнÑе воÑкеÑÑ â Uvicorn Ñ Ð²Ð¾ÑкеÑами { #server-workers-uvicorn-with-workers }
+
+ÐавайÑе Ñнова вÑпомним Ñе конÑепÑии деплоÑ, о коÑоÑÑÑ
говоÑили Ñанее:
+
+* ÐезопаÑноÑÑÑ â HTTPS
+* ÐапÑÑк пÑи ÑÑаÑÑе
+* ÐеÑезапÑÑки
+* **РепликаÑÐ¸Ñ (колиÑеÑÑво запÑÑеннÑÑ
пÑоÑеÑÑов)**
+* ÐамÑÑÑ
+* ÐÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком
+
+Ðо ÑÑого моменÑа, ÑледÑÑ ÑÑководÑÑвам в докÑменÑаÑии, вÑ, веÑоÑÑно, запÑÑкали **ÑеÑвеÑнÑÑ Ð¿ÑогÑаммÑ**, напÑÐ¸Ð¼ÐµÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `fastapi`, коÑоÑÐ°Ñ Ð·Ð°Ð¿ÑÑÐºÐ°ÐµÑ Uvicorn в **одном пÑоÑеÑÑе**.
+
+ÐÑи деплое пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð°Ð¼, ÑкоÑее вÑего, заÑ
оÑеÑÑÑ Ð¸ÑполÑзоваÑÑ **ÑепликаÑÐ¸Ñ Ð¿ÑоÑеÑÑов**, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ **неÑколÑко ÑдеÑ** и имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð±Ð¾Ð»ÑÑе запÑоÑов.
+
+Ðак Ð²Ñ Ð²Ð¸Ð´ÐµÐ»Ð¸ в пÑедÑдÑÑей главе о [ÐонÑепÑиÑÑ
деплоÑ](concepts.md){.internal-link target=_blank}, ÑÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑÑÑаÑегий.
+
+ÐдеÑÑ Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ, как иÑполÑзоваÑÑ **Uvicorn** Ñ **воÑкеÑ-пÑоÑеÑÑами** ÑеÑез ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `fastapi` или напÑÑмÑÑ ÑеÑез ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `uvicorn`.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе конÑейнеÑÑ, напÑÐ¸Ð¼ÐµÑ Docker или Kubernetes, Ñ ÑаÑÑÐºÐ°Ð¶Ñ Ð¾Ð± ÑÑом подÑобнее в ÑледÑÑÑей главе: [FastAPI в конÑейнеÑаÑ
â Docker](docker.md){.internal-link target=_blank}.
+
+Ð ÑаÑÑноÑÑи, пÑи запÑÑке в **Kubernetes** вам, ÑкоÑее вÑего, **не** понадобиÑÑÑ Ð¸ÑполÑзоваÑÑ Ð²Ð¾ÑкеÑÑ â вмеÑÑо ÑÑого запÑÑкайÑе **один пÑоÑеÑÑ Uvicorn на конÑейнеÑ**, но об ÑÑом подÑобнее далее в Ñой главе.
+
+///
+
+## ÐеÑколÑко воÑкеÑов { #multiple-workers }
+
+Ðожно запÑÑÑиÑÑ Ð½ÐµÑколÑко воÑкеÑов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿Ñии командной ÑÑÑоки `--workers`:
+
+//// tab | `fastapi`
+
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `fastapi`:
+
+
+
+```console
+$ fastapi run --workers 4 main.py
+
+ FastAPI Starting production server ð
+
+ Searching for package file structure from directories with
+ __init__.py files
+ Importing from /home/user/code/awesomeapp
+
+ module ð main.py
+
+ code Importing the FastAPI app object from the module with the
+ following code:
+
+ from main import app
+
+ app Using import string: main:app
+
+ server Server started at http://0.0.0.0:8000
+ server Documentation at http://0.0.0.0:8000/docs
+
+ Logs:
+
+ INFO Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to
+ quit)
+ INFO Started parent process [27365]
+ INFO Started server process [27368]
+ INFO Started server process [27369]
+ INFO Started server process [27370]
+ INFO Started server process [27367]
+ INFO Waiting for application startup.
+ INFO Waiting for application startup.
+ INFO Waiting for application startup.
+ INFO Waiting for application startup.
+ INFO Application startup complete.
+ INFO Application startup complete.
+ INFO Application startup complete.
+ INFO Application startup complete.
+```
+
+
+
+////
+
+//// tab | `uvicorn`
+
+ÐÑли Ð²Ñ Ð¿ÑедпоÑиÑаеÑе иÑполÑзоваÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `uvicorn` напÑÑмÑÑ:
+
+
+
+```console
+$ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
+INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
+INFO: Started parent process [27365]
+INFO: Started server process [27368]
+INFO: Waiting for application startup.
+INFO: Application startup complete.
+INFO: Started server process [27369]
+INFO: Waiting for application startup.
+INFO: Application startup complete.
+INFO: Started server process [27370]
+INFO: Waiting for application startup.
+INFO: Application startup complete.
+INFO: Started server process [27367]
+INFO: Waiting for application startup.
+INFO: Application startup complete.
+```
+
+
+
+////
+
+ÐдинÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð½Ð¾Ð²Ð°Ñ Ð¾Ð¿ÑÐ¸Ñ Ð·Ð´ÐµÑÑ â `--workers`, она говоÑÐ¸Ñ Uvicorn запÑÑÑиÑÑ 4 воÑкеÑ-пÑоÑеÑÑа.
+
+Также видно, ÑÑо вÑводиÑÑÑ **PID** каждого пÑоÑеÑÑа: `27365` â Ð´Ð»Ñ ÑодиÑелÑÑкого пÑоÑеÑÑа (ÑÑо **Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов**) и по Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ воÑкеÑ-пÑоÑеÑÑа: `27368`, `27369`, `27370` и `27367`.
+
+## ÐонÑепÑии Ð´ÐµÐ¿Ð»Ð¾Ñ { #deployment-concepts }
+
+ÐдеÑÑ Ð²Ñ Ñвидели, как иÑполÑзоваÑÑ Ð½ÐµÑколÑко **воÑкеÑов**, ÑÑÐ¾Ð±Ñ **ÑаÑпаÑаллелиÑÑ** вÑполнение пÑиложениÑ, задейÑÑвоваÑÑ **неÑколÑко ÑдеÑ** CPU и обÑлÑживаÑÑ **болÑÑе запÑоÑов**.
+
+Ðз ÑпиÑка конÑепÑий Ð´ÐµÐ¿Ð»Ð¾Ñ Ð²ÑÑе иÑполÑзование воÑкеÑов в оÑновном Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ñ **ÑепликаÑией**, и немного â Ñ **пеÑезапÑÑками**, но об оÑÑалÑнÑÑ
по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð½Ñжно позабоÑиÑÑÑÑ:
+
+* **ÐезопаÑноÑÑÑ â HTTPS**
+* **ÐапÑÑк пÑи ÑÑаÑÑе**
+* ***ÐеÑезапÑÑки***
+* РепликаÑÐ¸Ñ (колиÑеÑÑво запÑÑеннÑÑ
пÑоÑеÑÑов)
+* **ÐамÑÑÑ**
+* **ÐÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком**
+
+## ÐонÑейнеÑÑ Ð¸ Docker { #containers-and-docker }
+
+Ð ÑледÑÑÑей главе о [FastAPI в конÑейнеÑаÑ
â Docker](docker.md){.internal-link target=_blank} Ñ Ð¾Ð±ÑÑÑÐ½Ñ ÑÑÑаÑегии, коÑоÑÑе можно иÑполÑзоваÑÑ Ð´Ð»Ñ ÑеÑÐµÐ½Ð¸Ñ Ð¾ÑÑалÑнÑÑ
**конÑепÑий деплоÑ**.
+
+Я покажÑ, как **ÑобÑаÑÑ Ñвой обÑаз Ñ Ð½ÑлÑ**, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑÑкаÑÑ Ð¾Ð´Ð¸Ð½ пÑоÑеÑÑ Uvicorn. ÐÑо пÑоÑÑой подÑ
од и, веÑоÑÑно, именно Ñо, ÑÑо вам нÑжно пÑи иÑполÑзовании ÑаÑпÑеделÑнной ÑиÑÑÐµÐ¼Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑами, Ñакой как **Kubernetes**.
+
+## РезÑме { #recap }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð½ÐµÑколÑко воÑкеÑ-пÑоÑеÑÑов Ñ Ð¾Ð¿Ñией командной ÑÑÑоки `--workers` в командаÑ
`fastapi` или `uvicorn`, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ **многоÑдеÑнÑе CPU**, запÑÑÐºÐ°Ñ **неÑколÑко пÑоÑеÑÑов паÑаллелÑно**.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑи инÑÑÑÑменÑÑ Ð¸ идеи, еÑли наÑÑÑаиваеÑе **ÑобÑÑвеннÑÑ ÑиÑÑÐµÐ¼Ñ Ð´ÐµÐ¿Ð»Ð¾Ñ** и ÑамоÑÑоÑÑелÑно закÑÑваеÑе оÑÑалÑнÑе конÑепÑии деплоÑ.
+
+ÐеÑейдиÑе к ÑледÑÑÑей главе, ÑÑÐ¾Ð±Ñ ÑзнаÑÑ Ð¾ **FastAPI** в конÑейнеÑаÑ
(напÑимеÑ, Docker и Kubernetes). ÐÑ ÑвидиÑе, ÑÑо ÑÑи инÑÑÑÑменÑÑ Ñоже пÑедлагаÑÑ Ð¿ÑоÑÑÑе ÑпоÑÐ¾Ð±Ñ ÑеÑиÑÑ Ð´ÑÑгие **конÑепÑии деплоÑ**. â¨
diff --git a/docs/ru/docs/how-to/conditional-openapi.md b/docs/ru/docs/how-to/conditional-openapi.md
new file mode 100644
index 000000000..dc987ae26
--- /dev/null
+++ b/docs/ru/docs/how-to/conditional-openapi.md
@@ -0,0 +1,56 @@
+# УÑловнÑй OpenAPI { #conditional-openapi }
+
+ÐÑи необÑ
одимоÑÑи Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð½Ð°ÑÑÑойки и пеÑеменнÑе окÑÑжениÑ, ÑÑÐ¾Ð±Ñ ÑÑловно наÑÑÑаиваÑÑ OpenAPI в завиÑимоÑÑи Ð¾Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¸ даже полноÑÑÑÑ ÐµÐ³Ð¾ оÑклÑÑаÑÑ.
+
+## РбезопаÑноÑÑи, API и докÑменÑаÑии { #about-security-apis-and-docs }
+
+СкÑÑÑие полÑзоваÑелÑÑкиÑ
инÑеÑÑейÑов докÑменÑаÑии в пÑодакÑн *не должно* бÑÑÑ ÑпоÑобом заÑиÑÑ Ð²Ð°Ñего API.
+
+ÐÑо не добавлÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной безопаÑноÑÑи ваÑÐµÐ¼Ñ API, *опеÑаÑии пÑÑи* (обÑабоÑÑики пÑÑи) вÑÑ Ñавно бÑдÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ Ñвоим пÑÑÑм.
+
+ÐÑли в ваÑем коде еÑÑÑ ÑÑзвимоÑÑÑ, она вÑÑ Ñавно оÑÑанеÑÑÑ.
+
+СокÑÑÑие докÑменÑаÑии лиÑÑ ÑÑложнÑÐµÑ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ Ñого, как взаимодейÑÑвоваÑÑ Ñ Ð²Ð°Ñим API, и Ð¼Ð¾Ð¶ÐµÑ ÑÑложниÑÑ ÐµÐ³Ð¾ оÑÐ»Ð°Ð´ÐºÑ Ð² пÑодакÑн. ÐÑо можно ÑÑиÑаÑÑ Ð¿ÑоÑÑо ÑазновидноÑÑÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи ÑеÑез ÑокÑÑÑие.
+
+ÐÑли Ð²Ñ Ñ
оÑиÑе обезопаÑиÑÑ Ñвой API, еÑÑÑ Ð½ÐµÑколÑко более ÑÑÑекÑивнÑÑ
веÑей, коÑоÑÑе можно ÑделаÑÑ, напÑимеÑ:
+
+* УбедиÑеÑÑ, ÑÑо Ñ Ð²Ð°Ñ ÑÑÑко опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Pydantic-модели Ð´Ð»Ñ Ñел запÑоÑов и оÑвеÑов.
+* ÐаÑÑÑойÑе необÑ
одимÑе ÑазÑеÑÐµÐ½Ð¸Ñ Ð¸ Ñоли Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑей.
+* Ðикогда не Ñ
ÑаниÑе паÑоли в оÑкÑÑÑом виде, ÑолÑко Ñ
ÑÑи паÑолей.
+* РеализÑйÑе и иÑполÑзÑйÑе извеÑÑнÑе кÑипÑогÑаÑиÑеÑкие инÑÑÑÑменÑÑ, напÑÐ¸Ð¼ÐµÑ pwdlib и JWT-ÑокенÑ, и Ñ.д.
+* ÐобавÑÑе более Ñонкое ÑпÑавление доÑÑÑпом Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ OAuth2 scopes (облаÑÑей) Ñам, где ÑÑо необÑ
одимо.
+* ...и Ñ.п.
+
+Тем не менее, Ñ Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ ÑпеÑиÑиÑнÑй ÑлÑÑай иÑполÑзованиÑ, когда дейÑÑвиÑелÑно нÑжно оÑклÑÑиÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
окÑÑжений (напÑимеÑ, в пÑодакÑн) или в завиÑимоÑÑи Ð¾Ñ Ð½Ð°ÑÑÑоек из пеÑеменнÑÑ
окÑÑжениÑ.
+
+## УÑловнÑй OpenAPI из наÑÑÑоек и пеÑеменнÑÑ
окÑÑÐ¶ÐµÐ½Ð¸Ñ { #conditional-openapi-from-settings-and-env-vars }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе легко иÑполÑзоваÑÑ Ñе же наÑÑÑойки Pydantic, ÑÑÐ¾Ð±Ñ Ð½Ð°ÑÑÑоиÑÑ ÑгенеÑиÑованнÑй OpenAPI и инÑеÑÑейÑÑ Ð´Ð¾ÐºÑменÑаÑии.
+
+ÐапÑимеÑ:
+
+{* ../../docs_src/conditional_openapi/tutorial001.py hl[6,11] *}
+
+ÐдеÑÑ Ð¼Ñ Ð¾Ð±ÑÑвлÑем наÑÑÑÐ¾Ð¹ÐºÑ `openapi_url` Ñ Ñем же знаÑением по ÑмолÑÐ°Ð½Ð¸Ñ â `"/openapi.json"`.
+
+ÐаÑем иÑполÑзÑем ÐµÑ Ð¿Ñи Ñоздании пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI.
+
+Ðалее Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑклÑÑиÑÑ OpenAPI (вклÑÑÐ°Ñ Ð¸Ð½ÑеÑÑейÑÑ Ð´Ð¾ÐºÑменÑаÑии), ÑÑÑановив пеÑеменнÑÑ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ `OPENAPI_URL` в пÑÑÑÑÑ ÑÑÑокÑ, напÑимеÑ:
+
+
+
+```console
+$ OPENAPI_URL= uvicorn main:app
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+ÐоÑле ÑÑого, еÑли пеÑейÑи по адÑеÑам `/openapi.json`, `/docs` или `/redoc`, Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе оÑÐ¸Ð±ÐºÑ `404 Not Found`, напÑимеÑ:
+
+```JSON
+{
+ "detail": "Not Found"
+}
+```
diff --git a/docs/ru/docs/how-to/configure-swagger-ui.md b/docs/ru/docs/how-to/configure-swagger-ui.md
new file mode 100644
index 000000000..4793cc9db
--- /dev/null
+++ b/docs/ru/docs/how-to/configure-swagger-ui.md
@@ -0,0 +1,70 @@
+# ÐаÑÑÑойка Swagger UI { #configure-swagger-ui }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе наÑÑÑоиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе паÑамеÑÑÑ Swagger UI.
+
+ЧÑÐ¾Ð±Ñ Ð½Ð°ÑÑÑоиÑÑ Ð¸Ñ
, пеÑедайÑе аÑгÑÐ¼ÐµÐ½Ñ `swagger_ui_parameters` пÑи Ñоздании обÑекÑа пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `FastAPI()` или в ÑÑнкÑÐ¸Ñ `get_swagger_ui_html()`.
+
+`swagger_ui_parameters` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑловаÑÑ Ñ Ð½Ð°ÑÑÑойками, коÑоÑÑе пеÑедаÑÑÑÑ Ð² Swagger UI напÑÑмÑÑ.
+
+FastAPI пÑеобÑазÑÐµÑ ÑÑи наÑÑÑойки в **JSON**, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ бÑли ÑовмеÑÑÐ¸Ð¼Ñ Ñ JavaScript, поÑколÑÐºÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑÑо ÑÑебÑеÑÑÑ Swagger UI.
+
+## ÐÑклÑÑиÑÑ Ð¿Ð¾Ð´ÑвеÑÐºÑ ÑинÑакÑиÑа { #disable-syntax-highlighting }
+
+ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑклÑÑиÑÑ Ð¿Ð¾Ð´ÑвеÑÐºÑ ÑинÑакÑиÑа в Swagger UI.
+
+Ðез Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÑоек подÑвеÑка ÑинÑакÑиÑа вклÑÑена по ÑмолÑаниÑ:
+
+
+
+Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑклÑÑиÑÑ ÐµÑ, ÑÑÑановив `syntaxHighlight` в `False`:
+
+{* ../../docs_src/configure_swagger_ui/tutorial001.py hl[3] *}
+
+â¦Ð¸ поÑле ÑÑого Swagger UI болÑÑе не бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ Ð¿Ð¾Ð´ÑвеÑÐºÑ ÑинÑакÑиÑа:
+
+
+
+## ÐзмениÑÑ ÑÐµÐ¼Ñ { #change-the-theme }
+
+ÐналогиÑно Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ ÑÐµÐ¼Ñ Ð¿Ð¾Ð´ÑвеÑки ÑинÑакÑиÑа Ñ ÐºÐ»ÑÑом "syntaxHighlight.theme" (обÑаÑиÑе внимание, ÑÑо поÑеÑедине ÑÑÐ¾Ð¸Ñ ÑоÑка):
+
+{* ../../docs_src/configure_swagger_ui/tutorial002.py hl[3] *}
+
+ÐÑа наÑÑÑойка Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ ÑвеÑовÑÑ ÑÐµÐ¼Ñ Ð¿Ð¾Ð´ÑвеÑки ÑинÑакÑиÑа:
+
+
+
+## ÐзмениÑÑ Ð¿Ð°ÑамеÑÑÑ Swagger UI по ÑмолÑÐ°Ð½Ð¸Ñ { #change-default-swagger-ui-parameters }
+
+FastAPI вклÑÑÐ°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе паÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии по ÑмолÑаниÑ, подÑ
одÑÑие Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва ÑлÑÑаев.
+
+ÐÑо вклÑÑÐ°ÐµÑ ÑледÑÑÑие наÑÑÑойки по ÑмолÑаниÑ:
+
+{* ../../fastapi/openapi/docs.py ln[8:23] hl[17:23] *}
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеопÑеделиÑÑ Ð»ÑбÑÑ Ð¸Ð· ниÑ
, Ñказав дÑÑгое знаÑение в аÑгÑменÑе `swagger_ui_parameters`.
+
+ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¾ÑклÑÑиÑÑ `deepLinking`, можно пеÑедаÑÑ Ñакие наÑÑÑойки в `swagger_ui_parameters`:
+
+{* ../../docs_src/configure_swagger_ui/tutorial003.py hl[3] *}
+
+## ÐÑÑгие паÑамеÑÑÑ Swagger UI { #other-swagger-ui-parameters }
+
+ЧÑÐ¾Ð±Ñ ÑвидеÑÑ Ð²Ñе оÑÑалÑнÑе возможнÑе наÑÑÑойки, пÑоÑиÑайÑе оÑиÑиалÑнÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð¿Ð¾ паÑамеÑÑам Swagger UI.
+
+## ÐаÑÑÑойки ÑолÑко Ð´Ð»Ñ JavaScript { #javascript-only-settings }
+
+Swagger UI Ñакже допÑÑÐºÐ°ÐµÑ Ð´ÑÑгие наÑÑÑойки, коÑоÑÑе ÑвлÑÑÑÑÑ **ÑиÑÑо JavaScript-обÑекÑами** (напÑимеÑ, JavaScript-ÑÑнкÑиÑми).
+
+FastAPI Ñакже вклÑÑÐ°ÐµÑ ÑледÑÑÑие наÑÑÑойки `presets` (ÑолÑко Ð´Ð»Ñ JavaScript):
+
+```JavaScript
+presets: [
+ SwaggerUIBundle.presets.apis,
+ SwaggerUIBundle.SwaggerUIStandalonePreset
+]
+```
+
+ÐÑо обÑекÑÑ **JavaScript**, а не ÑÑÑоки, поÑÑÐ¾Ð¼Ñ Ð½Ð°Ð¿ÑÑмÑÑ Ð¿ÐµÑедаÑÑ Ð¸Ñ
из Python-кода нелÑзÑ.
+
+ÐÑли вам нÑÐ¶Ð½Ñ Ñакие наÑÑÑойки ÑолÑко Ð´Ð»Ñ JavaScript, иÑполÑзÑйÑе один из меÑодов вÑÑе. ÐеÑеопÑеделиÑе *опеÑаÑÐ¸Ñ Ð¿ÑÑи* Swagger UI и вÑÑÑнÑÑ Ð½Ð°Ð¿Ð¸ÑиÑе лÑбой необÑ
одимÑй JavaScript.
diff --git a/docs/ru/docs/how-to/custom-docs-ui-assets.md b/docs/ru/docs/how-to/custom-docs-ui-assets.md
new file mode 100644
index 000000000..c07a9695b
--- /dev/null
+++ b/docs/ru/docs/how-to/custom-docs-ui-assets.md
@@ -0,0 +1,185 @@
+# Свои ÑÑаÑиÑеÑкие ÑеÑÑÑÑÑ UI докÑменÑаÑии (ÑамоÑÑоÑÑелÑнÑй Ñ
оÑÑинг) { #custom-docs-ui-static-assets-self-hosting }
+
+ÐокÑменÑаÑÐ¸Ñ API иÑполÑзÑÐµÑ **Swagger UI** и **ReDoc**, и Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из ниÑ
нÑÐ¶Ð½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÐ°Ð¹Ð»Ñ JavaScript и CSS.
+
+Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑи ÑÐ°Ð¹Ð»Ñ Ð¾ÑдаÑÑÑÑ Ñ CDN.
+
+Ðо ÑÑо можно наÑÑÑоиÑÑ: Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑй CDN или оÑдаваÑÑ ÑÐ°Ð¹Ð»Ñ ÑамоÑÑоÑÑелÑно.
+
+## ÐолÑзоваÑелÑÑкий CDN Ð´Ð»Ñ JavaScript и CSS { #custom-cdn-for-javascript-and-css }
+
+ÐопÑÑÑим, Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð´ÑÑгой CDN, напÑÐ¸Ð¼ÐµÑ `https://unpkg.com/`.
+
+ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, еÑли, напÑимеÑ, Ð²Ñ Ð¶Ð¸Ð²ÑÑе в ÑÑÑане, где некоÑоÑÑе URL огÑаниÑенÑ.
+
+### ÐÑклÑÑиÑÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ { #disable-the-automatic-docs }
+
+ÐеÑвÑй Ñаг â оÑклÑÑиÑÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑиÑ, Ñак как по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð° иÑполÑзÑÐµÑ ÑÑандаÑÑнÑй CDN.
+
+ЧÑÐ¾Ð±Ñ Ð¾ÑклÑÑиÑÑ ÐµÑ, ÑÑÑановиÑе иÑ
URL в знаÑение `None` пÑи Ñоздании ваÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `FastAPI`:
+
+{* ../../docs_src/custom_docs_ui/tutorial001.py hl[8] *}
+
+### ÐодклÑÑиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ { #include-the-custom-docs }
+
+ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ *опеÑаÑии пÑÑи* Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкой докÑменÑаÑии.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеиÑполÑзоваÑÑ Ð²Ð½ÑÑÑенние ÑÑнкÑии FastAPI Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ HTML-ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð¾ÐºÑменÑаÑии и пеÑедаÑÑ Ð¸Ð¼ необÑ
одимÑе аÑгÑменÑÑ:
+
+* `openapi_url`: URL, по коÑоÑÐ¾Ð¼Ñ HTML-ÑÑÑаниÑа докÑменÑаÑии ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI Ð´Ð»Ñ Ð²Ð°Ñего API. ÐдеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð°ÑÑибÑÑ `app.openapi_url`.
+* `title`: заголовок ваÑего API.
+* `oauth2_redirect_url`: здеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ `app.swagger_ui_oauth2_redirect_url`, ÑÑÐ¾Ð±Ñ Ð¾ÑÑавиÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ.
+* `swagger_js_url`: URL, по коÑоÑÐ¾Ð¼Ñ HTML Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑаÑии Swagger UI ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ñайл **JavaScript**. ÐÑо URL ваÑего полÑзоваÑелÑÑкого CDN.
+* `swagger_css_url`: URL, по коÑоÑÐ¾Ð¼Ñ HTML Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑаÑии Swagger UI ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ñайл **CSS**. ÐÑо URL ваÑего полÑзоваÑелÑÑкого CDN.
+
+ÐналогиÑно и Ð´Ð»Ñ ReDoc...
+
+{* ../../docs_src/custom_docs_ui/tutorial001.py hl[2:6,11:19,22:24,27:33] *}
+
+/// tip | СовеÑ
+
+*ÐпеÑаÑÐ¸Ñ Ð¿ÑÑи* Ð´Ð»Ñ `swagger_ui_redirect` â ÑÑо вÑпомогаÑелÑнÑй ÑÐ½Ð´Ð¿Ð¾Ð¸Ð½Ñ Ð½Ð° ÑлÑÑай, когда Ð²Ñ Ð¸ÑполÑзÑеÑе OAuth2.
+
+ÐÑли Ð²Ñ Ð¸Ð½ÑегÑиÑÑеÑе Ñвой API Ñ Ð¿ÑовайдеÑом OAuth2, Ð²Ñ ÑможеÑе аÑÑенÑиÑиÑиÑоваÑÑÑÑ Ð¸ веÑнÑÑÑÑÑ Ðº докÑменÑаÑии API Ñ Ð¿Ð¾Ð»ÑÑеннÑми ÑÑÑÑнÑми даннÑми, а заÑем взаимодейÑÑвоваÑÑ Ñ Ð½Ð¸Ð¼, иÑполÑзÑÑ ÑеалÑнÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ OAuth2.
+
+Swagger UI ÑÐ´ÐµÐ»Ð°ÐµÑ ÑÑо за Ð²Ð°Ñ Â«Ð·Ð° кÑлиÑами», но Ð´Ð»Ñ ÑÑого ÐµÐ¼Ñ Ð½Ñжен ÑÑÐ¾Ñ Ð²ÑпомогаÑелÑнÑй «redirect» ÑндпоинÑ.
+
+///
+
+### СоздайÑе *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ { #create-a-path-operation-to-test-it }
+
+ЧÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо вÑÑ ÑабоÑаеÑ, ÑоздайÑе *опеÑаÑÐ¸Ñ Ð¿ÑÑи*:
+
+{* ../../docs_src/custom_docs_ui/tutorial001.py hl[36:38] *}
+
+### ТеÑÑиÑование { #test-it }
+
+ТепеÑÑ Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾ÑкÑÑÑÑ ÑÐ²Ð¾Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð¿Ð¾ адÑеÑÑ http://127.0.0.1:8000/docs и пеÑезагÑÑзиÑÑ ÑÑÑаниÑÑ â «аÑÑеÑÑ» (ÑÑаÑиÑеÑкие ÑайлÑ) бÑдÑÑ Ð·Ð°Ð³ÑÑжаÑÑÑÑ Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ CDN.
+
+## СамоÑÑоÑÑелÑнÑй Ñ
оÑÑинг JavaScript и CSS Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑаÑии { #self-hosting-javascript-and-css-for-docs }
+
+СамоÑÑоÑÑелÑнÑй Ñ
оÑÑинг JavaScript и CSS Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½, еÑли, напÑимеÑ, вам нÑжно, ÑÑÐ¾Ð±Ñ Ð¿Ñиложение пÑодолжало ÑабоÑаÑÑ Ð² оÑлайне, без доÑÑÑпа к оÑкÑÑÑÐ¾Ð¼Ñ ÐнÑеÑнеÑÑ, или в локалÑной ÑеÑи.
+
+ÐдеÑÑ Ð²Ñ ÑвидиÑе, как оÑдаваÑÑ ÑÑи ÑÐ°Ð¹Ð»Ñ ÑамоÑÑоÑÑелÑно, в Ñом же пÑиложении FastAPI, и наÑÑÑоиÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð½Ð° иÑ
иÑполÑзование.
+
+### СÑÑÑкÑÑÑа Ñайлов пÑоекÑа { #project-file-structure }
+
+ÐопÑÑÑим, ÑÑÑÑкÑÑÑа Ñайлов ваÑего пÑоекÑа вÑглÑÐ´Ð¸Ñ Ñак:
+
+```
+.
+âââ app
+â âââ __init__.py
+â âââ main.py
+```
+
+ТепеÑÑ ÑоздайÑе диÑекÑоÑÐ¸Ñ Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑÑиÑ
ÑÑаÑиÑеÑкиÑ
Ñайлов.
+
+ÐÐ¾Ð²Ð°Ñ ÑÑÑÑкÑÑÑа Ñайлов Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
+
+```
+.
+âââ app
+â  âââ __init__.py
+â  âââ main.py
+âââ static/
+```
+
+### СкаÑайÑе ÑÐ°Ð¹Ð»Ñ { #download-the-files }
+
+СкаÑайÑе ÑÑаÑиÑеÑкие ÑайлÑ, необÑ
одимÑе Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑаÑии, и помеÑÑиÑе иÑ
в диÑекÑоÑÐ¸Ñ `static/`.
+
+СкоÑее вÑего, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе кликнÑÑÑ Ð¿Ñавой кнопкой на каждой ÑÑÑлке и вÑбÑаÑÑ ÑÑо-Ñо вÑоде «СоÑ
ÑаниÑÑ ÑÑÑÐ»ÐºÑ ÐºÐ°Ðº...».
+
+**Swagger UI** иÑполÑзÑÐµÑ ÑайлÑ:
+
+* `swagger-ui-bundle.js`
+* `swagger-ui.css`
+
+Ð **ReDoc** иÑполÑзÑÐµÑ Ñайл:
+
+* `redoc.standalone.js`
+
+ÐоÑле ÑÑого ÑÑÑÑкÑÑÑа Ñайлов Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
+
+```
+.
+âââ app
+â  âââ __init__.py
+â  âââ main.py
+âââ static
+ âââ redoc.standalone.js
+ âââ swagger-ui-bundle.js
+ âââ swagger-ui.css
+```
+
+### ÐÑедоÑÑавÑÑе доÑÑÑп к ÑÑаÑиÑеÑким Ñайлам { #serve-the-static-files }
+
+* ÐмпоÑÑиÑÑйÑе `StaticFiles`.
+* СмонÑиÑÑйÑе ÑкземплÑÑ `StaticFiles()` в опÑеделÑннÑй пÑÑÑ.
+
+{* ../../docs_src/custom_docs_ui/tutorial002.py hl[7,11] *}
+
+### ÐÑоÑеÑÑиÑÑйÑе ÑÑаÑиÑеÑкие ÑÐ°Ð¹Ð»Ñ { #test-the-static-files }
+
+ÐапÑÑÑиÑе ÑÐ²Ð¾Ñ Ð¿Ñиложение и оÑкÑойÑе http://127.0.0.1:8000/static/redoc.standalone.js.
+
+ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвидеÑÑ Ð¾ÑÐµÐ½Ñ Ð´Ð»Ð¸Ð½Ð½Ñй JavaScript-Ñайл Ð´Ð»Ñ **ReDoc**.
+
+Ðн Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑинаÑÑÑÑ Ð¿ÑимеÑно Ñак:
+
+```JavaScript
+/*! For license information please see redoc.standalone.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):
+...
+```
+
+ÐÑо подÑвеÑждаеÑ, ÑÑо ваÑе пÑиложение ÑÐ¼ÐµÐµÑ Ð¾ÑдаваÑÑ ÑÑаÑиÑеÑкие ÑÐ°Ð¹Ð»Ñ Ð¸ ÑÑо Ð²Ñ Ð¿Ð¾Ð¼ÐµÑÑили ÑÐ°Ð¹Ð»Ñ Ð´Ð¾ÐºÑменÑаÑии в нÑжное меÑÑо.
+
+ТепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ наÑÑÑоиÑÑ Ð¿Ñиложение Ñак, ÑÑÐ¾Ð±Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð¸ÑполÑзовала ÑÑи ÑÑаÑиÑеÑкие ÑайлÑ.
+
+### ÐÑклÑÑиÑÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð´Ð»Ñ ÑÑаÑиÑеÑкиÑ
Ñайлов { #disable-the-automatic-docs-for-static-files }
+
+Так же, как и пÑи иÑполÑзовании полÑзоваÑелÑÑкого CDN, пеÑвÑм Ñагом бÑÐ´ÐµÑ Ð¾ÑклÑÑение авÑомаÑиÑеÑкой докÑменÑаÑии, Ñак как по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð° иÑполÑзÑÐµÑ CDN.
+
+ЧÑÐ¾Ð±Ñ Ð¾ÑклÑÑиÑÑ ÐµÑ, ÑÑÑановиÑе иÑ
URL в знаÑение `None` пÑи Ñоздании ваÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `FastAPI`:
+
+{* ../../docs_src/custom_docs_ui/tutorial002.py hl[9] *}
+
+### ÐодклÑÑиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ñо ÑÑаÑиÑеÑкими Ñайлами { #include-the-custom-docs-for-static-files }
+
+ÐналогиÑно полÑзоваÑелÑÑÐºÐ¾Ð¼Ñ CDN, ÑепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ *опеÑаÑии пÑÑи* Ð´Ð»Ñ ÑобÑÑвенной докÑменÑаÑии.
+
+Снова можно пеÑеиÑполÑзоваÑÑ Ð²Ð½ÑÑÑенние ÑÑнкÑии FastAPI Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ HTML-ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð¾ÐºÑменÑаÑии и пеÑедаÑÑ Ð¸Ð¼ необÑ
одимÑе аÑгÑменÑÑ:
+
+* `openapi_url`: URL, по коÑоÑÐ¾Ð¼Ñ HTML-ÑÑÑаниÑа докÑменÑаÑии ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI Ð´Ð»Ñ Ð²Ð°Ñего API. ÐдеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð°ÑÑибÑÑ `app.openapi_url`.
+* `title`: заголовок ваÑего API.
+* `oauth2_redirect_url`: здеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ `app.swagger_ui_oauth2_redirect_url`, ÑÑÐ¾Ð±Ñ Ð¾ÑÑавиÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ.
+* `swagger_js_url`: URL, по коÑоÑÐ¾Ð¼Ñ HTML Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑаÑии Swagger UI ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ñайл **JavaScript**. **ÐÑо ÑÐ¾Ñ Ñайл, коÑоÑÑй ÑепеÑÑ Ð¾ÑдаÑÑ Ð²Ð°Ñе ÑобÑÑвенное пÑиложение**.
+* `swagger_css_url`: URL, по коÑоÑÐ¾Ð¼Ñ HTML Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑаÑии Swagger UI ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ñайл **CSS**. **ÐÑо ÑÐ¾Ñ Ñайл, коÑоÑÑй ÑепеÑÑ Ð¾ÑдаÑÑ Ð²Ð°Ñе ÑобÑÑвенное пÑиложение**.
+
+ÐналогиÑно и Ð´Ð»Ñ ReDoc...
+
+{* ../../docs_src/custom_docs_ui/tutorial002.py hl[2:6,14:22,25:27,30:36] *}
+
+/// tip | СовеÑ
+
+*ÐпеÑаÑÐ¸Ñ Ð¿ÑÑи* Ð´Ð»Ñ `swagger_ui_redirect` â ÑÑо вÑпомогаÑелÑнÑй ÑÐ½Ð´Ð¿Ð¾Ð¸Ð½Ñ Ð½Ð° ÑлÑÑай, когда Ð²Ñ Ð¸ÑполÑзÑеÑе OAuth2.
+
+ÐÑли Ð²Ñ Ð¸Ð½ÑегÑиÑÑеÑе Ñвой API Ñ Ð¿ÑовайдеÑом OAuth2, Ð²Ñ ÑможеÑе аÑÑенÑиÑиÑиÑоваÑÑÑÑ Ð¸ веÑнÑÑÑÑÑ Ðº докÑменÑаÑии API Ñ Ð¿Ð¾Ð»ÑÑеннÑми ÑÑÑÑнÑми даннÑми, а заÑем взаимодейÑÑвоваÑÑ Ñ Ð½Ð¸Ð¼, иÑполÑзÑÑ ÑеалÑнÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ OAuth2.
+
+Swagger UI ÑÐ´ÐµÐ»Ð°ÐµÑ ÑÑо за Ð²Ð°Ñ Â«Ð·Ð° кÑлиÑами», но Ð´Ð»Ñ ÑÑого ÐµÐ¼Ñ Ð½Ñжен ÑÑÐ¾Ñ Ð²ÑпомогаÑелÑнÑй «redirect» ÑндпоинÑ.
+
+///
+
+### СоздайÑе *опеÑаÑÐ¸Ñ Ð¿ÑÑи* Ð´Ð»Ñ ÑеÑÑа ÑÑаÑиÑеÑкиÑ
Ñайлов { #create-a-path-operation-to-test-static-files }
+
+ЧÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо вÑÑ ÑабоÑаеÑ, ÑоздайÑе *опеÑаÑÐ¸Ñ Ð¿ÑÑи*:
+
+{* ../../docs_src/custom_docs_ui/tutorial002.py hl[39:41] *}
+
+### ТеÑÑиÑование UI Ñо ÑÑаÑиÑеÑкими Ñайлами { #test-static-files-ui }
+
+ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑклÑÑиÑÑ WiâFi, оÑкÑÑÑÑ ÑÐ²Ð¾Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð¿Ð¾ адÑеÑÑ http://127.0.0.1:8000/docs и пеÑезагÑÑзиÑÑ ÑÑÑаниÑÑ.
+
+Ðаже без ÐнÑеÑнеÑа Ð²Ñ ÑможеÑе видеÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ðº ÑÐ²Ð¾ÐµÐ¼Ñ API и взаимодейÑÑвоваÑÑ Ñ Ð½Ð¸Ð¼.
diff --git a/docs/ru/docs/how-to/custom-request-and-route.md b/docs/ru/docs/how-to/custom-request-and-route.md
new file mode 100644
index 000000000..df8a5ee3c
--- /dev/null
+++ b/docs/ru/docs/how-to/custom-request-and-route.md
@@ -0,0 +1,109 @@
+# ÐолÑзоваÑелÑÑкие клаÑÑÑ Request и APIRoute { #custom-request-and-apiroute-class }
+
+РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¿ÐµÑеопÑеделиÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ, иÑполÑзÑемÑÑ ÐºÐ»Ð°ÑÑами `Request` и `APIRoute`.
+
+Ð ÑаÑÑноÑÑи, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñ
оÑоÑей алÑÑеÑнаÑивой логике в middleware.
+
+ÐапÑимеÑ, еÑли Ð²Ñ Ñ
оÑиÑе пÑоÑиÑаÑÑ Ð¸Ð»Ð¸ измениÑÑ Ñело запÑоÑа до Ñого, как оно бÑÐ´ÐµÑ Ð¾Ð±ÑабоÑано ваÑим пÑиложением.
+
+/// danger | ÐпаÑноÑÑÑ
+
+ÐÑо «пÑодвинÑÑаÑ» возможноÑÑÑ.
+
+ÐÑли Ð²Ñ ÑолÑко наÑинаеÑе ÑабоÑаÑÑ Ñ **FastAPI**, возможно, ÑÑÐ¾Ð¸Ñ Ð¿ÑопÑÑÑиÑÑ ÑÑÐ¾Ñ Ñаздел.
+
+///
+
+## СÑенаÑии иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ { #use-cases }
+
+ÐекоÑоÑÑе ÑÑенаÑии:
+
+* ÐÑеобÑазование Ñел запÑоÑов, не в ÑоÑмаÑе JSON, в JSON (напÑимеÑ, `msgpack`).
+* РаÑпаковка Ñел запÑоÑов, ÑжаÑÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ gzip.
+* ÐвÑомаÑиÑеÑкое логиÑование вÑеÑ
Ñел запÑоÑов.
+
+## ÐбÑабоÑка полÑзоваÑелÑÑкого кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñела запÑоÑа { #handling-custom-request-body-encodings }
+
+ÐоÑмоÑÑим как иÑполÑзоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий подклаÑÑ `Request` Ð´Ð»Ñ ÑаÑпаковки gzip-запÑоÑов.
+
+РподклаÑÑ `APIRoute`, ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий клаÑÑ Ð·Ð°Ð¿ÑоÑа.
+
+### СоздаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий клаÑÑ `GzipRequest` { #create-a-custom-gziprequest-class }
+
+/// tip | СовеÑ
+
+ÐÑо ÑÑебнÑй пÑимеÑ, демонÑÑÑиÑÑÑÑий пÑинÑип ÑабоÑÑ. ÐÑли вам нÑжна поддеÑжка Gzip, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð³Ð¾ÑовÑй [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank}.
+
+///
+
+СнаÑала Ñоздадим клаÑÑ `GzipRequest`, коÑоÑÑй пеÑеопÑÐµÐ´ÐµÐ»Ð¸Ñ Ð¼ÐµÑод `Request.body()` и ÑаÑпакÑÐµÑ Ñело запÑоÑа пÑи налиÑии ÑооÑвеÑÑÑвÑÑÑего HTTP-заголовка.
+
+ÐÑли в заголовке Ð½ÐµÑ `gzip`, он не бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ ÑаÑпаковÑваÑÑ Ñело.
+
+Таким обÑазом, один и ÑÐ¾Ñ Ð¶Ðµ клаÑÑ Ð¼Ð°ÑÑÑÑÑа ÑÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ ÐºÐ°Ðº gzip-ÑжаÑÑе, Ñак и неÑжаÑÑе запÑоÑÑ.
+
+{* ../../docs_src/custom_request_and_route/tutorial001.py hl[8:15] *}
+
+### СоздаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий клаÑÑ `GzipRoute` { #create-a-custom-gziproute-class }
+
+Ðалее Ñоздадим полÑзоваÑелÑÑкий подклаÑÑ `fastapi.routing.APIRoute`, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ `GzipRequest`.
+
+Ðа ÑÑÐ¾Ñ Ñаз он пеÑеопÑÐµÐ´ÐµÐ»Ð¸Ñ Ð¼ÐµÑод `APIRoute.get_route_handler()`.
+
+ÐÑÐ¾Ñ Ð¼ÐµÑод возвÑаÑÐ°ÐµÑ ÑÑнкÑиÑ. Ðменно ÑÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ HTTP-запÑÐ¾Ñ Ð¸ возвÑаÑÐ°ÐµÑ HTTP-оÑвеÑ.
+
+ÐдеÑÑ Ð¼Ñ Ð¸ÑполÑзÑем еÑ, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ `GzipRequest` из иÑÑ
одного HTTP-запÑоÑа.
+
+{* ../../docs_src/custom_request_and_route/tutorial001.py hl[18:26] *}
+
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+У `Request` еÑÑÑ Ð°ÑÑибÑÑ `request.scope` â ÑÑо пÑоÑÑо Python-`dict`, ÑодеÑжаÑий меÑаданнÑе, ÑвÑзаннÑе Ñ HTTP-запÑоÑом.
+
+У `Request` Ñакже еÑÑÑ `request.receive` â ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Â«Ð¿Ð¾Ð»ÑÑениÑ» Ñела запÑоÑа.
+
+Ð `dict` `scope`, и ÑÑнкÑÐ¸Ñ `receive` ÑвлÑÑÑÑÑ ÑаÑÑÑÑ ÑпеÑиÑикаÑии ASGI.
+
+Ðменно ÑÑиÑ
двÑÑ
компоненÑов â `scope` и `receive` â доÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ Ð½Ð¾Ð²Ñй ÑкземплÑÑ `Request`.
+
+ЧÑÐ¾Ð±Ñ ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе о `Request`, Ñм. докÑменÑаÑÐ¸Ñ Starlette о запÑоÑаÑ
.
+
+///
+
+ÐдинÑÑвенное, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¿Ð¾-дÑÑÐ³Ð¾Ð¼Ñ ÑÑнкÑиÑ, возвÑаÑÑÐ½Ð½Ð°Ñ `GzipRequest.get_route_handler`, â пÑеобÑазÑÐµÑ `Request` в `GzipRequest`.
+
+ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ Ð½Ð°Ñ `GzipRequest` позабоÑиÑÑÑ Ð¾ ÑаÑпаковке даннÑÑ
(пÑи необÑ
одимоÑÑи) до пеÑедаÑи иÑ
в наÑи *опеÑаÑии пÑÑи*.
+
+ÐалÑÑе вÑÑ Ð»Ð¾Ð³Ð¸ÐºÐ° обÑабоÑки оÑÑаÑÑÑÑ Ð¿Ñежней.
+
+Ðо благодаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñм в `GzipRequest.body` Ñело запÑоÑа бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки ÑаÑпаковано пÑи необÑ
одимоÑÑи, когда оно бÑÐ´ÐµÑ Ð·Ð°Ð³ÑÑжено **FastAPI**.
+
+## ÐоÑÑÑп к ÑÐµÐ»Ñ Ð·Ð°Ð¿ÑоÑа в обÑабоÑÑике иÑклÑÑений { #accessing-the-request-body-in-an-exception-handler }
+
+/// tip | СовеÑ
+
+ÐÐ»Ñ ÑеÑÐµÐ½Ð¸Ñ ÑÑой задаÑи, веÑоÑÑно, намного пÑоÑе иÑполÑзоваÑÑ `body` в полÑзоваÑелÑÑком обÑабоÑÑике `RequestValidationError` ([ÐбÑабоÑка оÑибок](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}).
+
+Ðо ÑÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð²ÑÑ Ñавно акÑÑален и показÑваеÑ, как взаимодейÑÑвоваÑÑ Ñ Ð²Ð½ÑÑÑенними компоненÑами.
+
+///
+
+Тем же подÑ
одом можно воÑполÑзоваÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑÐµÐ»Ñ Ð·Ð°Ð¿ÑоÑа в обÑабоÑÑике иÑклÑÑений.
+
+ÐÑжно лиÑÑ Ð¾Ð±ÑабоÑаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²Ð½ÑÑÑи блока `try`/`except`:
+
+{* ../../docs_src/custom_request_and_route/tutorial002.py hl[13,15] *}
+
+ÐÑли пÑоизойдÑÑ Ð¸ÑклÑÑение, ÑкземплÑÑ `Request` вÑÑ ÐµÑÑ Ð±ÑÐ´ÐµÑ Ð² облаÑÑи видимоÑÑи, поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ñможем пÑоÑиÑаÑÑ Ñело запÑоÑа и иÑполÑзоваÑÑ ÐµÐ³Ð¾ пÑи обÑабоÑке оÑибки:
+
+{* ../../docs_src/custom_request_and_route/tutorial002.py hl[16:18] *}
+
+## ÐолÑзоваÑелÑÑкий клаÑÑ `APIRoute` в ÑоÑÑеÑе { #custom-apiroute-class-in-a-router }
+
+ÐÑ Ñакже можеÑе задаÑÑ Ð¿Ð°ÑамеÑÑ `route_class` Ñ `APIRouter`:
+
+{* ../../docs_src/custom_request_and_route/tutorial003.py hl[26] *}
+
+Ð ÑÑом пÑимеÑе *опеÑаÑии пÑÑи*, обÑÑвленнÑе в `router`, бÑдÑÑ Ð¸ÑполÑзоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий клаÑÑ `TimedRoute` и полÑÑÐ°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй HTTP-заголовок `X-Response-Time` в оÑвеÑе Ñ Ð²Ñеменем, заÑÑаÑеннÑм на ÑоÑмиÑование оÑвеÑа:
+
+{* ../../docs_src/custom_request_and_route/tutorial003.py hl[13:20] *}
diff --git a/docs/ru/docs/how-to/extending-openapi.md b/docs/ru/docs/how-to/extending-openapi.md
new file mode 100644
index 000000000..2897fb89b
--- /dev/null
+++ b/docs/ru/docs/how-to/extending-openapi.md
@@ -0,0 +1,80 @@
+# РаÑÑиÑение OpenAPI { #extending-openapi }
+
+Ðногда Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑгенеÑиÑованнÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI.
+
+Ð ÑÑом Ñазделе показано, как ÑÑо ÑделаÑÑ.
+
+## ÐбÑÑнÑй пÑоÑеÑÑ { #the-normal-process }
+
+ÐбÑÑнÑй (по ÑмолÑаниÑ) пÑоÑеÑÑ Ð²ÑглÑÐ´Ð¸Ñ Ñак.
+
+ÐÑиложение `FastAPI` (ÑкземплÑÑ) Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑод `.openapi()`, коÑоÑÑй должен возвÑаÑаÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI.
+
+РпÑоÑеÑÑе ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑегиÑÑÑиÑÑеÑÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* (обÑабоÑÑик пÑÑи) Ð´Ð»Ñ `/openapi.json` (или Ð´Ð»Ñ Ñого, ÑÑо Ñказано в ваÑем `openapi_url`).
+
+Ðна пÑоÑÑо возвÑаÑÐ°ÐµÑ JSON-оÑÐ²ÐµÑ Ñ ÑезÑлÑÑаÑом вÑзова меÑода пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `.openapi()`.
+
+Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¼ÐµÑод `.openapi()` пÑовеÑÑÐµÑ ÑвойÑÑво `.openapi_schema`: еÑли в нÑм Ñже еÑÑÑ Ð´Ð°Ð½Ð½Ñе, возвÑаÑÐ°ÐµÑ Ð¸Ñ
.
+
+ÐÑли Ð½ÐµÑ â генеÑиÑÑÐµÑ ÑÑ
ÐµÐ¼Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²ÑпомогаÑелÑной ÑÑнкÑии `fastapi.openapi.utils.get_openapi`.
+
+ФÑнкÑÐ¸Ñ `get_openapi()` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑÑ:
+
+* `title`: Ðаголовок OpenAPI, оÑобÑажаеÑÑÑ Ð² докÑменÑаÑии.
+* `version`: ÐеÑÑÐ¸Ñ Ð²Ð°Ñего API, напÑÐ¸Ð¼ÐµÑ `2.5.0`.
+* `openapi_version`: ÐеÑÑÐ¸Ñ Ð¸ÑполÑзÑемой ÑпеÑиÑикаÑии OpenAPI. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â поÑледнÑÑ: `3.1.0`.
+* `summary`: ÐÑаÑкое опиÑание API.
+* `description`: ÐпиÑание ваÑего API; Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Markdown и бÑÐ´ÐµÑ Ð¾ÑобÑажаеÑÑÑ Ð² докÑменÑаÑии.
+* `routes`: СпиÑок маÑÑÑÑÑов â ÑÑо ÐºÐ°Ð¶Ð´Ð°Ñ Ð·Ð°ÑегиÑÑÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ *опеÑаÑÐ¸Ñ Ð¿ÑÑи*. ÐеÑÑÑÑÑ Ð¸Ð· `app.routes`.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐаÑамеÑÑ `summary` доÑÑÑпен в OpenAPI 3.1.0 и вÑÑе, поддеÑживаеÑÑÑ FastAPI веÑÑии 0.99.0 и вÑÑе.
+
+///
+
+## ÐеÑеопÑеделение знаÑений по ÑмолÑÐ°Ð½Ð¸Ñ { #overriding-the-defaults }
+
+ÐÑполÑзÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð²ÑÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе Ñой же вÑпомогаÑелÑной ÑÑнкÑией ÑгенеÑиÑоваÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI и пеÑеопÑеделиÑÑ Ð»ÑбÑе нÑжнÑе ÑаÑÑи.
+
+ÐапÑимеÑ, добавим ÑаÑÑиÑение OpenAPI ReDoc Ð´Ð»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ ÑобÑÑвенного логоÑипа.
+
+### ÐбÑÑнÑй **FastAPI** { #normal-fastapi }
+
+СнаÑала напиÑиÑе пÑиложение **FastAPI** как обÑÑно:
+
+{* ../../docs_src/extending_openapi/tutorial001.py hl[1,4,7:9] *}
+
+### СгенеÑиÑÑйÑе ÑÑ
ÐµÐ¼Ñ OpenAPI { #generate-the-openapi-schema }
+
+ÐаÑем иÑполÑзÑйÑе ÑÑ Ð¶Ðµ вÑпомогаÑелÑнÑÑ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии ÑÑ
ÐµÐ¼Ñ OpenAPI внÑÑÑи ÑÑнкÑии `custom_openapi()`:
+
+{* ../../docs_src/extending_openapi/tutorial001.py hl[2,15:21] *}
+
+### ÐзмениÑе ÑÑ
ÐµÐ¼Ñ OpenAPI { #modify-the-openapi-schema }
+
+ТепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ добавиÑÑ ÑаÑÑиÑение ReDoc, добавив каÑÑомнÑй `x-logo` в «обÑекÑ» `info` в ÑÑ
еме OpenAPI:
+
+{* ../../docs_src/extending_openapi/tutorial001.py hl[22:24] *}
+
+### ÐÑÑиÑÑйÑе ÑÑ
ÐµÐ¼Ñ OpenAPI { #cache-the-openapi-schema }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑвойÑÑво `.openapi_schema` как «кÑÑ» Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑгенеÑиÑованной ÑÑ
емÑ.
+
+Так пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ пÑидÑÑÑÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ ÑÑ
ÐµÐ¼Ñ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда полÑзоваÑÐµÐ»Ñ Ð¾ÑкÑÑÐ²Ð°ÐµÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API.
+
+Ðна бÑÐ´ÐµÑ Ñоздана один Ñаз, а заÑем ÑÐ¾Ñ Ð¶Ðµ кÑÑиÑованнÑй ваÑÐ¸Ð°Ð½Ñ Ð±ÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑиÑ
запÑоÑов.
+
+{* ../../docs_src/extending_openapi/tutorial001.py hl[13:14,25:26] *}
+
+### ÐеÑеопÑеделиÑе меÑод { #override-the-method }
+
+ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе замениÑÑ Ð¼ÐµÑод `.openapi()` на ваÑÑ Ð½Ð¾Ð²ÑÑ ÑÑнкÑиÑ.
+
+{* ../../docs_src/extending_openapi/tutorial001.py hl[29] *}
+
+### ÐÑовеÑÑÑе { #check-it }
+
+ÐеÑейдиÑе на http://127.0.0.1:8000/redoc â Ð²Ñ ÑвидиÑе, ÑÑо иÑполÑзÑеÑÑÑ Ð²Ð°Ñ ÐºÐ°ÑÑомнÑй логоÑип (в ÑÑом пÑимеÑе â логоÑип **FastAPI**):
+
+
diff --git a/docs/ru/docs/how-to/general.md b/docs/ru/docs/how-to/general.md
new file mode 100644
index 000000000..029ea1d27
--- /dev/null
+++ b/docs/ru/docs/how-to/general.md
@@ -0,0 +1,39 @@
+# ÐбÑее â Ðак ÑделаÑÑ â РеÑепÑÑ { #general-how-to-recipes }
+
+ÐдеÑÑ Ð½ÐµÑколÑко ÑказаÑелей на дÑÑгие меÑÑа в докÑменÑаÑии Ð´Ð»Ñ Ð¾Ð±ÑиÑ
или ÑаÑÑÑÑ
вопÑоÑов.
+
+## ФилÑÑÑаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
â ÐезопаÑноÑÑÑ { #filter-data-security }
+
+ЧÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо Ð²Ñ Ð½Ðµ возвÑаÑаеÑе болÑÑе даннÑÑ
, Ñем ÑледÑеÑ, пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â ÐÐ¾Ð´ÐµÐ»Ñ Ð¾ÑвеÑа â ÐозвÑаÑаемÑй Ñип](../tutorial/response-model.md){.internal-link target=_blank}.
+
+## Теги в докÑменÑаÑии â OpenAPI { #documentation-tags-openapi }
+
+ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ñеги к ваÑим *опеÑаÑиÑм пÑÑи* и гÑÑппиÑоваÑÑ Ð¸Ñ
в инÑеÑÑейÑе докÑменÑаÑии, пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â ÐонÑигÑÑаÑии опеÑаÑий пÑÑи â Теги](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank}.
+
+## ÐÑаÑкое опиÑание и опиÑание в докÑменÑаÑии â OpenAPI { #documentation-summary-and-description-openapi }
+
+ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÐºÑаÑкое опиÑание и опиÑание к ваÑим *опеÑаÑиÑм пÑÑи* и оÑобÑазиÑÑ Ð¸Ñ
в инÑеÑÑейÑе докÑменÑаÑии, пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â ÐонÑигÑÑаÑии опеÑаÑий пÑÑи â ÐÑаÑкое опиÑание и опиÑание](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank}.
+
+## ÐпиÑание оÑвеÑа в докÑменÑаÑии â OpenAPI { #documentation-response-description-openapi }
+
+ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð¾Ð¿Ð¸Ñание оÑвеÑа, оÑобÑажаемое в инÑеÑÑейÑе докÑменÑаÑии, пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â ÐонÑигÑÑаÑии опеÑаÑий пÑÑи â ÐпиÑание оÑвеÑа](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank}.
+
+## ÐокÑменÑаÑÐ¸Ñ â помеÑиÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð¿ÑÑи ÑÑÑаÑевÑей â OpenAPI { #documentation-deprecate-a-path-operation-openapi }
+
+ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð¼ÐµÑиÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* как ÑÑÑаÑевÑÑÑ Ð¸ показаÑÑ ÑÑо в инÑеÑÑейÑе докÑменÑаÑии, пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â ÐонÑигÑÑаÑии опеÑаÑий пÑÑи â ÐомеÑиÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð¿ÑÑи ÑÑÑаÑевÑей](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank}.
+
+## ÐÑеобÑазование лÑбÑÑ
даннÑÑ
к ÑоÑмаÑÑ, ÑовмеÑÑÐ¸Ð¼Ð¾Ð¼Ñ Ñ JSON { #convert-any-data-to-json-compatible }
+
+ЧÑÐ¾Ð±Ñ Ð¿ÑеобÑазоваÑÑ Ð»ÑбÑе даннÑе к ÑоÑмаÑÑ, ÑовмеÑÑÐ¸Ð¼Ð¾Ð¼Ñ Ñ JSON, пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â JSON-ÑовмеÑÑимÑй кодиÑовÑик](../tutorial/encoder.md){.internal-link target=_blank}.
+
+## ÐеÑаданнÑе OpenAPI â ÐокÑменÑаÑÐ¸Ñ { #openapi-metadata-docs }
+
+ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¼ÐµÑаданнÑе в ваÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI, вклÑÑÐ°Ñ Ð»Ð¸ÑензиÑ, веÑÑиÑ, конÑакÑÑ Ð¸ Ñ.д., пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â ÐеÑаданнÑе и URL докÑменÑаÑии](../tutorial/metadata.md){.internal-link target=_blank}.
+
+## ÐолÑзоваÑелÑÑкий URL OpenAPI { #openapi-custom-url }
+
+ЧÑÐ¾Ð±Ñ Ð½Ð°ÑÑÑоиÑÑ URL OpenAPI (или ÑдалиÑÑ ÐµÐ³Ð¾), пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â ÐеÑаданнÑе и URL докÑменÑаÑии](../tutorial/metadata.md#openapi-url){.internal-link target=_blank}.
+
+## URL докÑменÑаÑии OpenAPI { #openapi-docs-urls }
+
+ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ URL, иÑполÑзÑемÑе Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑки ÑгенеÑиÑованнÑÑ
полÑзоваÑелÑÑкиÑ
инÑеÑÑейÑов докÑменÑаÑии, пÑоÑиÑайÑе докÑменÑаÑиÑ: [Ð ÑководÑÑво â ÐеÑаданнÑе и URL докÑменÑаÑии](../tutorial/metadata.md#docs-urls){.internal-link target=_blank}.
diff --git a/docs/ru/docs/how-to/graphql.md b/docs/ru/docs/how-to/graphql.md
new file mode 100644
index 000000000..9ed6d95ca
--- /dev/null
+++ b/docs/ru/docs/how-to/graphql.md
@@ -0,0 +1,60 @@
+# GraphQL { #graphql }
+
+Так как **FastAPI** оÑнован на ÑÑандаÑÑе **ASGI**, оÑÐµÐ½Ñ Ð»ÐµÐ³ÐºÐ¾ инÑегÑиÑоваÑÑ Ð»ÑбÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ **GraphQL**, Ñакже ÑовмеÑÑимÑÑ Ñ ASGI.
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе комбиниÑоваÑÑ Ð¾Ð±ÑÑнÑе *опеÑаÑии пÑÑи* FastAPI Ñ GraphQL в одном пÑиложении.
+
+/// tip | СовеÑ
+
+**GraphQL** ÑеÑÐ°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе оÑÐµÐ½Ñ ÑпеÑиÑиÑеÑкие задаÑи.
+
+У него еÑÑÑ ÐºÐ°Ðº **пÑеимÑÑеÑÑва**, Ñак и **недоÑÑаÑки** по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¾Ð±ÑÑнÑми **веб-API**.
+
+УбедиÑеÑÑ, ÑÑо **вÑгодÑ** Ð´Ð»Ñ Ð²Ð°Ñего ÑлÑÑÐ°Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑевеÑиваÑÑ **недоÑÑаÑки**. ð¤
+
+///
+
+## ÐиблиоÑеки GraphQL { #graphql-libraries }
+
+Ðиже пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе библиоÑеки **GraphQL** Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой **ASGI**. ÐÑ
можно иÑполÑзоваÑÑ Ñ **FastAPI**:
+
+* Strawberry ð
+ * С докÑменÑаÑией Ð´Ð»Ñ FastAPI
+* Ariadne
+ * С докÑменÑаÑией Ð´Ð»Ñ FastAPI
+* Tartiflette
+ * С Tartiflette ASGI Ð´Ð»Ñ Ð¸Ð½ÑегÑаÑии Ñ ASGI
+* Graphene
+ * С starlette-graphene3
+
+## GraphQL Ñо Strawberry { #graphql-with-strawberry }
+
+ÐÑли вам нÑжно или Ñ
оÑеÑÑÑ ÑабоÑаÑÑ Ñ **GraphQL**, **Strawberry** â **ÑекомендÑемаÑ** библиоÑека, Ñак как ÐµÑ Ð´Ð¸Ð·Ð°Ð¹Ð½ ближе вÑего к Ð´Ð¸Ð·Ð°Ð¹Ð½Ñ **FastAPI**, вÑÑ Ð¾Ñновано на **анноÑаÑиÑÑ
Ñипов**.
+
+РзавиÑимоÑÑи Ð¾Ñ Ð²Ð°Ñего ÑÑенаÑÐ¸Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑедпоÑеÑÑÑ Ð´ÑÑгÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекÑ, но еÑли Ð±Ñ Ð²Ñ ÑпÑоÑили менÑ, Ñ, ÑкоÑее вÑего, пÑедложил Ð±Ñ Ð¿Ð¾Ð¿ÑобоваÑÑ **Strawberry**.
+
+ÐÐ¾Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑой пÑÐ¸Ð¼ÐµÑ Ñого, как можно инÑегÑиÑоваÑÑ Strawberry Ñ FastAPI:
+
+{* ../../docs_src/graphql/tutorial001.py hl[3,22,25] *}
+
+ÐодÑобнее о Strawberry можно ÑзнаÑÑ Ð² докÑменÑаÑии Strawberry.
+
+Ð Ñакже в докÑменÑаÑии по инÑегÑаÑии Strawberry Ñ FastAPI.
+
+## УÑÑаÑевÑий `GraphQLApp` из Starlette { #older-graphqlapp-from-starlette }
+
+РпÑедÑдÑÑиÑ
веÑÑиÑÑ
Starlette бÑл клаÑÑ `GraphQLApp` Ð´Ð»Ñ Ð¸Ð½ÑегÑаÑии Ñ Graphene.
+
+Ðн бÑл обÑÑвлен ÑÑÑаÑевÑим в Starlette, но еÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÐºÐ¾Ð´, коÑоÑÑй его иÑполÑзовал, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе легко **мигÑиÑоваÑÑ** на starlette-graphene3, коÑоÑÑй ÑеÑÐ°ÐµÑ ÑÑ Ð¶Ðµ задаÑÑ Ð¸ Ð¸Ð¼ÐµÐµÑ **поÑÑи иденÑиÑнÑй инÑеÑÑейÑ**.
+
+/// tip | СовеÑ
+
+ÐÑли вам нÑжен GraphQL, Ñ Ð²ÑÑ Ð¶Ðµ ÑекомендÑÑ Ð¿Ð¾ÑмоÑÑеÑÑ Strawberry, Ñак как он оÑнован на анноÑаÑиÑÑ
Ñипов, а не на полÑзоваÑелÑÑкиÑ
клаÑÑаÑ
и ÑипаÑ
.
+
+///
+
+## ÐодÑобнее { #learn-more }
+
+ÐодÑобнее о **GraphQL** Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð² оÑиÑиалÑной докÑменÑаÑии GraphQL.
+
+Также можно поÑиÑаÑÑ Ð±Ð¾Ð»ÑÑе о каждой из ÑказаннÑÑ
вÑÑе библиоÑек по пÑиведÑннÑм ÑÑÑлкам.
diff --git a/docs/ru/docs/how-to/index.md b/docs/ru/docs/how-to/index.md
new file mode 100644
index 000000000..228c125dd
--- /dev/null
+++ b/docs/ru/docs/how-to/index.md
@@ -0,0 +1,13 @@
+# Ðак ÑделаÑÑ â РеÑепÑÑ { #how-to-recipes }
+
+ÐдеÑÑ Ð²Ñ Ð½Ð°Ð¹Ð´ÐµÑе ÑазнÑе ÑеÑепÑÑ Ð¸ ÑÑководÑÑва «как ÑделаÑÑ» по ÑазлиÑнÑм Ñемам.
+
+ÐолÑÑинÑÑво из ÑÑиÑ
идей более-менее незавиÑимÑ, и в болÑÑинÑÑве ÑлÑÑаев вам ÑÑÐ¾Ð¸Ñ Ð¸Ð·ÑÑаÑÑ Ð¸Ñ
ÑолÑко еÑли они напÑÑмÑÑ Ð¾ÑноÑÑÑÑÑ Ðº ваÑÐµÐ¼Ñ Ð¿ÑоекÑÑ.
+
+ÐÑли ÑÑо-Ñо кажеÑÑÑ Ð¸Ð½ÑеÑеÑнÑм и полезнÑм Ð´Ð»Ñ Ð²Ð°Ñего пÑоекÑа, Ñмело изÑÑайÑе; в пÑоÑивном ÑлÑÑае, веÑоÑÑно, можно пÑоÑÑо пÑопÑÑÑиÑÑ.
+
+/// tip | СовеÑ
+
+ÐÑли Ð²Ñ Ñ
оÑиÑе изÑÑиÑÑ FastAPI ÑÑÑÑкÑÑÑиÑованно (ÑекомендÑеÑÑÑ), вмеÑÑо ÑÑого ÑиÑайÑе [УÑебник â Ð ÑководÑÑво полÑзоваÑелÑ](../tutorial/index.md){.internal-link target=_blank} по главам.
+
+///
diff --git a/docs/ru/docs/how-to/separate-openapi-schemas.md b/docs/ru/docs/how-to/separate-openapi-schemas.md
new file mode 100644
index 000000000..5b1214016
--- /dev/null
+++ b/docs/ru/docs/how-to/separate-openapi-schemas.md
@@ -0,0 +1,104 @@
+# РазделÑÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI Ð´Ð»Ñ Ð²Ñ
ода и вÑÑ
ода или Ð½ÐµÑ { #separate-openapi-schemas-for-input-and-output-or-not }
+
+ÐÑи иÑполÑзовании **Pydantic v2** ÑгенеÑиÑованнÑй OpenAPI ÑÑановиÑÑÑ ÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑоÑнÑм и **коÑÑекÑнÑм**, Ñем ÑанÑÑе. ð
+
+Ðа Ñамом деле, в некоÑоÑÑÑ
ÑлÑÑаÑÑ
в OpenAPI бÑÐ´ÐµÑ Ð´Ð°Ð¶Ðµ **две JSON ÑÑ
емÑ** Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ и Ñой же Pydanticâмодели: Ð´Ð»Ñ Ð²Ñ
ода и Ð´Ð»Ñ Ð²ÑÑ
ода â в завиÑимоÑÑи Ð¾Ñ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ **знаÑений по ÑмолÑаниÑ**.
+
+ÐоÑмоÑÑим, как ÑÑо ÑабоÑаеÑ, и как ÑÑо измениÑÑ Ð¿Ñи необÑ
одимоÑÑи.
+
+## Pydanticâмодели Ð´Ð»Ñ Ð²Ñ
ода и вÑÑ
ода { #pydantic-models-for-input-and-output }
+
+ÐÑедположим, Ñ Ð²Ð°Ñ ÐµÑÑÑ PydanticâÐ¼Ð¾Ð´ÐµÐ»Ñ Ñо знаÑениÑми по ÑмолÑаниÑ, как здеÑÑ:
+
+{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py ln[1:7] hl[7] *}
+
+### ÐÐ¾Ð´ÐµÐ»Ñ Ð´Ð»Ñ Ð²Ñ
ода { #model-for-input }
+
+ÐÑли иÑполÑзоваÑÑ ÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ ÐºÐ°Ðº вÑ
однÑÑ, как здеÑÑ:
+
+{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py ln[1:15] hl[14] *}
+
+â¦Ñо поле `description` **не бÑÐ´ÐµÑ Ð¾Ð±ÑзаÑелÑнÑм**, поÑÐ¾Ð¼Ñ ÑÑо Ñ Ð½ÐµÐ³Ð¾ знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ `None`.
+
+### ÐÑ
Ð¾Ð´Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð² докÑменÑаÑии { #input-model-in-docs }
+
+РдокÑменÑаÑии ÑÑо видно: Ñ Ð¿Ð¾Ð»Ñ `description` Ð½ÐµÑ **кÑаÑной звÑздоÑки** â оно не оÑмеÑено как обÑзаÑелÑное:
+
+
+

+
+
+### ÐÐ¾Ð´ÐµÐ»Ñ Ð´Ð»Ñ Ð²ÑÑ
ода { #model-for-output }
+
+Ðо еÑли иÑполÑзоваÑÑ ÑÑ Ð¶Ðµ Ð¼Ð¾Ð´ÐµÐ»Ñ ÐºÐ°Ðº вÑÑ
однÑÑ, как здеÑÑ:
+
+{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py hl[19] *}
+
+â¦Ñо, поÑколÑÐºÑ Ñ `description` еÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ, даже еÑли Ð²Ñ **ниÑего не веÑнÑÑе** Ð´Ð»Ñ ÑÑого полÑ, оно вÑÑ Ñавно бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÑÑо **знаÑение по ÑмолÑаниÑ**.
+
+### ÐÐ¾Ð´ÐµÐ»Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
оÑвеÑа { #model-for-output-response-data }
+
+ÐÑли поÑабоÑаÑÑ Ñ Ð¸Ð½ÑеÑакÑивной докÑменÑаÑией и поÑмоÑÑеÑÑ Ð¾ÑвеÑ, Ñо, Ñ
оÑÑ ÐºÐ¾Ð´ ниÑего не добавил в одно из полей `description`, JSONâоÑÐ²ÐµÑ ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ (`null`):
+
+
+

+
+
+ÐÑо ознаÑаеÑ, ÑÑо Ñ Ð½ÐµÐ³Ð¾ **вÑегда бÑÐ´ÐµÑ ÐºÐ°ÐºÐ¾ÐµâÑо знаÑение**, пÑоÑÑо иногда ÑÑо знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `None` (или `null` в JSON).
+
+СледоваÑелÑно, клиенÑам, иÑполÑзÑÑÑим Ð²Ð°Ñ API, не нÑжно пÑовеÑÑÑÑ Ð½Ð°Ð»Ð¸Ñие ÑÑого знаÑениÑ: они могÑÑ **иÑÑ
одиÑÑ Ð¸Ð· Ñого, ÑÑо поле вÑегда пÑиÑÑÑÑÑвÑеÑ**, а в некоÑоÑÑÑ
ÑлÑÑаÑÑ
Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ `None`.
+
+Ð OpenAPI ÑÑо опиÑÑваеÑÑÑ Ñем, ÑÑо поле помеÑаеÑÑÑ ÐºÐ°Ðº **обÑзаÑелÑное**, поÑколÑÐºÑ Ð¾Ð½Ð¾ вÑегда пÑиÑÑÑÑÑвÑеÑ.
+
+Ðзâза ÑÑого JSON Schema Ð´Ð»Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ **вÑ
ода** или **вÑÑ
ода**:
+
+* Ð´Ð»Ñ **вÑ
ода** `description` не бÑÐ´ÐµÑ Ð¾Ð±ÑзаÑелÑнÑм
+* Ð´Ð»Ñ **вÑÑ
ода** оно бÑÐ´ÐµÑ **обÑзаÑелÑнÑм** (и пÑи ÑÑом Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `None`, или, в ÑеÑминаÑ
JSON, `null`)
+
+### ÐÑÑ
Ð¾Ð´Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð² докÑменÑаÑии { #model-for-output-in-docs }
+
+РдокÑменÑаÑии ÑÑо Ñоже видно, ÑÑо **оба**: `name` и `description`, помеÑÐµÐ½Ñ **кÑаÑной звÑздоÑкой** как **обÑзаÑелÑнÑе**:
+
+
+

+
+
+### Ðодели Ð´Ð»Ñ Ð²Ñ
ода и вÑÑ
ода в докÑменÑаÑии { #model-for-input-and-output-in-docs }
+
+ÐÑли поÑмоÑÑеÑÑ Ð²Ñе доÑÑÑпнÑе ÑÑ
ÐµÐ¼Ñ (JSON Schema) в OpenAPI, Ð²Ñ ÑвидиÑе две: `Item-Input` и `Item-Output`.
+
+ÐÐ»Ñ `Item-Input` поле `description` **не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм** â кÑаÑной звÑздоÑки неÑ.
+
+Ð Ð´Ð»Ñ `Item-Output` `description` **обÑзаÑелÑно** â кÑаÑÐ½Ð°Ñ Ð·Ð²ÑздоÑка еÑÑÑ.
+
+
+

+
+
+ÐлагодаÑÑ ÑÑой возможноÑÑи **Pydantic v2** докÑменÑаÑÐ¸Ñ Ð²Ð°Ñего API ÑÑановиÑÑÑ Ð±Ð¾Ð»ÐµÐµ **ÑоÑной**; еÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑгенеÑиÑованнÑе клиенÑÑ Ð¸ SDK, они Ñоже бÑдÑÑ ÑоÑнее, Ñ Ð»ÑÑÑим **ÑдобÑÑвом Ð´Ð»Ñ ÑазÑабоÑÑиков** и болÑÑей конÑиÑÑенÑноÑÑÑÑ. ð
+
+## Ðе ÑазделÑÑÑ ÑÑ
ÐµÐ¼Ñ { #do-not-separate-schemas }
+
+Ðднако бÑваÑÑ ÑлÑÑаи, когда Ð²Ñ Ñ
оÑиÑе имеÑÑ **Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ ÑÑ
ÐµÐ¼Ñ Ð´Ð»Ñ Ð²Ñ
ода и вÑÑ
ода**.
+
+ÐлавнÑй ÑÑенаÑий â когда Ñ Ð²Ð°Ñ Ñже еÑÑÑ ÑгенеÑиÑованнÑй клиенÑÑкий код/SDK, и Ð²Ñ Ð¿Ð¾ÐºÐ° не Ñ
оÑиÑе обновлÑÑÑ Ð²ÐµÑÑ ÑÑÐ¾Ñ Ð°Ð²ÑогенеÑиÑÑемÑй код/SDK (Ñано или поздно Ð²Ñ ÑÑо ÑделаеÑе, но не ÑейÑаÑ).
+
+Ð Ñаком ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑклÑÑиÑÑ ÑÑÑ ÑÑнкÑионалÑноÑÑÑ Ð² FastAPI Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа `separate_input_output_schemas=False`.
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐоддеÑжка `separate_input_output_schemas` поÑвилаÑÑ Ð² FastAPI `0.102.0`. ð¤
+
+///
+
+{* ../../docs_src/separate_openapi_schemas/tutorial002_py310.py hl[10] *}
+
+### Ðдна и Ñа же ÑÑ
ема Ð´Ð»Ñ Ð²Ñ
одной и вÑÑ
одной моделей в докÑменÑаÑии { #same-schema-for-input-and-output-models-in-docs }
+
+ТепеÑÑ Ð´Ð»Ñ ÑÑой модели бÑÐ´ÐµÑ Ð¾Ð´Ð½Ð° обÑÐ°Ñ ÑÑ
ема и Ð´Ð»Ñ Ð²Ñ
ода, и Ð´Ð»Ñ Ð²ÑÑ
ода â ÑолÑко `Item`, и в ней `description` бÑÐ´ÐµÑ **не обÑзаÑелÑнÑм**:
+
+
+

+
+
+ÐÑо Ñо же поведение, ÑÑо и в Pydantic v1. ð¤
diff --git a/docs/ru/docs/how-to/testing-database.md b/docs/ru/docs/how-to/testing-database.md
new file mode 100644
index 000000000..18f4deeca
--- /dev/null
+++ b/docs/ru/docs/how-to/testing-database.md
@@ -0,0 +1,7 @@
+# ТеÑÑиÑование Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
{ #testing-a-database }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе изÑÑиÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, SQL и SQLModel в докÑменÑаÑии SQLModel. ð¤
+
+ÐÑÑÑ Ð¼Ð¸Ð½Ð¸-ÑÑководÑÑво по иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SQLModel Ñ FastAPI. â¨
+
+Ð ÑÑом ÑÑководÑÑве еÑÑÑ Ñаздел о ÑеÑÑиÑовании SQL-баз даннÑÑ
. ð
diff --git a/docs/ru/docs/resources/index.md b/docs/ru/docs/resources/index.md
new file mode 100644
index 000000000..54be4e5fd
--- /dev/null
+++ b/docs/ru/docs/resources/index.md
@@ -0,0 +1,3 @@
+# РеÑÑÑÑÑ { #resources }
+
+ÐополниÑелÑнÑе ÑеÑÑÑÑÑ, внеÑние ÑÑÑлки, ÑÑаÑÑи и многое дÑÑгое. âï¸