From bb98f7df6d85b91827d3144aacdc53bcd49ab2e8 Mon Sep 17 00:00:00 2001
From: alv2017 <v.alishauskaite@gmail.com>
Date: Fri, 28 Feb 2025 19:09:29 +0200
Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Add=20Russian=20translation=20fo?=
 =?UTF-8?q?r=20=20`docs/ru/docs/tutorial/middleware.md`=20(#13412)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 docs/ru/docs/tutorial/middleware.md | 74 +++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100644 docs/ru/docs/tutorial/middleware.md

diff --git a/docs/ru/docs/tutorial/middleware.md b/docs/ru/docs/tutorial/middleware.md
new file mode 100644
index 000000000..845e881e1
--- /dev/null
+++ b/docs/ru/docs/tutorial/middleware.md
@@ -0,0 +1,74 @@
+# Middleware (Промежуточный слой)
+
+Вы можете добавить промежуточный слой (middleware) в **FastAPI** приложение.
+
+"Middleware" это функция, которая выполняется с каждым запросом до его обработки какой-либо конкретной *операцией пути*.
+А также с каждым ответом перед его возвращением.
+
+
+* Она принимает каждый поступающий **запрос**.
+* Может что-то сделать с этим **запросом** или выполнить любой нужный код.
+* Затем передает **запрос** для последующей обработки (какой-либо *операцией пути*).
+* Получает **ответ** (от *операции пути*).
+* Может что-то сделать с этим **ответом** или выполнить любой нужный код.
+* И возвращает **ответ**.
+
+/// note | Технические детали
+
+Если у вас есть зависимости с `yield`, то код выхода (код после `yield`) будет выполняться *после* middleware.
+
+Если у вас имеются некие фоновые задачи (см. документацию), то они будут запущены после middleware.
+
+///
+
+## Создание middleware
+
+Для создания middleware используйте декоратор `@app.middleware("http")`.
+
+Функция middleware получает:
+
+* `request` (объект запроса).
+* Функцию `call_next`, которая получает `request` в качестве параметра.
+    * Эта функция передаёт `request` соответствующей *операции пути*.
+    * Затем она возвращает ответ `response`, сгенерированный *операцией пути*.
+* Также имеется возможность видоизменить `response`, перед тем как его вернуть.
+
+{* ../../docs_src/middleware/tutorial001.py hl[8:9,11,14] *}
+
+/// tip | Примечание
+
+Имейте в виду, что можно добавлять свои собственные заголовки <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers" class="external-link" target="_blank">при помощи префикса 'X-'</a>.
+
+Если же вы хотите добавить собственные заголовки, которые клиент сможет увидеть в браузере, то вам потребуется добавить их в настройки CORS ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank}), используя параметр `expose_headers`, см. документацию <a href="https://www.starlette.io/middleware/#corsmiddleware" class="external-link" target="_blank">Starlette's CORS docs</a>.
+
+///
+
+/// note | Технические детали
+
+Вы также можете использовать `from starlette.requests import Request`.
+
+**FastAPI** предоставляет такой доступ для удобства разработчиков. Но, на самом деле, это `Request` из Starlette.
+
+///
+
+### До и после `response`
+
+Вы можете добавить код, использующий `request` до передачи его какой-либо *операции пути*.
+
+А также после формирования `response`, до того, как вы его вернёте.
+
+Например, вы можете добавить собственный заголовок `X-Process-Time`, содержащий время в секундах, необходимое для обработки запроса и генерации ответа:
+
+{* ../../docs_src/middleware/tutorial001.py hl[10,12:13] *}
+
+/// tip | Примечание
+
+Мы используем <a href="https://docs.python.org/3/library/time.html#time.perf_counter" class="external-link" target="_blank">`time.perf_counter()`</a> вместо `time.time()` для обеспечения большей точности наших примеров. 🤓
+
+///
+
+## Другие middleware
+
+О других middleware вы можете узнать больше в разделе [Advanced User Guide: Advanced Middleware](../advanced/middleware.md){.internal-link target=_blank}.
+
+В следующем разделе вы можете прочитать, как настроить <abbr title="Cross-Origin Resource Sharing">CORS</abbr> с помощью middleware.