mirror of https://github.com/tiangolo/fastapi.git
🌐 Add Ukrainian translation for `docs/uk/docs/tutorial/middleware.md` page (#13520)
This commit is contained in:
parent
950fb3f02d
commit
3337c3b9be
|
|
@ -0,0 +1,75 @@
|
|||
# Middleware (Проміжний шар)
|
||||
|
||||
У **FastAPI** можна додавати middleware (проміжний шар).
|
||||
|
||||
"Middleware" — це функція, яка працює з кожним **запитом** перед його обробкою будь-якою конкретною *операцією шляху* (*path operation*), а також з кожною **відповіддю** перед її поверненням.
|
||||
|
||||
* Middleware отримує кожен **запит**, що надходить до Вашого застосунку.
|
||||
* Може виконати певні дії із цим **запитом** або запустити необхідний код.
|
||||
* Далі передає **запит** для обробки основним застосунком (*операцією шляху*).
|
||||
* Отримує **відповідь**, сформовану застосунком (*операцією шляху*).
|
||||
* Може змінити цю **відповідь** або виконати додатковий код.
|
||||
* Повертає **відповідь** клієнту.
|
||||
|
||||
/// note | Технічні деталі
|
||||
|
||||
Якщо у Вас є залежності з `yield`, код виходу виконається *після* middleware.
|
||||
|
||||
Якщо були заплановані фонові задачі (background tasks - розглянуто далі), вони виконаються *після* всіх middleware.
|
||||
|
||||
///
|
||||
|
||||
## Створення middleware
|
||||
|
||||
Щоб створити middleware, Ви використовуєте декоратор `@app.middleware("http")` на функції.
|
||||
|
||||
Функція middleware отримує:
|
||||
|
||||
* `Запит`.
|
||||
* Функцію `call_next`, яка приймає `запит` як параметр.
|
||||
* Ця функція передає `запит` відповідній *операції шляху*.
|
||||
* Потім вона повертає `відповідь`, згенеровану цією *операцією шляху*.
|
||||
|
||||
* Ви можете ще змінити `відповідь` перед тим, як повернути її.
|
||||
|
||||
|
||||
{* ../../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 (Обмін ресурсами між різними джерелами)](cors.md){.internal-link target=_blank} за допомогою параметра `expose_headers`, описаного в <a href="https://www.starlette.io/middleware/#corsmiddleware" class="external-link" target="_blank">документації Starlette по CORS</a>.
|
||||
|
||||
///
|
||||
|
||||
/// note | Технічні деталі
|
||||
|
||||
Ви також можете використати `from starlette.requests import Request`.
|
||||
|
||||
**FastAPI** надає це для Вашої зручності як розробника. Але він походить безпосередньо зі Starlette.
|
||||
|
||||
///
|
||||
|
||||
### До і після `response`(`відповіді`)
|
||||
|
||||
Ви можете додати код, який буде виконуватися з `запитом` (`request`), до того, як його обробить будь-яка *операція шляху* (*path operation*).
|
||||
|
||||
Також Ви можете додати код, який буде виконуватися після того, як `відповідь` (`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()` оскільки він може бути більш точним для таких випадків. 🤓
|
||||
|
||||
///
|
||||
|
||||
## Інші middlewares
|
||||
|
||||
Ви можете пізніше прочитати більше про інші middlewares в [Advanced User Guide: Advanced Middleware](../advanced/middleware.md){.internal-link target=_blank}.
|
||||
|
||||
Ви дізнаєтесь, як обробляти <abbr title="Cross-Origin Resource Sharing">CORS</abbr> за допомогою middleware в наступному розділі.
|
||||
Loading…
Reference in New Issue