# ๐ ๏ธ
๐ ๐ช ๐ฎ ๐ ๏ธ **FastAPI** ๐ธ.
"๐ ๏ธ" ๐ข ๐ ๐ท โฎ๏ธ ๐ **๐จ** โญ โซ๏ธ ๐ ๏ธ ๐ ๐ฏ *โก ๐ ๏ธ*. & โฎ๏ธ ๐ **๐จ** โญ ๐ฌ โซ๏ธ.
* โซ๏ธ โ ๐ **๐จ** ๐ ๐ ๐ ๐ธ.
* โซ๏ธ ๐ช โคด๏ธ ๐ณ ๐ **๐จ** โ๏ธ ๐ ๐ ๐ช ๐.
* โคด๏ธ โซ๏ธ ๐ถโโ๏ธ **๐จ** ๐ ๏ธ ๐ ๐ธ ( *โก ๐ ๏ธ*).
* โซ๏ธ โคด๏ธ โ **๐จ** ๐ ๐ธ ( *โก ๐ ๏ธ*).
* โซ๏ธ ๐ช ๐ณ ๐ **๐จ** โ๏ธ ๐ ๐ ๐ช ๐.
* โคด๏ธ โซ๏ธ ๐จ **๐จ**.
!!! note "๐ก โน"
๐ฅ ๐ โ๏ธ ๐ โฎ๏ธ `yield`, ๐ช ๐ ๐ ๐ *โฎ๏ธ* ๐ ๏ธ.
๐ฅ ๐ค ๐ ๐ฅ ๐ (๐ โช), ๐ซ ๐ ๐ *โฎ๏ธ* ๐ ๐ ๏ธ.
## โ ๐ ๏ธ
โ ๐ ๏ธ ๐ โ๏ธ ๐จโ๐จ `@app.middleware("http")` ๐ ๐ ๐ข.
๐ ๏ธ ๐ข ๐จ:
* `request`.
* ๐ข `call_next` ๐ ๐ ๐จ `request` ๐ข.
* ๐ ๐ข ๐ ๐ถโโ๏ธ `request` ๐ *โก ๐ ๏ธ*.
* โคด๏ธ โซ๏ธ ๐จ `response` ๐ ๐ *โก ๐ ๏ธ*.
* ๐ ๐ช โคด๏ธ ๐ ๐
`response` โญ ๐ฌ โซ๏ธ.
```Python hl_lines="8-9 11 14"
{!../../../docs_src/middleware/tutorial001.py!}
```
!!! tip
โ๏ธ ๐คฏ ๐ ๐ ยฉ ๐ ๐ช ๐ฎ โ๏ธ 'โ-' ๐ก.
โ๏ธ ๐ฅ ๐ โ๏ธ ๐ ๐ ๐ ๐ ๐ ๐ฉโ๐ป ๐ฅ ๐ช ๐, ๐ ๐ช ๐ฎ ๐ซ ๐ โ ๐ณ ([โ (โ๏ธ-๐จ๐ณ โน ๐ค)](cors.md){.internal-link target=_blank}) โ๏ธ ๐ข `expose_headers` ๐ ๐ โ ๐ฉบ.
!!! note "๐ก โน"
๐ ๐ช โ๏ธ `from starlette.requests import Request`.
**FastAPI** ๐ โซ๏ธ ๐ช ๐, ๐ฉโ๐ป. โ๏ธ โซ๏ธ ๐ ๐ โช๏ธโก๏ธ ๐.
### โญ & โฎ๏ธ `response`
๐ ๐ช ๐ฎ ๐ ๐ โฎ๏ธ `request`, โญ ๐ *โก ๐ ๏ธ* ๐จ โซ๏ธ.
& โฎ๏ธ `response` ๐, โญ ๐ฌ โซ๏ธ.
๐ผ, ๐ ๐ช ๐ฎ ๐ ๐ `X-Process-Time` โ ๐ฐ ๐ฅ ๐ โซ๏ธ โ ๐ ๏ธ ๐จ & ๐ ๐จ:
```Python hl_lines="10 12-13"
{!../../../docs_src/middleware/tutorial001.py!}
```
## ๐ ๐ ๏ธ
๐ ๐ช โช โ ๐ ๐ ๐ ๐ ๏ธ [๐ง ๐ฉโ๐ป ๐ฆฎ: ๐ง ๐ ๏ธ](../advanced/middleware.md){.internal-link target=_blank}.
๐ ๐ โ ๐ โ ๐ต โ โฎ๏ธ ๐ ๏ธ โญ ๐.