--- /dev/null
+# Environment Variables { #environment-variables }
+
+/// tip | рдЯрд┐рдк
+
+рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ "environment variables" рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+рдПрдХ environment variable (рдЬрд┐рд╕реЗ "**env var**" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдПрдХ variable рд╣реИ рдЬреЛ Python code рдХреЗ **рдмрд╛рд╣рд░**, **рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо** рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рдЖрдкрдХрд╛ Python code (рдпрд╛ рджреВрд╕рд░реЗ programs рднреА) рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+Environment variables application **settings** рд╕рдВрднрд╛рд▓рдиреЗ, Python рдХреА **installation** рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрджрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
+
+## Env Vars рдмрдирд╛рдПрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #create-and-use-env-vars }
+
+рдЖрдк Python рдХреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдмрд┐рдирд╛, **shell (terminal)** рдореЗрдВ environment variables **рдмрдирд╛** рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+//// tab | Linux, macOS, Windows Bash
+
+<div class="termy">
+
+```console
+// рдЖрдк MY_NAME рдирд╛рдо рдХрд╛ env var рдРрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ
+$ export MY_NAME="Wade Wilson"
+
+// рдлрд┐рд░ рдЖрдк рдЗрд╕реЗ рджреВрд╕рд░реЗ programs рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ
+$ echo "Hello $MY_NAME"
+
+Hello Wade Wilson
+```
+
+</div>
+
+////
+
+//// tab | Windows PowerShell
+
+<div class="termy">
+
+```console
+// MY_NAME рдирд╛рдо рдХрд╛ env var рдмрдирд╛рдПрдВ
+$ $Env:MY_NAME = "Wade Wilson"
+
+// рдЗрд╕реЗ рджреВрд╕рд░реЗ programs рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ
+$ echo "Hello $Env:MY_NAME"
+
+Hello Wade Wilson
+```
+
+</div>
+
+////
+
+## Python рдореЗрдВ env vars рдкрдврд╝реЗрдВ { #read-env-vars-in-python }
+
+рдЖрдк Python рдХреЗ **рдмрд╛рд╣рд░**, terminal рдореЗрдВ (рдпрд╛ рдХрд┐рд╕реА рднреА рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ) environment variables рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ **рдЙрдиреНрд╣реЗрдВ Python рдореЗрдВ рдкрдврд╝** рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ `main.py` рдирд╛рдо рдХреА file рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ:
+
+```Python hl_lines="3"
+import os
+
+name = os.getenv("MY_NAME", "World")
+print(f"Hello {name} from Python")
+```
+
+/// tip | рдЯрд┐рдк
+
+[`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) рдХрд╛ рджреВрд╕рд░рд╛ argument рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП default value рд╣реИред
+
+рдЕрдЧрд░ рдпрд╣ рджрд┐рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рддреЛ default рд░реВрдк рд╕реЗ рдпрд╣ `None` рд╣реЛрддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП default value рдХреЗ рд░реВрдк рдореЗрдВ `"World"` рджреЗрддреЗ рд╣реИрдВред
+
+///
+
+рдлрд┐рд░ рдЖрдк рдЙрд╕ Python program рдХреЛ call рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+//// tab | Linux, macOS, Windows Bash
+
+<div class="termy">
+
+```console
+// рдпрд╣рд╛рдБ рд╣рдордиреЗ рдЕрднреА env var set рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ
+$ python main.py
+
+// рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ env var set рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╣рдореЗрдВ default value рдорд┐рд▓рддреА рд╣реИ
+
+Hello World from Python
+
+// рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рдПрдХ environment variable рдмрдирд╛рддреЗ рд╣реИрдВ
+$ export MY_NAME="Wade Wilson"
+
+// рдФрд░ рдлрд┐рд░ program рдХреЛ рдлрд┐рд░ рд╕реЗ call рдХрд░рддреЗ рд╣реИрдВ
+$ python main.py
+
+// рдЕрдм рдпрд╣ environment variable рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ
+
+Hello Wade Wilson from Python
+```
+
+</div>
+
+////
+
+//// tab | Windows PowerShell
+
+<div class="termy">
+
+```console
+// рдпрд╣рд╛рдБ рд╣рдордиреЗ рдЕрднреА env var set рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ
+$ python main.py
+
+// рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ env var set рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╣рдореЗрдВ default value рдорд┐рд▓рддреА рд╣реИ
+
+Hello World from Python
+
+// рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рдПрдХ environment variable рдмрдирд╛рддреЗ рд╣реИрдВ
+$ $Env:MY_NAME = "Wade Wilson"
+
+// рдФрд░ рдлрд┐рд░ program рдХреЛ рдлрд┐рд░ рд╕реЗ call рдХрд░рддреЗ рд╣реИрдВ
+$ python main.py
+
+// рдЕрдм рдпрд╣ environment variable рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ
+
+Hello Wade Wilson from Python
+```
+
+</div>
+
+////
+
+рдХреНрдпреЛрдВрдХрд┐ environment variables code рдХреЗ рдмрд╛рд╣рд░ set рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди code рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдХреА files рдХреЗ рд╕рд╛рде store (`git` рдореЗрдВ commit) рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА, рдЗрд╕рд▓рд┐рдП configurations рдпрд╛ **settings** рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдо рд╣реИред
+
+рдЖрдк рдХрд┐рд╕реА **specific program invocation** рдХреЗ рд▓рд┐рдП рднреА рдПрдХ environment variable рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХреЗрд╡рд▓ рдЙрд╕реА program рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕рдХреА рдЕрд╡рдзрд┐ рддрдХред
+
+рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, program рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ, рдЙрд╕реА line рдкрд░ рдЗрд╕реЗ рдмрдирд╛рдПрдВ:
+
+<div class="termy">
+
+```console
+// рдЗрд╕ program call рдХреЗ рд▓рд┐рдП line рдореЗрдВ MY_NAME рдирд╛рдо рдХрд╛ env var рдмрдирд╛рдПрдВ
+$ MY_NAME="Wade Wilson" python main.py
+
+// рдЕрдм рдпрд╣ environment variable рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ
+
+Hello Wade Wilson from Python
+
+// рдЗрд╕рдХреЗ рдмрд╛рдж env var рдореМрдЬреВрдж рдирд╣реАрдВ рд░рд╣рддрд╛
+$ python main.py
+
+Hello World from Python
+```
+
+</div>
+
+/// tip | рдЯрд┐рдк
+
+рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ [The Twelve-Factor App: Config](https://12factor.net/config) рдкрд░ рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+## Types рдФрд░ Validation { #types-and-validation }
+
+рдпреЗ environment variables рдХреЗрд╡рд▓ **text strings** рдХреЛ рд╣реА рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ Python рд╕реЗ рдмрд╛рд╣рд░реА рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рджреВрд╕рд░реЗ programs рддрдерд╛ рдмрд╛рдХреА system (рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдЬреИрд╕реЗ Linux, Windows, рдФрд░ macOS) рдХреЗ рд╕рд╛рде compatible рд╣реЛрдирд╛ рд╣реЛрддрд╛ рд╣реИред
+
+рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Python рдореЗрдВ environment variable рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ **рдХреЛрдИ рднреА value** **`str` рд╣реЛрдЧрд╛**, рдФрд░ рдХрд┐рд╕реА рдЕрд▓рдЧ type рдореЗрдВ рдХреЛрдИ рднреА conversion рдпрд╛ рдХреЛрдИ рднреА validation code рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
+
+рдЖрдк [Advanced User Guide - Settings and Environment Variables](./advanced/settings.md) рдореЗрдВ **application settings** рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП environment variables рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╕реАрдЦреЗрдВрдЧреЗред
+
+## `PATH` Environment Variable { #path-environment-variable }
+
+**`PATH`** рдирд╛рдо рдХрд╛ рдПрдХ **special** environment variable рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо (Linux, macOS, Windows) рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП programs рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред
+
+`PATH` variable рдХрд╛ value рдПрдХ рд▓рдВрдмреА string рд╣реЛрддреА рд╣реИ рдЬреЛ Linux рдФрд░ macOS рдкрд░ colon `:` рд╕реЗ, рдФрд░ Windows рдкрд░ semicolon `;` рд╕реЗ рдЕрд▓рдЧ рдХреА рдЧрдИ directories рд╕реЗ рдмрдиреА рд╣реЛрддреА рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `PATH` environment variable рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
+
+//// tab | Linux, macOS
+
+```plaintext
+/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ system рдХреЛ рдЗрди directories рдореЗрдВ programs рдвреВрдВрдврдиреЗ рдЪрд╛рд╣рд┐рдП:
+
+* `/usr/local/bin`
+* `/usr/bin`
+* `/bin`
+* `/usr/sbin`
+* `/sbin`
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32
+```
+
+рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ system рдХреЛ рдЗрди directories рдореЗрдВ programs рдвреВрдВрдврдиреЗ рдЪрд╛рд╣рд┐рдП:
+
+* `C:\Program Files\Python312\Scripts`
+* `C:\Program Files\Python312`
+* `C:\Windows\System32`
+
+////
+
+рдЬрдм рдЖрдк terminal рдореЗрдВ рдХреЛрдИ **command** type рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо `PATH` environment variable рдореЗрдВ listed **рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ directory** рдореЗрдВ program рдХреЛ **рдвреВрдВрдврддрд╛ рд╣реИ**ред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк terminal рдореЗрдВ `python` type рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЙрд╕ list рдХреА **рдкрд╣рд▓реА directory** рдореЗрдВ `python` рдирд╛рдо рдХрд╛ program рдвреВрдВрдврддрд╛ рд╣реИред
+
+рдЕрдЧрд░ рдЙрд╕реЗ рдпрд╣ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ **рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ** рдХрд░реЗрдЧрд╛ред рдирд╣реАрдВ рддреЛ рд╡рд╣ **рджреВрд╕рд░реА directories** рдореЗрдВ рдвреВрдВрдврдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред
+
+### Python install рдХрд░рдирд╛ рдФрд░ `PATH` update рдХрд░рдирд╛ { #installing-python-and-updating-the-path }
+
+рдЬрдм рдЖрдк Python install рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрд╕реЗ рдкреВрдЫрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк `PATH` environment variable рдХреЛ update рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+//// tab | Linux, macOS
+
+рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк Python install рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ `/opt/custompython/bin` directory рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
+
+рдЕрдЧрд░ рдЖрдк `PATH` environment variable рдХреЛ update рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП yes рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ installer `/opt/custompython/bin` рдХреЛ `PATH` environment variable рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред
+
+рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
+
+```plaintext
+/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin
+```
+
+рдЗрд╕ рддрд░рд╣, рдЬрдм рдЖрдк terminal рдореЗрдВ `python` type рдХрд░рддреЗ рд╣реИрдВ, рддреЛ system Python program рдХреЛ `/opt/custompython/bin` (рдЖрдЦрд┐рд░реА directory) рдореЗрдВ рдвреВрдВрдвреЗрдЧрд╛ рдФрд░ рдЙрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
+
+////
+
+//// tab | Windows
+
+рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк Python install рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ `C:\opt\custompython\bin` directory рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
+
+рдЕрдЧрд░ рдЖрдк `PATH` environment variable рдХреЛ update рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП yes рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ installer `C:\opt\custompython\bin` рдХреЛ `PATH` environment variable рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред
+
+```plaintext
+C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin
+```
+
+рдЗрд╕ рддрд░рд╣, рдЬрдм рдЖрдк terminal рдореЗрдВ `python` type рдХрд░рддреЗ рд╣реИрдВ, рддреЛ system Python program рдХреЛ `C:\opt\custompython\bin` (рдЖрдЦрд┐рд░реА directory) рдореЗрдВ рдвреВрдВрдвреЗрдЧрд╛ рдФрд░ рдЙрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
+
+////
+
+рддреЛ, рдЕрдЧрд░ рдЖрдк type рдХрд░рддреЗ рд╣реИрдВ:
+
+<div class="termy">
+
+```console
+$ python
+```
+
+</div>
+
+//// tab | Linux, macOS
+
+System `/opt/custompython/bin` рдореЗрдВ `python` program рдХреЛ **рдвреВрдВрдвреЗрдЧрд╛** рдФрд░ рдЙрд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред
+
+рдпрд╣ рд▓рдЧрднрдЧ рдРрд╕рд╛ type рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛:
+
+<div class="termy">
+
+```console
+$ /opt/custompython/bin/python
+```
+
+</div>
+
+////
+
+//// tab | Windows
+
+System `C:\opt\custompython\bin\python` рдореЗрдВ `python` program рдХреЛ **рдвреВрдВрдвреЗрдЧрд╛** рдФрд░ рдЙрд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред
+
+рдпрд╣ рд▓рдЧрднрдЧ рдРрд╕рд╛ type рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛:
+
+<div class="termy">
+
+```console
+$ C:\opt\custompython\bin\python
+```
+
+</div>
+
+////
+
+рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА [Virtual Environments](virtual-environments.md) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред
+
+## рдирд┐рд╖реНрдХрд░реНрд╖ { #conclusion }
+
+рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ basic рд╕рдордЭ рдорд┐рд▓ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ **environment variables** рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ Python рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
+
+рдЖрдк рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ [Wikipedia for Environment Variable](https://en.wikipedia.org/wiki/Environment_variable) рдореЗрдВ рднреА рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рддреБрд░рдВрдд рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ environment variables рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рдФрд░ applicable рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк developing рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ scenarios рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд▓реЗ section рдореЗрдВ, [Virtual Environments](virtual-environments.md) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреАред
--- /dev/null
+# рдорджрдж { #help }
+
+рдХреНрдпрд╛ рдЖрдк FastAPI рдХреА рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ FastAPI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорджрдж рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
+
+рдорджрдж рдХрд░рдиреЗ рдФрд░ рдорджрдж рдкрд╛рдиреЗ рдХреЗ рдмрд╣реБрдд рд╕рд░рд▓ рддрд░реАрдХреЗ рд╣реИрдВред
+
+## newsletter рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ { #subscribe-to-the-newsletter }
+
+рдЖрдк (рдХрднреА-рдХрднрд╛рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ) [**FastAPI and friends** newsletter](newsletter.md) рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдЗрди рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рдЕрдкрдбреЗрдЯ рд░рд╣реЗрдВ:
+
+* FastAPI рдФрд░ friends рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦрдмрд░реЗрдВ ЁЯЪА
+* рдЧрд╛рдЗрдбреНрд╕ ЁЯУЭ
+* Features тЬи
+* Breaking changes ЁЯЪи
+* рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕ тЬЕ
+
+## FastAPI рдХреЛ рдСрдирд▓рд╛рдЗрди рдлрд╝реЙрд▓реЛ рдХрд░реЗрдВ { #follow-fastapi-online }
+
+рдЖрдк **FastAPI** рдХреЛ рдХрдИ рдЬрдЧрд╣реЛрдВ рдкрд░ рдСрдирд▓рд╛рдЗрди рдлрд╝реЙрд▓реЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* [**X / Twitter** рдкрд░ @fastapi](https://x.com/fastapi)
+* [**Bluesky** рдкрд░ @fastapi.tiangolo.com](https://bsky.app/profile/fastapi.tiangolo.com)
+* [**LinkedIn** рдкрд░ FastAPI](https://www.linkedin.com/company/fastapi/)
+
+## GitHub рдореЗрдВ **FastAPI** рдХреЛ Star рдХрд░реЗрдВ { #star-fastapi-in-github }
+
+рдЖрдк GitHub рдореЗрдВ FastAPI рдХреЛ "star" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдКрдкрд░ рджрд╛рдИрдВ рдУрд░ star рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). тнРя╕П
+
+Star рдЬреЛрдбрд╝рдиреЗ рд╕реЗ, рдЕрдиреНрдп users рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдвреВрдВрдв рдкрд╛рдПрдВрдЧреЗ рдФрд░ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИред
+
+## Releases рдХреЗ рд▓рд┐рдП GitHub repository рдХреЛ Watch рдХрд░реЗрдВ { #watch-the-github-repository-for-releases }
+
+рдЖрдк GitHub рдореЗрдВ FastAPI рдХреЛ "watch" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдКрдкрд░ рджрд╛рдИрдВ рдУрд░ "watch" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). ЁЯСА
+
+рд╡рд╣рд╛рдБ рдЖрдк "Releases only" рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред
+
+рдРрд╕рд╛ рдХрд░рдиреЗ рдкрд░, рдЬрдм рднреА bug fixes рдФрд░ рдирдП features рдХреЗ рд╕рд╛рде **FastAPI** рдХреА рдХреЛрдИ рдирдИ release (рдПрдХ рдирдпрд╛ version) рдЖрдПрдЧреА, рдЖрдкрдХреЛ notifications (рдЖрдкрдХреЗ email рдореЗрдВ) рдорд┐рд▓реЗрдВрдЧреЗред
+
+## рд▓реЗрдЦрдХ рдХреЛ рдлрд╝реЙрд▓реЛ рдХрд░реЗрдВ { #follow-the-author }
+
+рдЖрдк [рдореБрдЭреЗ (Sebasti├бn Ram├нrez / `tiangolo`)](https://tiangolo.com), рд▓реЗрдЦрдХ рдХреЛ рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдлрд╝реЙрд▓реЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ FastAPI рдФрд░ friends рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрдмрд░реЗрдВ рд╣реЛрдВ рддреЛ рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓реЗ:
+
+* [**GitHub** рдкрд░ @tiangolo](https://github.com/tiangolo).
+* [**X (Twitter)** рдкрд░ @tiangolo](https://x.com/tiangolo)
+* [**Bluesky** рдкрд░ @tiangolo.com](https://bsky.app/profile/tiangolo.com)
+* [**LinkedIn** рдкрд░ @tiangolo](https://www.linkedin.com/in/tiangolo/).
+
+## GitHub рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░реЗрдВ { #help-others-with-questions-in-github }
+
+рдЖрдк [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered) рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рдкрд╣рд▓реЗ рд╕реЗ рдкрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред ЁЯдУ
+
+рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЙрдирдХреА рдорджрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ [FastAPI Expert](fastapi-people.md#fastapi-experts) рдмрди рдЬрд╛рдПрдВрдЧреЗред ЁЯОЙ
+
+рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИ: рд╡рд┐рдирдореНрд░ рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред ЁЯдЧ
+
+### рдорджрдж рдХреИрд╕реЗ рдХрд░реЗрдВ { #how-to-help }
+
+рдпрд╣рд╛рдБ [рдорджрдж рдХреИрд╕реЗ рдХрд░реЗрдВ рд╡рд╛рд▓реА рдЧрд╛рдЗрдб](https://tiangolo.com/open-source/help/#help-others-with-questions-in-github) рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
+
+## рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ { #ask-questions }
+
+рдЖрдк GitHub repository рдореЗрдВ [рдПрдХ рдирдпрд╛ рдкреНрд░рд╢реНрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ](https://github.com/fastapi/fastapi/discussions/new?category=questions), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+* рдХреЛрдИ **рдкреНрд░рд╢реНрди** рдкреВрдЫреЗрдВ рдпрд╛ рдХрд┐рд╕реА **рд╕рдорд╕реНрдпрд╛** рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫреЗрдВред
+* рдХреЛрдИ рдирдпрд╛ **feature** рд╕реБрдЭрд╛рдПрдБред
+
+## Chat рд╕реЗ рдЬреБрдбрд╝реЗрдВ { #join-the-chat }
+
+ЁЯСе [Discord chat server](https://discord.gg/VQjSZaeJmf) ЁЯСе рд╕реЗ рдЬреБрдбрд╝реЗрдВ рдФрд░ FastAPI community рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ GitHub Discussions рдореЗрдВ рдкреВрдЫреЗрдВ, рд╡рд╣рд╛рдБ рдЖрдкрдХреЛ рдорджрдж рдорд┐рд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╣реАрдВ рдмреЗрд╣рддрд░ рд╣реИред
+
+Chat рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред
+
+///
+
+### рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП Chat рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ { #dont-use-the-chat-for-questions }
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ chats рдЕрдзрд┐рдХ "рдореБрдХреНрдд рдмрд╛рддрдЪреАрдд" рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЖрдкрдХреЛ рдЙрддреНрддрд░ рди рдорд┐рд▓реЗрдВред
+
+GitHub рдореЗрдВ, template рдЖрдкрдХреЛ рд╕рд╣реА рдкреНрд░рд╢реНрди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрддреНрддрд░ рдкрд╛ рд╕рдХреЗрдВ, рдпрд╛ рдкреВрдЫрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рднреА рд╣рд▓ рдХрд░ рд╕рдХреЗрдВред
+
+Chat systems рдореЗрдВ рдмрд╛рддрдЪреАрдд GitHub рдЬрд┐рддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ searchable рднреА рдирд╣реАрдВ рд╣реЛрддреА, рд╡реЗ рдЦреЛ рдЬрд╛рддреА рд╣реИрдВред
--- /dev/null
+# рд╕реАрдЦреЗрдВ { #learn }
+
+рдпрд╣рд╛рдБ **FastAPI** рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ section рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВред
+
+рдЖрдк рдЗрд╕реЗ FastAPI рд╕реАрдЦрдиреЗ рдХрд╛ рдПрдХ **book**, рдПрдХ **course**, **рдЖрдзрд┐рдХрд╛рд░рд┐рдХ** рдФрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред ЁЯШО
--- /dev/null
+# Background Tasks { #background-tasks }
+
+рдЖрдк background tasks define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ response рд▓реМрдЯрд╛рдиреЗ рдХреЗ *рдмрд╛рдж* рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред
+
+рдпрд╣ рдЙрди operations рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ request рдХреЗ рдмрд╛рдж рд╣реЛрдирд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди client рдХреЛ response рдкрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ operation рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдиреЗ рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреАред
+
+рдЗрд╕рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
+
+* рдХреЛрдИ action рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреЗрдЬреЗ рдЧрдП email notifications:
+ * рдХреНрдпреЛрдВрдХрд┐ email server рд╕реЗ connect рдХрд░рдирд╛ рдФрд░ email рднреЗрдЬрдирд╛ рдЖрдо рддреМрд░ рдкрд░ "slow" (рдХрдИ seconds) рд╣реЛрддрд╛ рд╣реИ, рдЖрдк response рддреБрд░рдВрдд рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ email notification рдХреЛ background рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
+* data process рдХрд░рдирд╛:
+ * рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЛ рдПрдХ file рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА slow process рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реИ, рдЖрдк "Accepted" (HTTP 202) рдХрд╛ response рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ file рдХреЛ background рдореЗрдВ process рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+## `BackgroundTasks` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-backgroundtasks }
+
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, `BackgroundTasks` import рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА *path operation function* рдореЗрдВ `BackgroundTasks` рдХреА type declaration рдХреЗ рд╕рд╛рде рдПрдХ parameter define рдХрд░реЗрдВ:
+
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[1,13] *}
+
+**FastAPI** рдЖрдкрдХреЗ рд▓рд┐рдП `BackgroundTasks` type рдХрд╛ object рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдЙрд╕ parameter рдХреЗ рд░реВрдк рдореЗрдВ pass рдХрд░реЗрдЧрд╛ред
+
+## task function рдмрдирд╛рдПрдБ { #create-a-task-function }
+
+background task рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ function рдмрдирд╛рдПрдБред
+
+рдпрд╣ рдмрд╕ рдПрдХ standard function рд╣реИ рдЬреЛ parameters receive рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+
+рдпрд╣ `async def` рдпрд╛ normal `def` function рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, **FastAPI** рдЬрд╛рдирддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ handle рдХрд░рдирд╛ рд╣реИред
+
+рдЗрд╕ case рдореЗрдВ, task function рдПрдХ file рдореЗрдВ рд▓рд┐рдЦреЗрдЧрд╛ (email рднреЗрдЬрдиреЗ рдХрд╛ simulation рдХрд░рддреЗ рд╣реБрдП)ред
+
+рдФрд░ рдХреНрдпреЛрдВрдХрд┐ write operation `async` рдФрд░ `await` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рд╣рдо function рдХреЛ normal `def` рдХреЗ рд╕рд╛рде define рдХрд░рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[6:9] *}
+
+## background task рдЬреЛрдбрд╝реЗрдВ { #add-the-background-task }
+
+рдЕрдкрдиреА *path operation function* рдХреЗ рдЕрдВрджрд░, рдЕрдкрдиреА task function рдХреЛ *background tasks* object рдореЗрдВ method `.add_task()` рдХреЗ рд╕рд╛рде pass рдХрд░реЗрдВ:
+
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[14] *}
+
+`.add_task()` arguments рдХреЗ рд░реВрдк рдореЗрдВ receive рдХрд░рддрд╛ рд╣реИ:
+
+* background рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ task function (`write_notification`)ред
+* arguments рдХреА рдХреЛрдИ рднреА sequence рдЬреЛ order рдореЗрдВ task function рдХреЛ pass рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП (`email`)ред
+* рдХреЛрдИ рднреА keyword arguments рдЬреЛ task function рдХреЛ pass рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП (`message="some notification"`)ред
+
+## Dependency Injection { #dependency-injection }
+
+`BackgroundTasks` рдХрд╛ рдЙрдкрдпреЛрдЧ dependency injection system рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдХрдИ levels рдкрд░ `BackgroundTasks` type рдХрд╛ parameter declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдХрд┐рд╕реА *path operation function* рдореЗрдВ, dependency (dependable) рдореЗрдВ, sub-dependency рдореЗрдВ, рдЖрджрд┐ред
+
+**FastAPI** рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╣рд░ case рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ same object рдХреЛ рдХреИрд╕реЗ reuse рдХрд░рдирд╛ рд╣реИ, рддрд╛рдХрд┐ рд╕рднреА background tasks merge рд╣реЛ рдЬрд╛рдПрдБ рдФрд░ рдмрд╛рдж рдореЗрдВ background рдореЗрдВ run рд╣реЛрдВ:
+
+
+{* ../../docs_src/background_tasks/tutorial002_an_py310.py hl[13,15,22,25] *}
+
+
+рдЗрд╕ example рдореЗрдВ, response рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ *рдмрд╛рдж* messages `log.txt` file рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рдПрдБрдЧреЗред
+
+рдЕрдЧрд░ request рдореЗрдВ рдХреЛрдИ query рдереА, рддреЛ рдЙрд╕реЗ рдПрдХ background task рдореЗрдВ log рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+рдФрд░ рдлрд┐рд░ *path operation function* рдкрд░ generate рд╣реБрдЖ рдПрдХ рдФрд░ background task `email` path parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ message рд▓рд┐рдЦреЗрдЧрд╛ред
+
+## Technical Details { #technical-details }
+
+class `BackgroundTasks` рд╕реАрдзреЗ [`starlette.background`](https://www.starlette.dev/background/) рд╕реЗ рдЖрддреА рд╣реИред
+
+рдЗрд╕реЗ рд╕реАрдзреЗ FastAPI рдореЗрдВ import/include рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ `fastapi` рд╕реЗ import рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдЧрд▓рддреА рд╕реЗ `starlette.background` рд╕реЗ alternative `BackgroundTask` (рдЕрдВрдд рдореЗрдВ `s` рдХреЗ рдмрд┐рдирд╛) import рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд╕рдХреЗрдВред
+
+рд╕рд┐рд░реНрдл `BackgroundTasks` (рдФрд░ `BackgroundTask` рдирд╣реАрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ, рдЗрд╕реЗ *path operation function* parameter рдХреЗ рд░реВрдк рдореЗрдВ use рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИ рдФрд░ **FastAPI** рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╛рдХреА рдЪреАрдЬрд╝реЗрдВ handle рдХрд░рддрд╛ рд╣реИ, рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЬреИрд╕реЗ `Request` object рдХреЛ рд╕реАрдзреЗ use рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред
+
+FastAPI рдореЗрдВ рдЕрдХреЗрд▓реЗ `BackgroundTask` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдкрдиреЗ code рдореЗрдВ object рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реБрдП Starlette `Response` return рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
+
+рдЖрдк [Background Tasks рдХреЗ рд▓рд┐рдП Starlette рдХреЗ official docs](https://www.starlette.dev/background/) рдореЗрдВ рдЕрдзрд┐рдХ details рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
+
+## рд╕рд╛рд╡рдзрд╛рдиреА { #caveat }
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ heavy background computation perform рдХрд░рдиреА рд╣реИ рдФрд░ рдпрд╣ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣ same process рджреНрд╡рд╛рд░рд╛ run рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ memory, variables, рдЖрджрд┐ share рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ), рддреЛ рдЖрдкрдХреЛ [Celery](https://docs.celeryq.dev) рдЬреИрд╕реЗ рджреВрд╕рд░реЗ рдмрдбрд╝реЗ tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд▓рд╛рдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+рдЙрдиреНрд╣реЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдЕрдзрд┐рдХ complex configurations, RabbitMQ рдпрд╛ Redis рдЬреИрд╕реЗ message/job queue manager рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдкрдХреЛ multiple processes рдореЗрдВ, рдФрд░ рдЦрд╛рд╕рдХрд░ multiple servers рдореЗрдВ, background tasks run рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЙрд╕реА **FastAPI** app рд╕реЗ variables рдФрд░ objects access рдХрд░рдиреЗ рд╣реИрдВ, рдпрд╛ рдЖрдкрдХреЛ рдЫреЛрдЯреЗ background tasks perform рдХрд░рдиреЗ рд╣реИрдВ (рдЬреИрд╕реЗ email notification рднреЗрдЬрдирд╛), рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ `BackgroundTasks` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+## Recap { #recap }
+
+background tasks рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП *path operation functions* рдФрд░ dependencies рдореЗрдВ parameters рдХреЗ рд╕рд╛рде `BackgroundTasks` import рдФрд░ use рдХрд░реЗрдВред
--- /dev/null
+# рдмрдбрд╝реЗ Applications - Multiple Files { #bigger-applications-multiple-files }
+
+рдЕрдЧрд░ рдЖрдк рдХреЛрдИ application рдпрд╛ web API рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдХрдо рд╣реА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рдПрдХ рд╣реА file рдореЗрдВ рд░рдЦ рд╕рдХреЗрдВред
+
+**FastAPI** рдЖрдкрдХреЗ application рдХреЛ structure рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ tool рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА рдкреВрд░реА flexibility рднреА рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред
+
+/// note | рдиреЛрдЯ
+
+рдЕрдЧрд░ рдЖрдк Flask рд╕реЗ рдЖрдП рд╣реИрдВ, рддреЛ рдпрд╣ Flask рдХреЗ Blueprints рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред
+
+///
+
+## рдПрдХ рдЙрджрд╛рд╣рд░рдг file structure { #an-example-file-structure }
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ file structure рд╣реИ:
+
+```
+.
+тФЬтФАтФА app
+тФВ тФЬтФАтФА __init__.py
+тФВ тФЬтФАтФА main.py
+тФВ тФЬтФАтФА dependencies.py
+тФВ тФФтФАтФА routers
+тФВ тФВ тФЬтФАтФА __init__.py
+тФВ тФВ тФЬтФАтФА items.py
+тФВ тФВ тФФтФАтФА users.py
+тФВ тФФтФАтФА internal
+тФВ тФЬтФАтФА __init__.py
+тФВ тФФтФАтФА admin.py
+```
+
+/// tip | рдЯрд┐рдк
+
+рдХрдИ `__init__.py` files рд╣реИрдВ: рд╣рд░ directory рдпрд╛ subdirectory рдореЗрдВ рдПрдХред
+
+рдпрд╣реА рдПрдХ file рд╕реЗ рджреВрд╕рд░реА file рдореЗрдВ code import рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `app/main.py` рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реА line рд╣реЛ рд╕рдХрддреА рд╣реИ:
+
+```
+from app.routers import items
+```
+
+///
+
+* `app` directory рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣реИред рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА file `app/__init__.py` рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ "Python package" рд╣реИ ("Python modules" рдХрд╛ рд╕рдВрдЧреНрд░рд╣): `app`.
+* рдЗрд╕рдореЗрдВ рдПрдХ `app/main.py` file рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ Python package (рдПрдХ рдРрд╕реА directory рдЬрд┐рд╕рдореЗрдВ `__init__.py` file рд╣реИ) рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдпрд╣ рдЙрд╕ package рдХрд╛ рдПрдХ "module" рд╣реИ: `app.main`.
+* рдПрдХ `app/dependencies.py` file рднреА рд╣реИ, `app/main.py` рдХреА рддрд░рд╣, рдпрд╣ рдПрдХ "module" рд╣реИ: `app.dependencies`.
+* рдПрдХ subdirectory `app/routers/` рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдФрд░ file `__init__.py` рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ "Python subpackage" рд╣реИ: `app.routers`.
+* file `app/routers/items.py` рдПрдХ package, `app/routers/`, рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ submodule рд╣реИ: `app.routers.items`.
+* `app/routers/users.py` рдХреЗ рд╕рд╛рде рднреА рд╡рд╣реА рд╣реИ, рдпрд╣ рдПрдХ рдФрд░ submodule рд╣реИ: `app.routers.users`.
+* рдПрдХ subdirectory `app/internal/` рднреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдФрд░ file `__init__.py` рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдФрд░ "Python subpackage" рд╣реИ: `app.internal`.
+* рдФрд░ file `app/internal/admin.py` рдПрдХ рдФрд░ submodule рд╣реИ: `app.internal.admin`.
+
+<img src="/img/tutorial/bigger-applications/package.drawio.svg">
+
+рд╡рд╣реА file structure comments рдХреЗ рд╕рд╛рде:
+
+```bash
+.
+тФЬтФАтФА app # "app" рдПрдХ Python package рд╣реИ
+тФВ┬а┬а тФЬтФАтФА __init__.py # рдпрд╣ file "app" рдХреЛ "Python package" рдмрдирд╛рддреА рд╣реИ
+тФВ┬а┬а тФЬтФАтФА main.py # "main" module, рдЬреИрд╕реЗ import app.main
+тФВ┬а┬а тФЬтФАтФА dependencies.py # "dependencies" module, рдЬреИрд╕реЗ import app.dependencies
+тФВ┬а┬а тФФтФАтФА routers # "routers" рдПрдХ "Python subpackage" рд╣реИ
+тФВ┬а┬а тФВ тФЬтФАтФА __init__.py # "routers" рдХреЛ "Python subpackage" рдмрдирд╛рддрд╛ рд╣реИ
+тФВ┬а┬а тФВ тФЬтФАтФА items.py # "items" submodule, рдЬреИрд╕реЗ import app.routers.items
+тФВ┬а┬а тФВ тФФтФАтФА users.py # "users" submodule, рдЬреИрд╕реЗ import app.routers.users
+тФВ┬а┬а тФФтФАтФА internal # "internal" рдПрдХ "Python subpackage" рд╣реИ
+тФВ┬а┬а тФЬтФАтФА __init__.py # "internal" рдХреЛ "Python subpackage" рдмрдирд╛рддрд╛ рд╣реИ
+тФВ┬а┬а тФФтФАтФА admin.py # "admin" submodule, рдЬреИрд╕реЗ import app.internal.admin
+```
+
+## `APIRouter` { #apirouter }
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рд╕рд┐рд░реНрдл users рдХреЛ handle рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dedicated file `/app/routers/users.py` рдкрд░ submodule рд╣реИред
+
+рдЖрдк рдЕрдкрдиреЗ users рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд *path operations* рдХреЛ рдмрд╛рдХреА code рд╕реЗ рдЕрд▓рдЧ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░рд╣реЗред
+
+рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЙрд╕реА **FastAPI** application/web API рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рдпрд╣ рдЙрд╕реА "Python Package" рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ)ред
+
+рдЖрдк рдЙрд╕ module рдХреЗ рд▓рд┐рдП *path operations* `APIRouter` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
+
+### `APIRouter` import рдХрд░реЗрдВ { #import-apirouter }
+
+рдЖрдк рдЗрд╕реЗ import рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реА рддрд░рд╣ рдПрдХ "instance" рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк `FastAPI` class рдХреЗ рд╕рд╛рде рдХрд░рддреЗ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/users.py hl[1,3] title["app/routers/users.py"] *}
+
+### `APIRouter` рдХреЗ рд╕рд╛рде *Path operations* { #path-operations-with-apirouter }
+
+рдФрд░ рдлрд┐рд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ *path operations* declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
+
+рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдЖрдк `FastAPI` class рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/users.py hl[6,11,16] title["app/routers/users.py"] *}
+
+рдЖрдк `APIRouter` рдХреЛ рдПрдХ "mini `FastAPI`" class рдХреА рддрд░рд╣ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред
+
+рд╕рднреА рд╡рд╣реА options рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
+
+рд╕рднреА рд╡рд╣реА `parameters`, `responses`, `dependencies`, `tags`, рдЖрджрд┐ред
+
+/// tip | рдЯрд┐рдк
+
+рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, variable рдХреЛ `router` рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдИ рднреА рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+рд╣рдо рдЗрд╕ `APIRouter` рдХреЛ main `FastAPI` app рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, dependencies рдФрд░ рдПрдХ рдФрд░ `APIRouter` рджреЗрдЦреЗрдВред
+
+## Dependencies { #dependencies }
+
+рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ application рдХреЗ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ dependencies рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреАред
+
+рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЙрдирдХреЗ рдЕрдкрдиреЗ `dependencies` module (`app/dependencies.py`) рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред
+
+рдЕрдм рд╣рдо рдПрдХ custom `X-Token` header рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ dependency рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/dependencies.py hl[3,6:8] title["app/dependencies.py"] *}
+
+/// tip | рдЯрд┐рдк
+
+рд╣рдо рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ header рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
+
+рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ integrated [Security utilities](security/index.md) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдВрдЧреЗред
+
+///
+
+## `APIRouter` рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ module { #another-module-with-apirouter }
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЗ application рд╕реЗ "items" рдХреЛ handle рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dedicated endpoints рднреА `app/routers/items.py` module рдореЗрдВ рд╣реИрдВред
+
+рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирдХреЗ рд▓рд┐рдП *path operations* рд╣реИрдВ:
+
+* `/items/`
+* `/items/{item_id}`
+
+рдпрд╣ рд╕рдм `app/routers/users.py` рдЬреИрд╕реА рд╣реА structure рд╣реИред
+
+рд▓реЗрдХрд┐рди рд╣рдо рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ smart рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ code рдХреЛ рдереЛрдбрд╝рд╛ simplify рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ module рдХреЗ рд╕рднреА *path operations* рдореЗрдВ рд╡рд╣реА рд╣реИрдВ:
+
+* Path `prefix`: `/items`.
+* `tags`: (рд╕рд┐рд░реНрдл рдПрдХ tag: `items`).
+* рдЕрддрд┐рд░рд┐рдХреНрдд `responses`.
+* `dependencies`: рдЙрди рд╕рднреА рдХреЛ рд╡рд╣ `X-Token` dependency рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдордиреЗ рдмрдирд╛рдИ рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдм рдкреНрд░рддреНрдпреЗрдХ *path operation* рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕реЗ `APIRouter` рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[5:10,16,21] title["app/routers/items.py"] *}
+
+рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ *path operation* рдХрд╛ path `/` рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ:
+
+```Python hl_lines="1"
+@router.get("/{item_id}")
+async def read_item(item_id: str):
+ ...
+```
+
+...prefix рдореЗрдВ рдЕрдВрдд рдореЗрдВ `/` рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ prefix `/items` рд╣реИред
+
+рд╣рдо `tags` рдХреА list рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд `responses` рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ router рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА *path operations* рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреЗред
+
+рдФрд░ рд╣рдо `dependencies` рдХреА list рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ router рдХреЗ рд╕рднреА *path operations* рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рдПрдЧреА рдФрд░ рдЙрди рдкрд░ рдХрд┐рдП рдЧрдП рд╣рд░ request рдХреЗ рд▓рд┐рдП execute/solve рдХреА рдЬрд╛рдПрдЧреАред
+
+/// tip | рдЯрд┐рдк
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐, [*path operation decorators* рдореЗрдВ dependencies](dependencies/dependencies-in-path-operation-decorators.md) рдХреА рддрд░рд╣ рд╣реА, рдЖрдкрдХреЗ *path operation function* рдХреЛ рдХреЛрдИ value pass рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред
+
+///
+
+рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ item paths рдЕрдм рдпреЗ рд╣реИрдВ:
+
+* `/items/`
+* `/items/{item_id}`
+
+...рдЬреИрд╕рд╛ рд╣рдордиреЗ рдЪрд╛рд╣рд╛ рдерд╛ред
+
+* рдЙрдиреНрд╣реЗрдВ tags рдХреА list рд╕реЗ mark рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА string `"items"` рд╣реЛрдЧреАред
+ * рдпреЗ "tags" automatic interactive documentation systems (OpenAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИрдВред
+* рдЙрди рд╕рднреА рдореЗрдВ predefined `responses` рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
+* рдЗрди рд╕рднреА *path operations* рд╕реЗ рдкрд╣рд▓реЗ `dependencies` рдХреА list evaluate/execute рдХреА рдЬрд╛рдПрдЧреАред
+ * рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА specific *path operation* рдореЗрдВ рднреА dependencies declare рдХрд░рддреЗ рд╣реИрдВ, **рддреЛ рд╡реЗ рднреА execute рд╣реЛрдВрдЧреА**ред
+ * router dependencies рдкрд╣рд▓реЗ execute рд╣реЛрддреА рд╣реИрдВ, рдлрд┐рд░ decorator рдореЗрдВ [`dependencies`](dependencies/dependencies-in-path-operation-decorators.md), рдФрд░ рдлрд┐рд░ normal parameter dependenciesред
+ * рдЖрдк [`Security` dependencies with `scopes`](../advanced/security/oauth2-scopes.md) рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// tip | рдЯрд┐рдк
+
+`APIRouter` рдореЗрдВ `dependencies` рд╣реЛрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, *path operations* рдХреЗ рдкреВрд░реЗ group рдХреЗ рд▓рд┐рдП authentication require рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рднрд▓реЗ рд╣реА dependencies рдЙрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ рдореЗрдВ individually рди рдЬреЛрдбрд╝реА рдЧрдИ рд╣реЛрдВред
+
+///
+
+/// tip | рдЯрд┐рдк
+
+`prefix`, `tags`, `responses`, рдФрд░ `dependencies` parameters (рдХрдИ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреА рддрд░рд╣) **FastAPI** рдХреА рдПрдХ feature рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ code duplication рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред
+
+///
+
+### dependencies import рдХрд░реЗрдВ { #import-the-dependencies }
+
+рдпрд╣ code `app.routers.items` module, file `app/routers/items.py` рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред
+
+рдФрд░ рд╣рдореЗрдВ dependency function `app.dependencies` module, file `app/dependencies.py` рд╕реЗ рд▓реЗрдиреА рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП рд╣рдо dependencies рдХреЗ рд▓рд┐рдП `..` рдХреЗ рд╕рд╛рде relative import рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[3] title["app/routers/items.py"] *}
+
+#### Relative imports рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ { #how-relative-imports-work }
+
+/// tip | рдЯрд┐рдк
+
+рдЕрдЧрд░ рдЖрдк рдкреВрд░реА рддрд░рд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ imports рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рд╡рд╛рд▓реЗ рдЕрдЧрд▓реЗ section рдкрд░ рдЬрд╛рдПрдБред
+
+///
+
+рдПрдХ single dot `.`, рдЬреИрд╕реЗ:
+
+```Python
+from .dependencies import get_token_header
+```
+
+рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛:
+
+* рдЙрд╕реА package рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ module (file `app/routers/items.py`) рд░рд╣рддрд╛ рд╣реИ (directory `app/routers/`)...
+* module `dependencies` рдвреВрдБрдврдирд╛ (`app/routers/dependencies.py` рдкрд░ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ file)...
+* рдФрд░ рдЙрд╕рд╕реЗ, function `get_token_header` import рдХрд░рдирд╛ред
+
+рд▓реЗрдХрд┐рди рд╡рд╣ file рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реА dependencies `app/dependencies.py` рдкрд░ рдПрдХ file рдореЗрдВ рд╣реИрдВред
+
+рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА app/file structure рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ:
+
+<img src="/img/tutorial/bigger-applications/package.drawio.svg">
+
+---
+
+рджреЛ dots `..`, рдЬреИрд╕реЗ:
+
+```Python
+from ..dependencies import get_token_header
+```
+
+рдХрд╛ рдорддрд▓рдм рд╣реИ:
+
+* рдЙрд╕реА package рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ module (file `app/routers/items.py`) рд░рд╣рддрд╛ рд╣реИ (directory `app/routers/`)...
+* parent package (directory `app/`) рдкрд░ рдЬрд╛рдирд╛...
+* рдФрд░ рд╡рд╣рд╛рдБ, module `dependencies` рдвреВрдБрдврдирд╛ (file `app/dependencies.py` рдкрд░)...
+* рдФрд░ рдЙрд╕рд╕реЗ, function `get_token_header` import рдХрд░рдирд╛ред
+
+рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! ЁЯОЙ
+
+---
+
+рдЙрд╕реА рддрд░рд╣, рдЕрдЧрд░ рд╣рдордиреЗ рддреАрди dots `...` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реЛрддрд╛, рдЬреИрд╕реЗ:
+
+```Python
+from ...dependencies import get_token_header
+```
+
+рддреЛ рдЙрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛:
+
+* рдЙрд╕реА package рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ module (file `app/routers/items.py`) рд░рд╣рддрд╛ рд╣реИ (directory `app/routers/`)...
+* parent package (directory `app/`) рдкрд░ рдЬрд╛рдирд╛...
+* рдлрд┐рд░ рдЙрд╕ package рдХреЗ parent рдкрд░ рдЬрд╛рдирд╛ (рдХреЛрдИ parent package рдирд╣реАрдВ рд╣реИ, `app` top level рд╣реИ ЁЯШ▒)...
+* рдФрд░ рд╡рд╣рд╛рдБ, module `dependencies` рдвреВрдБрдврдирд╛ (file `app/dependencies.py` рдкрд░)...
+* рдФрд░ рдЙрд╕рд╕реЗ, function `get_token_header` import рдХрд░рдирд╛ред
+
+рдпрд╣ `app/` рдХреЗ рдКрдкрд░ рдХрд┐рд╕реА package рдХреЛ refer рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреА рдЕрдкрдиреА file `__init__.py` рдЖрджрд┐ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрд╕рд╕реЗ error рдЖрдПрдЧрд╛ред ЁЯЪи
+
+рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрдкрдиреЗ apps рдореЗрдВ relative imports рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡реЗ рдХрд┐рддрдиреЗ рднреА complex рд╣реЛрдВред ЁЯдУ
+
+### рдХреБрдЫ custom `tags`, `responses`, рдФрд░ `dependencies` рдЬреЛрдбрд╝реЗрдВ { #add-some-custom-tags-responses-and-dependencies }
+
+рд╣рдо рдкреНрд░рддреНрдпреЗрдХ *path operation* рдореЗрдВ prefix `/items` рдпрд╛ `tags=["items"]` рдирд╣реАрдВ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ `APIRouter` рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА _рдЕрдзрд┐рдХ_ `tags` рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА specific *path operation* рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЙрд╕ *path operation* рдХреЗ рд▓рд┐рдП specific рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд `responses` рднреА:
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[30:31] title["app/routers/items.py"] *}
+
+/// tip | рдЯрд┐рдк
+
+рдЗрд╕ рдЖрдЦрд┐рд░реА path operation рдореЗрдВ tags рдХрд╛ combination рд╣реЛрдЧрд╛: `["items", "custom"]`ред
+
+рдФрд░ documentation рдореЗрдВ рдЗрд╕рдХреЗ рджреЛрдиреЛрдВ responses рднреА рд╣реЛрдВрдЧреЗ, рдПрдХ `404` рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ `403` рдХреЗ рд▓рд┐рдПред
+
+///
+
+## рдореБрдЦреНрдп `FastAPI` { #the-main-fastapi }
+
+рдЕрдм, `app/main.py` рдкрд░ module рджреЗрдЦреЗрдВред
+
+рдпрд╣реАрдВ рдЖрдк `FastAPI` class import рдФрд░ use рдХрд░рддреЗ рд╣реИрдВред
+
+рдпрд╣ рдЖрдкрдХреЗ application рдХреА main file рд╣реЛрдЧреА рдЬреЛ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддреА рд╣реИред
+
+рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЕрдзрд┐рдХрддрд░ logic рдЕрдм рдЕрдкрдиреЗ-рдЕрдкрдиреЗ specific module рдореЗрдВ рд░рд╣реЗрдЧрд╛, main file рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧреАред
+
+### `FastAPI` import рдХрд░реЗрдВ { #import-fastapi }
+
+рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ `FastAPI` class import рдФрд░ create рдХрд░рддреЗ рд╣реИрдВред
+
+рдФрд░ рд╣рдо [global dependencies](dependencies/global-dependencies.md) рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ `APIRouter` рдХреЗ рд▓рд┐рдП dependencies рдХреЗ рд╕рд╛рде combine рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *}
+
+### `APIRouter` import рдХрд░реЗрдВ { #import-the-apirouter }
+
+рдЕрдм рд╣рдо рдЙрди рдЕрдиреНрдп submodules рдХреЛ import рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ `APIRouter`s рд╣реИрдВ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[4:5] title["app/main.py"] *}
+
+рдХреНрдпреЛрдВрдХрд┐ files `app/routers/users.py` рдФрд░ `app/routers/items.py` рдРрд╕реЗ submodules рд╣реИрдВ рдЬреЛ рдЙрд╕реА Python package `app` рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рд╣рдо "relative imports" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ import рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП single dot `.` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+### importing рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ { #how-the-importing-works }
+
+section:
+
+```Python
+from .routers import items, users
+```
+
+рдХрд╛ рдорддрд▓рдм рд╣реИ:
+
+* рдЙрд╕реА package рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ module (file `app/main.py`) рд░рд╣рддрд╛ рд╣реИ (directory `app/`)...
+* subpackage `routers` рдвреВрдБрдврдирд╛ (directory `app/routers/` рдкрд░)...
+* рдФрд░ рдЙрд╕рд╕реЗ, submodule `items` (file `app/routers/items.py` рдкрд░) рдФрд░ `users` (file `app/routers/users.py` рдкрд░) import рдХрд░рдирд╛...
+
+module `items` рдореЗрдВ рдПрдХ variable `router` (`items.router`) рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдордиреЗ file `app/routers/items.py` рдореЗрдВ рдмрдирд╛рдпрд╛ рдерд╛, рдпрд╣ рдПрдХ `APIRouter` object рд╣реИред
+
+рдФрд░ рдлрд┐рд░ рд╣рдо module `users` рдХреЗ рд▓рд┐рдП рднреА рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВред
+
+рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рднреА import рдХрд░ рд╕рдХрддреЗ рдереЗ:
+
+```Python
+from app.routers import items, users
+```
+
+/// note | рдиреЛрдЯ
+
+рдкрд╣рд▓рд╛ version рдПрдХ "relative import" рд╣реИ:
+
+```Python
+from .routers import items, users
+```
+
+рджреВрд╕рд░рд╛ version рдПрдХ "absolute import" рд╣реИ:
+
+```Python
+from app.routers import items, users
+```
+
+Python Packages рдФрд░ Modules рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, [Modules рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ official Python documentation](https://docs.python.org/3/tutorial/modules.html) рдкрдврд╝реЗрдВред
+
+///
+
+### рдирд╛рдореЛрдВ рдХреЗ collisions рд╕реЗ рдмрдЪреЗрдВ { #avoid-name-collisions }
+
+рд╣рдо submodule `items` рдХреЛ directly import рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЙрд╕рдХреЗ variable `router` рдХреЛ import рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред
+
+рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ submodule `users` рдореЗрдВ рднреА `router` рдирд╛рдо рдХрд╛ рдПрдХ рдФрд░ variable рд╣реИред
+
+рдЕрдЧрд░ рд╣рдордиреЗ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ import рдХрд┐рдпрд╛ рд╣реЛрддрд╛, рдЬреИрд╕реЗ:
+
+```Python
+from .routers.items import router
+from .routers.users import router
+```
+
+рддреЛ `users` рдХрд╛ `router`, `items` рд╡рд╛рд▓реЗ рдХреЛ overwrite рдХрд░ рджреЗрддрд╛ рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ use рдирд╣реАрдВ рдХрд░ рдкрд╛рддреЗред
+
+рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА file рдореЗрдВ рджреЛрдиреЛрдВ рдХреЛ use рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо submodules рдХреЛ directly import рдХрд░рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[5] title["app/main.py"] *}
+
+### `users` рдФрд░ `items` рдХреЗ рд▓рд┐рдП `APIRouter`s include рдХрд░реЗрдВ { #include-the-apirouters-for-users-and-items }
+
+рдЕрдм, submodules `users` рдФрд░ `items` рд╕реЗ `router`s include рдХрд░реЗрдВ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[10:11] title["app/main.py"] *}
+
+/// note | рдиреЛрдЯ
+
+`users.router` file `app/routers/users.py` рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж `APIRouter` рдХреЛ contain рдХрд░рддрд╛ рд╣реИред
+
+рдФрд░ `items.router` file `app/routers/items.py` рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж `APIRouter` рдХреЛ contain рдХрд░рддрд╛ рд╣реИред
+
+///
+
+`app.include_router()` рдХреЗ рд╕рд╛рде рд╣рдо рдкреНрд░рддреНрдпреЗрдХ `APIRouter` рдХреЛ main `FastAPI` application рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣ рдЙрд╕ router рдХреЗ рд╕рднреА routes рдХреЛ рдЙрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдХрд░ include рдХрд░реЗрдЧрд╛ред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+FastAPI рдореВрд▓ `APIRouter` рдФрд░ рдЙрд╕рдХреЗ `APIRoute`s рдХреЛ active рд░рдЦрддрд╛ рд╣реИ рдЬрдм router main application рдореЗрдВ include рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ custom `APIRouter` рдФрд░ `APIRoute` subclasses router include рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА participate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+/// tip | рдЯрд┐рдк
+
+routers include рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ performance рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
+
+рдЗрд╕реЗ lightweight рд╣реЛрдиреЗ рдФрд░ рд╣рд░ request рдореЗрдВ overhead рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП рдпрд╣ performance рдХреЛ affect рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред тЪб
+
+///
+
+### custom `prefix`, `tags`, `responses`, рдФрд░ `dependencies` рдХреЗ рд╕рд╛рде `APIRouter` include рдХрд░реЗрдВ { #include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies }
+
+рдЕрдм, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреА organization рдиреЗ рдЖрдкрдХреЛ `app/internal/admin.py` file рджреА рд╣реИред
+
+рдЗрд╕рдореЗрдВ рдХреБрдЫ admin *path operations* рд╡рд╛рд▓рд╛ `APIRouter` рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреА organization рдХрдИ projects рдХреЗ рдмреАрдЪ share рдХрд░рддреА рд╣реИред
+
+рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ organization рдореЗрдВ рдЕрдиреНрдп projects рдХреЗ рд╕рд╛рде shared рд╣реИ, рд╣рдо рдЗрд╕реЗ modify рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдФрд░ `prefix`, `dependencies`, `tags`, рдЖрджрд┐ directly `APIRouter` рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/internal/admin.py hl[3] title["app/internal/admin.py"] *}
+
+рд▓реЗрдХрд┐рди рд╣рдо рдлрд┐рд░ рднреА `APIRouter` include рдХрд░рддреЗ рд╕рдордп рдПрдХ custom `prefix` set рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рд╕рднреА *path operations* `/admin` рд╕реЗ рд╢реБрд░реВ рд╣реЛрдВ, рд╣рдо рдЗрд╕реЗ рдЗрд╕ project рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж `dependencies` рдХреЗ рд╕рд╛рде secure рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо `tags` рдФрд░ `responses` include рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рд╣рдо original `APIRouter` рдХреЛ modify рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╣ рд╕рдм declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрди parameters рдХреЛ `app.include_router()` рдореЗрдВ pass рдХрд░рдХреЗ:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[14:17] title["app/main.py"] *}
+
+рдЗрд╕ рддрд░рд╣, original `APIRouter` unmodified рд░рд╣реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╣реА `app/internal/admin.py` file organization рдореЗрдВ рдЕрдиреНрдп projects рдХреЗ рд╕рд╛рде рдЕрдм рднреА share рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА app рдореЗрдВ, `admin` module рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ *path operation* рдореЗрдВ рд╣реЛрдЧрд╛:
+
+* prefix `/admin`.
+* tag `admin`.
+* dependency `get_token_header`.
+* response `418`. ЁЯН╡
+
+рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА app рдореЗрдВ рдЙрд╕ `APIRouter` рдХреЛ affect рдХрд░реЗрдЧрд╛, рдЙрд╕реЗ use рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдЕрдиреНрдп code рдХреЛ рдирд╣реАрдВред
+
+рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп projects рдЙрд╕реА `APIRouter` рдХреЛ рдХрд┐рд╕реА рдЕрд▓рдЧ authentication method рдХреЗ рд╕рд╛рде use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+### рдПрдХ *path operation* include рдХрд░реЗрдВ { #include-a-path-operation }
+
+рд╣рдо рд╕реАрдзреЗ `FastAPI` app рдореЗрдВ рднреА *path operations* рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣рд╛рдБ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ... рдмрд╕ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ЁЯд╖:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[21:23] title["app/main.py"] *}
+
+рдФрд░ рдпрд╣ `app.include_router()` рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗ рдЧрдП рд╕рднреА рдЕрдиреНрдп *path operations* рдХреЗ рд╕рд╛рде рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
+
+/// note | рдмрд╣реБрдд рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+**рдиреЛрдЯ**: рдпрд╣ рдмрд╣реБрдд technical detail рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╢рд╛рдпрдж **рдмрд╕ skip** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+---
+
+`APIRouter`s "mounted" рдирд╣реАрдВ рд╣реЛрддреЗ, рд╡реЗ рдмрд╛рдХреА application рд╕реЗ isolated рдирд╣реАрдВ рд╣реЛрддреЗред
+
+рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрдирдХреЗ *path operations* рдХреЛ OpenAPI schema рдФрд░ user interfaces рдореЗрдВ include рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+FastAPI original routers рдФрд░ path operations рдХреЛ active рд░рдЦрддрд╛ рд╣реИ, рдФрд░ requests handle рдХрд░рддреЗ рд╕рдордп рдФрд░ OpenAPI generate рдХрд░рддреЗ рд╕рдордп router prefixes, dependencies, tags, responses, рдФрд░ рдЕрдиреНрдп metadata рдХреЛ combine рдХрд░рддрд╛ рд╣реИред
+
+///
+
+## `pyproject.toml` рдореЗрдВ `entrypoint` configure рдХрд░реЗрдВ { #configure-the-entrypoint-in-pyproject-toml }
+
+рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ FastAPI `app` object `app/main.py` рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ `pyproject.toml` file рдореЗрдВ `entrypoint` рдХреЛ рдЗрд╕ рддрд░рд╣ configure рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```toml
+[tool.fastapi]
+entrypoint = "app.main:app"
+```
+
+рдпрд╣ рдЗрд╕ рддрд░рд╣ import рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
+
+```python
+from app.main import app
+```
+
+рдЗрд╕ рддрд░рд╣ `fastapi` command рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдкрдХреА app рдХрд╣рд╛рдБ рдорд┐рд▓реЗрдЧреАред
+
+/// Note | рдиреЛрдЯ
+
+рдЖрдк command рдХреЛ path рднреА pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
+
+```console
+$ fastapi dev app/main.py
+```
+
+рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ `fastapi` command call рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рд╕рд╣реА path pass рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
+
+рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреНрдп tools рд╢рд╛рдпрдж рдЗрд╕реЗ рдвреВрдБрдв рди рдкрд╛рдПрдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [VS Code Extension](../editor-support.md) рдпрд╛ [FastAPI Cloud](https://fastapicloud.com), рдЗрд╕рд▓рд┐рдП `pyproject.toml` рдореЗрдВ `entrypoint` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред
+
+///
+
+## automatic API docs рдЬрд╛рдБрдЪреЗрдВ { #check-the-automatic-api-docs }
+
+рдЕрдм, рдЕрдкрдиреА app рдЪрд▓рд╛рдПрдБ:
+
+<div class="termy">
+
+```console
+$ fastapi dev
+
+<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+рдФрд░ docs рдХреЛ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) рдкрд░ рдЦреЛрд▓реЗрдВред
+
+рдЖрдк automatic API docs рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА submodules рд╕реЗ paths рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ, рд╕рд╣реА paths (рдФрд░ prefixes) рдФрд░ рд╕рд╣реА tags рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:
+
+<img src="/img/tutorial/bigger-applications/image01.png">
+
+## рдЕрд▓рдЧ-рдЕрд▓рдЧ `prefix` рдХреЗ рд╕рд╛рде рдЙрд╕реА router рдХреЛ multiple times include рдХрд░реЗрдВ { #include-the-same-router-multiple-times-with-different-prefix }
+
+рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ prefixes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ *same* router рдХреЗ рд╕рд╛рде `.include_router()` рдХреЛ multiple times рднреА use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕реА API рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ prefixes рдХреЗ рддрд╣рдд expose рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ `/api/v1` рдФрд░ `/api/latest`ред
+
+рдпрд╣ рдПрдХ advanced usage рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд╕рдЪ рдореЗрдВ рдЬрд╝рд░реВрд░рдд рди рд╣реЛ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣реЛ рддреЛ рдпрд╣ рдореМрдЬреВрдж рд╣реИред
+
+## рдПрдХ `APIRouter` рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ include рдХрд░реЗрдВ { #include-an-apirouter-in-another }
+
+рдЬрд┐рд╕ рддрд░рд╣ рдЖрдк `FastAPI` application рдореЗрдВ `APIRouter` include рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реА рддрд░рд╣ рдЖрдк рдПрдХ `APIRouter` рдХреЛ рджреВрд╕рд░реЗ `APIRouter` рдореЗрдВ include рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```Python
+router.include_router(other_router)
+```
+
+рдЖрдк рдпрд╣ `FastAPI` app рдореЗрдВ `router` include рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред FastAPI рдлрд┐рд░ рднреА `other_router` рд╕реЗ *path operations* рдХреЛ routing рдФрд░ OpenAPI рдореЗрдВ include рдХрд░реЗрдЧрд╛ред
+
+рдмрд╛рдж рдореЗрдВ routers рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП *path operations* рдкрд░ рднреА рдпрд╣реА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╡реЗ рдкрд╣рд▓реЗ рд╡рд╛рд▓реА inclusion рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА visible рд╣реЛрдВрдЧреЗред
+
+/// warning | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+router include рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж `router.routes` рдХреЛ directly mutate рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред FastAPI router inclusion рдХреЛ live рдорд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП original router рдФрд░ рдЙрд╕рдХреЗ routes routing рдФрд░ OpenAPI generation рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВред
+
+routes рдФрд░ routers рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП documented APIs рдЬреИрд╕реЗ path operation decorators рдФрд░ `.include_router()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+`router.routes` рдХреЛ рдПрдХ lower-level route tree рдХреА рддрд░рд╣ treat рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ route definitions рдФрд░ included routers рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкрд░ final path operations рдХреА flat list рдХреА рддрд░рд╣ rely рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
+
+///
--- /dev/null
+# Body - Fields { #body-fields }
+
+рдЬрд┐рд╕ рддрд░рд╣ рдЖрдк *path operation function* рдХреЗ parameters рдореЗрдВ `Query`, `Path` рдФрд░ `Body` рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд validation рдФрд░ metadata рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реА рддрд░рд╣ рдЖрдк Pydantic рдХреЗ `Field` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Pydantic models рдХреЗ рдЕрдВрджрд░ validation рдФрд░ metadata рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+## `Field` import рдХрд░реЗрдВ { #import-field }
+
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрд╕реЗ import рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
+
+{* ../../docs_src/body_fields/tutorial001_an_py310.py hl[4] *}
+
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ `Field` рдХреЛ рд╕реАрдзреЗ `pydantic` рд╕реЗ import рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, `fastapi` рд╕реЗ рдирд╣реАрдВ, рдЬреИрд╕реЗ рдмрд╛рдХреА рд╕рднреА (`Query`, `Path`, `Body`, рдЖрджрд┐) рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
+
+///
+
+## model attributes рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ { #declare-model-attributes }
+
+рдлрд┐рд░ рдЖрдк model attributes рдХреЗ рд╕рд╛рде `Field` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_fields/tutorial001_an_py310.py hl[11:14] *}
+
+`Field` рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ `Query`, `Path` рдФрд░ `Body`, рдЗрд╕рдореЗрдВ рд╡рд╣реА рд╕рднреА parameters рдЖрджрд┐ рд╣реЛрддреЗ рд╣реИрдВред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, `Query`, `Path` рдФрд░ рдЕрдиреНрдп рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЖрдЧреЗ рджреЗрдЦреЗрдВрдЧреЗ, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп `Param` class рдХреЗ subclasses рдХреЗ objects рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рдпрдВ Pydantic рдХреА `FieldInfo` class рдХрд╛ subclass рд╣реИред
+
+рдФрд░ Pydantic рдХрд╛ `Field` рднреА `FieldInfo` рдХрд╛ рдПрдХ instance рд▓реМрдЯрд╛рддрд╛ рд╣реИред
+
+`Body` рднреА рд╕реАрдзреЗ `FieldInfo` рдХреЗ subclass рдХреЗ objects рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рднреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдЬреЛ `Body` class рдХреЗ subclasses рд╣реИрдВред
+
+рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЬрдм рдЖрдк `fastapi` рд╕реЗ `Query`, `Path` рдФрд░ рдЕрдиреНрдп import рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ functions рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ classes рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
+
+///
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ type, default value рдФрд░ `Field` рд╡рд╛рд▓реЗ рд╣рд░ model рдХреЗ attribute рдХреА рд╕рдВрд░рдЪрдирд╛ *path operation function* рдХреЗ parameter рдЬреИрд╕реА рд╣реА рд╣реЛрддреА рд╣реИ, рдмрд╕ `Path`, `Query` рдФрд░ `Body` рдХреА рдЬрдЧрд╣ `Field` рд╣реЛрддрд╛ рд╣реИред
+
+///
+
+## рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝реЗрдВ { #add-extra-information }
+
+рдЖрдк `Field`, `Query`, `Body` рдЖрджрд┐ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП JSON Schema рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреАред
+
+рдЖрдк docs рдореЗрдВ рдЖрдЧреЗ examples рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╕реАрдЦрддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдиреЗрдВрдЧреЗред
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+`Field` рдХреЛ рджрд┐рдП рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд keys рдЖрдкрдХреЗ application рдХреЗ рдкрд░рд┐рдгрд╛рдореА OpenAPI schema рдореЗрдВ рднреА рдореМрдЬреВрдж рд╣реЛрдВрдЧреЗред
+рдХреНрдпреЛрдВрдХрд┐ рдпреЗ keys рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ OpenAPI specification рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ OpenAPI tools, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [OpenAPI validator](https://validator.swagger.io/), рдЖрдкрдХреЗ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП schema рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
+
+///
+
+## Recap { #recap }
+
+рдЖрдк model attributes рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд validations рдФрд░ metadata рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Pydantic рдХреЗ `Field` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд JSON Schema metadata рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП extra keyword arguments рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
--- /dev/null
+# Body - рдХрдИ Parameters { #body-multiple-parameters }
+
+рдЕрдм рдЬрдмрдХрд┐ рд╣рдордиреЗ рджреЗрдЦ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ `Path` рдФрд░ `Query` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЖрдЗрдП request body declarations рдХреЗ рдФрд░ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ рджреЗрдЦреЗрдВред
+
+## `Path`, `Query` рдФрд░ body parameters рдХреЛ рдорд┐рд▓рд╛рдПрдБ { #mix-path-query-and-body-parameters }
+
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреЗрд╢рдХ, рдЖрдк `Path`, `Query` рдФрд░ request body parameter declarations рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ **FastAPI** рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
+
+рдФрд░ рдЖрдк body parameters рдХреЛ optional рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, default рдХреЛ `None` рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ:
+
+{* ../../docs_src/body_multiple_params/tutorial001_an_py310.py hl[18:20] *}
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, body рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ `item` optional рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ default value `None` рд╣реИред
+
+///
+
+## рдХрдИ body parameters { #multiple-body-parameters }
+
+рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, *path operations* рдПрдХ JSON body рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ `Item` рдХреЗ attributes рд╣реЛрдВ, рдЬреИрд╕реЗ:
+
+```JSON
+{
+ "name": "Foo",
+ "description": "The pretender",
+ "price": 42.0,
+ "tax": 3.2
+}
+```
+
+рд▓реЗрдХрд┐рди рдЖрдк рдХрдИ body parameters рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `item` рдФрд░ `user`:
+
+{* ../../docs_src/body_multiple_params/tutorial002_py310.py hl[20] *}
+
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, **FastAPI** рдзреНрдпрд╛рди рджреЗрдЧрд╛ рдХрд┐ function рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ body parameter рд╣реИрдВ (рджреЛ parameters рд╣реИрдВ рдЬреЛ Pydantic models рд╣реИрдВ)ред
+
+рддреЛ, рдлрд┐рд░ рдпрд╣ parameter names рдХреЛ body рдореЗрдВ keys (field names) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдФрд░ рдРрд╕реА body рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛:
+
+```JSON
+{
+ "item": {
+ "name": "Foo",
+ "description": "The pretender",
+ "price": 42.0,
+ "tax": 3.2
+ },
+ "user": {
+ "username": "dave",
+ "full_name": "Dave Grohl"
+ }
+}
+```
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рднрд▓реЗ рд╣реА `item` рдХреЛ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдм рдЙрд╕рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╡рд╣ body рдХреЗ рдЕрдВрджрд░ key `item` рдХреЗ рд╕рд╛рде рд╣реЛред
+
+///
+
+**FastAPI** request рд╕реЗ automatic conversion рдХрд░реЗрдЧрд╛, рддрд╛рдХрд┐ parameter `item` рдХреЛ рдЙрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ content рдорд┐рд▓реЗ рдФрд░ `user` рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╣реЛред
+
+рдпрд╣ compound data рдХрд╛ validation рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕реЗ OpenAPI schema рдФрд░ automatic docs рдХреЗ рд▓рд┐рдП рдЙрд╕реА рддрд░рд╣ document рдХрд░реЗрдЧрд╛ред
+
+## body рдореЗрдВ рдПрдХрд▓ values { #singular-values-in-body }
+
+рдЬрд┐рд╕ рддрд░рд╣ query рдФрд░ path parameters рдХреЗ рд▓рд┐рдП extra data define рдХрд░рдиреЗ рд╣реЗрддреБ `Query` рдФрд░ `Path` рд╣реИрдВ, **FastAPI** рдПрдХ рд╕рдорд╛рди `Body` рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ model рдХреЛ extend рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЙрд╕реА body рдореЗрдВ `item` рдФрд░ `user` рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдФрд░ key `importance` рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЬреИрд╕реЗ рд╣реИ рд╡реИрд╕реЗ declare рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ single value рд╣реИ, **FastAPI** рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ query parameter рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдк **FastAPI** рдХреЛ `Body` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдПрдХ рдФрд░ body key рдХреЗ рд░реВрдк рдореЗрдВ treat рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_multiple_params/tutorial003_an_py310.py hl[23] *}
+
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, **FastAPI** рдРрд╕реА body рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛:
+
+```JSON
+{
+ "item": {
+ "name": "Foo",
+ "description": "The pretender",
+ "price": 42.0,
+ "tax": 3.2
+ },
+ "user": {
+ "username": "dave",
+ "full_name": "Dave Grohl"
+ },
+ "importance": 5
+}
+```
+
+рдлрд┐рд░ рд╕реЗ, рдпрд╣ data types рдХреЛ convert рдХрд░реЗрдЧрд╛, validate рдХрд░реЗрдЧрд╛, document рдХрд░реЗрдЧрд╛, рдЖрджрд┐ред
+
+## рдХрдИ body params рдФрд░ query { #multiple-body-params-and-query }
+
+рдмреЗрд╢рдХ, рдЖрдк рдЬрдм рднреА рдЬрд╝рд░реВрд░рдд рд╣реЛ, рдХрд┐рд╕реА рднреА body parameters рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, extra query parameters рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдХреНрдпреЛрдВрдХрд┐ default рд░реВрдк рд╕реЗ, single values рдХреЛ query parameters рдХреЗ рд░реВрдк рдореЗрдВ interpret рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ `Query` рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд╕ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```Python
+q: str | None = None
+```
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+{* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}
+
+
+/// note | рдиреЛрдЯ
+
+`Body` рдореЗрдВ рднреА рд╡рд╣реА рд╕рднреА extra validation рдФрд░ metadata parameters рд╣реИрдВ рдЬреЛ `Query`, `Path` рдФрд░ рдЕрдиреНрдп рдореЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред
+
+///
+
+## рдПрдХ single body parameter рдХреЛ embed рдХрд░реЗрдВ { #embed-a-single-body-parameter }
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ Pydantic model `Item` рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ single `item` body parameter рд╣реИред
+
+default рд░реВрдк рд╕реЗ, **FastAPI** рдлрд┐рд░ рд╕реАрдзреЗ рдЙрд╕рдХреА body рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред
+
+рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ key `item` рдХреЗ рд╕рд╛рде JSON рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗ рдФрд░ рдЙрд╕рдХреЗ рдЕрдВрджрд░ model contents рд╣реЛрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рддрдм рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк extra body parameters declare рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк special `Body` parameter `embed` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```Python
+item: Annotated[Item, Body(embed=True)]
+```
+
+рдЬреИрд╕реЗ рдХрд┐:
+
+{* ../../docs_src/body_multiple_params/tutorial005_an_py310.py hl[17] *}
+
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ **FastAPI** рдРрд╕реА body рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛:
+
+```JSON hl_lines="2"
+{
+ "item": {
+ "name": "Foo",
+ "description": "The pretender",
+ "price": 42.0,
+ "tax": 3.2
+ }
+}
+```
+
+рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
+
+```JSON
+{
+ "name": "Foo",
+ "description": "The pretender",
+ "price": 42.0,
+ "tax": 3.2
+}
+```
+
+## Recap { #recap }
+
+рдЖрдк рдЕрдкрдиреА *path operation function* рдореЗрдВ рдХрдИ body parameters рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдПрдХ request рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА body рд╣реЛ рд╕рдХрддреА рд╣реИред
+
+рд▓реЗрдХрд┐рди **FastAPI** рдЗрд╕реЗ handle рдХрд░реЗрдЧрд╛, рдЖрдкрдХреЛ рдЖрдкрдХреЗ function рдореЗрдВ рд╕рд╣реА data рджреЗрдЧрд╛, рдФрд░ *path operation* рдореЗрдВ рд╕рд╣реА schema рдХреЛ validate рдФрд░ document рдХрд░реЗрдЧрд╛ред
+
+рдЖрдк single values рдХреЛ body рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ receive рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдФрд░ рдЖрдк **FastAPI** рдХреЛ body рдХреЛ рдПрдХ key рдореЗрдВ embed рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдХреЗрд╡рд▓ рдПрдХ single parameter declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред
--- /dev/null
+# Body - Nested Models { #body-nested-models }
+
+**FastAPI** рдХреЗ рд╕рд╛рде, рдЖрдк arbitrarily deeply nested models рдХреЛ define, validate, document, рдФрд░ use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (Pydantic рдХреА рдмрджреМрд▓рдд)ред
+
+## List fields { #list-fields }
+
+рдЖрдк рдХрд┐рд╕реА attribute рдХреЛ subtype рдХреЗ рд░реВрдк рдореЗрдВ define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ Python `list`:
+
+{* ../../docs_src/body_nested_models/tutorial001_py310.py hl[12] *}
+
+рдпрд╣ `tags` рдХреЛ рдПрдХ list рдмрдирд╛ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ list рдХреЗ elements рдХрд╛ type declare рдирд╣реАрдВ рдХрд░рддрд╛ред
+
+## Type parameter рдХреЗ рд╕рд╛рде List fields { #list-fields-with-type-parameter }
+
+рд▓реЗрдХрд┐рди Python рдореЗрдВ internal types, рдпрд╛ "type parameters" рдХреЗ рд╕рд╛рде lists declare рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЦрд╛рд╕ рддрд░реАрдХрд╛ рд╣реИ:
+
+### Type parameter рдХреЗ рд╕рд╛рде `list` declare рдХрд░реЗрдВ { #declare-a-list-with-a-type-parameter }
+
+рдРрд╕реЗ types declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдореЗрдВ type parameters (internal types) рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ `list`, `dict`, `tuple`,
+internal type(s) рдХреЛ square brackets: `[` рдФрд░ `]` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "type parameters" рдХреЗ рд░реВрдк рдореЗрдВ pass рдХрд░реЗрдВ
+
+```Python
+my_list: list[str]
+```
+
+Type declarations рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдм standard Python syntax рд╣реИред
+
+Internal types рд╡рд╛рд▓реЗ model attributes рдХреЗ рд▓рд┐рдП рднреА рд╡рд╣реА standard syntax рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+рддреЛ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо `tags` рдХреЛ рдЦрд╛рд╕ рддреМрд░ рдкрд░ "strings рдХреА list" рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_nested_models/tutorial002_py310.py hl[12] *}
+
+## Set types { #set-types }
+
+рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо рдЗрд╕ рдкрд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ tags repeat рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рд╢рд╛рдпрдж unique strings рд╣реЛрдВрдЧреЗред
+
+рдФрд░ Python рдореЗрдВ unique items рдХреЗ sets рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд╕ data type рд╣реИ, `set`ред
+
+рдлрд┐рд░ рд╣рдо `tags` рдХреЛ strings рдХреЗ set рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_nested_models/tutorial003_py310.py hl[12] *}
+
+рдЗрд╕рдХреЗ рд╕рд╛рде, рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ duplicate data рд╡рд╛рд▓рд╛ request рдорд┐рд▓реЗ, рд╡рд╣ unique items рдХреЗ set рдореЗрдВ convert рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
+
+рдФрд░ рдЬрдм рднреА рдЖрдк рдЙрд╕ data рдХреЛ output рдХрд░реЗрдВрдЧреЗ, рднрд▓реЗ рд╣реА source рдореЗрдВ duplicates рд╣реЛрдВ, рд╡рд╣ unique items рдХреЗ set рдХреЗ рд░реВрдк рдореЗрдВ output рд╣реЛрдЧрд╛ред
+
+рдФрд░ рдЗрд╕реЗ рдЙрд╕реА рдЕрдиреБрд╕рд╛рд░ annotate / document рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+## Nested Models { #nested-models }
+
+Pydantic model рдХреЗ рд╣рд░ attribute рдХрд╛ рдПрдХ type рд╣реЛрддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рд╡рд╣ type рдЦреБрдж рднреА рдХреЛрдИ рджреВрд╕рд░рд╛ Pydantic model рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП, рдЖрдк рдЦрд╛рд╕ attribute names, types рдФрд░ validations рдХреЗ рд╕рд╛рде deeply nested JSON "objects" declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣ рд╕рдм, рдордирдЪрд╛рд╣реА рдЧрд╣рд░рд╛рдИ рддрдХ nested рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+### Submodel define рдХрд░реЗрдВ { #define-a-submodel }
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ `Image` model define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_nested_models/tutorial004_py310.py hl[7:9] *}
+
+### Submodel рдХреЛ type рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-the-submodel-as-a-type }
+
+рдФрд░ рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕реА attribute рдХреЗ type рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_nested_models/tutorial004_py310.py hl[18] *}
+
+рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ **FastAPI** рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреЗ body рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛:
+
+```JSON
+{
+ "name": "Foo",
+ "description": "The pretender",
+ "price": 42.0,
+ "tax": 3.2,
+ "tags": ["rock", "metal", "bar"],
+ "image": {
+ "url": "http://example.com/baz.jpg",
+ "name": "The Foo live"
+ }
+}
+```
+
+рдлрд┐рд░ рд╕реЗ, рд╕рд┐рд░реНрдл рд╡рд╣ declaration рдХрд░рдиреЗ рд╕реЗ, **FastAPI** рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ:
+
+* Editor support (completion, рдЖрджрд┐), nested models рдХреЗ рд▓рд┐рдП рднреА
+* Data conversion
+* Data validation
+* Automatic documentation
+
+## Special types рдФрд░ validation { #special-types-and-validation }
+
+`str`, `int`, `float`, рдЖрджрд┐ рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп singular types рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдзрд┐рдХ complex singular types рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ `str` рд╕реЗ inherit рдХрд░рддреЗ рд╣реИрдВред
+
+рдЖрдкрдХреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╕рднреА options рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, [Pydantic рдХрд╛ Type Overview](https://docs.pydantic.dev/latest/concepts/types/) рджреЗрдЦреЗрдВред рдЕрдЧрд▓реЗ chapter рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦреЗрдВрдЧреЗред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ `Image` model рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ `url` field рд╣реИ, рд╣рдо рдЗрд╕реЗ `str` рдХреЗ рдмрдЬрд╛рдп Pydantic рдХреЗ `HttpUrl` рдХрд╛ instance declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_nested_models/tutorial005_py310.py hl[2,8] *}
+
+String рдХреЛ valid URL рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП check рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ JSON Schema / OpenAPI рдореЗрдВ рдЙрд╕реА рддрд░рд╣ document рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+## Submodels рдХреА lists рд╡рд╛рд▓реЗ attributes { #attributes-with-lists-of-submodels }
+
+рдЖрдк Pydantic models рдХреЛ `list`, `set`, рдЖрджрд┐ рдХреЗ subtypes рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_nested_models/tutorial006_py310.py hl[18] *}
+
+рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ JSON body рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ (convert, validate, document, рдЖрджрд┐):
+
+```JSON hl_lines="11"
+{
+ "name": "Foo",
+ "description": "The pretender",
+ "price": 42.0,
+ "tax": 3.2,
+ "tags": [
+ "rock",
+ "metal",
+ "bar"
+ ],
+ "images": [
+ {
+ "url": "http://example.com/baz.jpg",
+ "name": "The Foo live"
+ },
+ {
+ "url": "http://example.com/dave.jpg",
+ "name": "The Baz"
+ }
+ ]
+}
+```
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ `images` key рдореЗрдВ рдЕрдм image objects рдХреА рдПрдХ list рд╣реИред
+
+///
+
+## Deeply nested models { #deeply-nested-models }
+
+рдЖрдк arbitrarily deeply nested models define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *}
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ `Offer` рдореЗрдВ `Item`s рдХреА рдПрдХ list рд╣реИ, рдЬрд┐рдирдореЗрдВ рдЖрдЧреЗ `Image`s рдХреА рдПрдХ optional list рд╣реИ
+
+///
+
+## Pure lists рдХреЗ bodies { #bodies-of-pure-lists }
+
+рдЕрдЧрд░ рдЬрд┐рд╕ JSON body рдХреА рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ top level value рдПрдХ JSON `array` (рдПрдХ Python `list`) рд╣реИ, рддреЛ рдЖрдк function рдХреЗ parameter рдореЗрдВ type declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрдХреБрд▓ Pydantic models рдХреА рддрд░рд╣:
+
+```Python
+images: list[Image]
+```
+
+рдЬреИрд╕реЗ рдХрд┐:
+
+{* ../../docs_src/body_nested_models/tutorial008_py310.py hl[13] *}
+
+## рд╣рд░ рдЬрдЧрд╣ editor support { #editor-support-everywhere }
+
+рдФрд░ рдЖрдкрдХреЛ рд╣рд░ рдЬрдЧрд╣ editor support рдорд┐рд▓рддрд╛ рд╣реИред
+
+Lists рдХреЗ рдЕрдВрджрд░ рдХреЗ items рдХреЗ рд▓рд┐рдП рднреА:
+
+<img src="/img/tutorial/body-nested-models/image01.png">
+
+рдЕрдЧрд░ рдЖрдк Pydantic models рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ `dict` рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ editor support рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рдерд╛ред
+
+рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЙрдирдХреА рдЪрд┐рдВрддрд╛ рднреА рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЖрдиреЗ рд╡рд╛рд▓реЗ dicts рдЕрдкрдиреЗ рдЖрдк convert рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХрд╛ output рднреА рдЕрдкрдиреЗ рдЖрдк JSON рдореЗрдВ convert рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
+
+## Arbitrary `dict`s рдХреЗ bodies { #bodies-of-arbitrary-dicts }
+
+рдЖрдк body рдХреЛ рдПрдХ `dict` рдХреЗ рд░реВрдк рдореЗрдВ рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА keys рдХрд┐рд╕реА type рдХреА рд╣реЛрдВ рдФрд░ values рдХрд┐рд╕реА рджреВрд╕рд░реЗ type рдХреАред
+
+рдЗрд╕ рддрд░рд╣, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА рдХрд┐ valid field/attribute names рдХреНрдпрд╛ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ Pydantic models рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛)ред
+
+рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк рдРрд╕реА keys receive рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗред
+
+---
+
+рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА case рд╡рд╣ рд╣реИ рдЬрдм рдЖрдк рдХрд┐рд╕реА рджреВрд╕рд░реЗ type (рдЬреИрд╕реЗ, `int`) рдХреА keys рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдпрд╣реА рд╣рдо рдпрд╣рд╛рдБ рджреЗрдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
+
+рдЗрд╕ case рдореЗрдВ, рдЖрдк рдХреЛрдИ рднреА `dict` accept рдХрд░реЗрдВрдЧреЗ, рдЬрдм рддрдХ рдХрд┐ рдЙрд╕рдореЗрдВ `float` values рд╡рд╛рд▓реА `int` keys рд╣реЛрдВ:
+
+{* ../../docs_src/body_nested_models/tutorial009_py310.py hl[7] *}
+
+/// tip | рдЯрд┐рдк
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ JSON рдХреЗрд╡рд▓ `str` рдХреЛ keys рдХреЗ рд░реВрдк рдореЗрдВ support рдХрд░рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди Pydantic рдореЗрдВ automatic data conversion рд╣реИред
+
+рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐, рднрд▓реЗ рд╣реА рдЖрдкрдХреЗ API clients рдХреЗрд╡рд▓ strings рдХреЛ keys рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдЙрди strings рдореЗрдВ pure integers рд╣реИрдВ, Pydantic рдЙрдиреНрд╣реЗрдВ convert рдФрд░ validate рдХрд░ рджреЗрдЧрд╛ред
+
+рдФрд░ `weights` рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛ `dict` receive рд╣реЛрдЧрд╛, рдЙрд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ `int` keys рдФрд░ `float` values рд╣реЛрдВрдЧреАред
+
+///
+
+## Recap { #recap }
+
+**FastAPI** рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдкрд╛рд╕ Pydantic models рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдЕрдзрд┐рдХрддрдо flexibility рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ рдЖрдкрдХрд╛ code simple, short рдФрд░ elegant рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рд╕рднреА benefits рдХреЗ рд╕рд╛рде:
+
+* Editor support (рд╣рд░ рдЬрдЧрд╣ completion!)
+* Data conversion (a.k.a. parsing / serialization)
+* Data validation
+* Schema documentation
+* Automatic docs
--- /dev/null
+# Body - рдЕрдкрдбреЗрдЯреНрд╕ { #body-updates }
+
+## `PUT` рдХреЗ рд╕рд╛рде рдмрджрд▓рдХрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ { #update-replacing-with-put }
+
+рдХрд┐рд╕реА item рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) operation рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк input data рдХреЛ рдРрд╕реЗ data рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП `jsonable_encoder` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ JSON рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдЬреИрд╕реЗ NoSQL database рдХреЗ рд╕рд╛рде)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `datetime` рдХреЛ `str` рдореЗрдВ рдмрджрд▓рдирд╛ред
+
+{* ../../docs_src/body_updates/tutorial001_py310.py hl[28:33] *}
+
+`PUT` рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕рд╛ data рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ data рдХреЛ рдмрджрд▓ рджреЗред
+
+### рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА { #warning-about-replacing }
+
+рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк item `bar` рдХреЛ `PUT` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реЗ body рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╣реЛ:
+
+```Python
+{
+ "name": "Barz",
+ "price": 3,
+ "description": None,
+}
+```
+
+рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд attribute `"tax": 20.2` рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, input model `"tax": 10.5` рдХреА default value рд▓реЗрдЧрд╛ред
+
+рдФрд░ data рдЙрд╕ "рдирдП" `tax` `10.5` рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+## `PATCH` рдХреЗ рд╕рд╛рде рдЖрдВрд╢рд┐рдХ рдЕрдкрдбреЗрдЯреНрд╕ { #partial-updates-with-patch }
+
+рдЖрдк data рдХреЛ *рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ* рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) operation рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╡рд╣реА data рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд╛рдХреА рдХреЛ рд╡реИрд╕рд╛ рд╣реА рдЫреЛрдбрд╝рддреЗ рд╣реБрдПред
+
+/// note | рдиреЛрдЯ
+
+`PATCH`, `PUT` рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдФрд░ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдФрд░ рдХрдИ teams рдЖрдВрд╢рд┐рдХ рдЕрдкрдбреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдХреЗрд╡рд▓ `PUT` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред
+
+рдЖрдк рдЗрдиреНрд╣реЗрдВ рдЬреИрд╕реЗ рдЪрд╛рд╣реЗрдВ рд╡реИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **рд╕реНрд╡рддрдВрддреНрд░** рд╣реИрдВ, **FastAPI** рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ред
+
+рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд╛рдЗрдб рдЖрдкрдХреЛ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рдЗрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред
+
+///
+
+### Pydantic рдХреЗ `exclude_unset` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-pydantics-exclude-unset-parameter }
+
+рдЕрдЧрд░ рдЖрдк рдЖрдВрд╢рд┐рдХ рдЕрдкрдбреЗрдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ Pydantic рдХреЗ model рдХреЗ `.model_dump()` рдореЗрдВ parameter `exclude_unset` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред
+
+рдЬреИрд╕реЗ `item.model_dump(exclude_unset=True)`ред
+
+рдЗрд╕рд╕реЗ рдХреЗрд╡рд▓ рдЙрд╕ data рдХреЗ рд╕рд╛рде рдПрдХ `dict` рдмрдиреЗрдЧрд╛ рдЬреЛ `item` model рдмрдирд╛рддреЗ рд╕рдордп рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, default values рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
+
+рдлрд┐рд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЙрд╕ data рдХреЗ рд╕рд╛рде рдПрдХ `dict` рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (request рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛), default values рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реБрдП:
+
+{* ../../docs_src/body_updates/tutorial002_py310.py hl[32] *}
+
+### Pydantic рдХреЗ `update` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-pydantics-update-parameter }
+
+рдЕрдм, рдЖрдк `.model_copy()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореМрдЬреВрджрд╛ model рдХреА рдПрдХ copy рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП data рд╡рд╛рд▓реЗ `dict` рдХреЗ рд╕рд╛рде `update` parameter рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЬреИрд╕реЗ `stored_item_model.model_copy(update=update_data)`:
+
+{* ../../docs_src/body_updates/tutorial002_py310.py hl[33] *}
+
+### рдЖрдВрд╢рд┐рдХ рдЕрдкрдбреЗрдЯреНрд╕ Recap { #partial-updates-recap }
+
+рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдВрд╢рд┐рдХ рдЕрдкрдбреЗрдЯреНрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк:
+
+* (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ) `PUT` рдХреЗ рдмрдЬрд╛рдп `PATCH` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+* рд╕рдВрдЧреНрд░рд╣реАрдд data рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
+* рдЙрд╕ data рдХреЛ Pydantic model рдореЗрдВ рд░рдЦреЗрдВред
+* input model рд╕реЗ default values рдХреЗ рдмрд┐рдирд╛ рдПрдХ `dict` рдмрдирд╛рдПрдБ (`exclude_unset` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
+ * рдЗрд╕ рддрд░рд╣ рдЖрдк рдХреЗрд╡рд▓ рдЙрди values рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ user рдиреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдкрдХреЗ model рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд values рдХреЛ default values рд╕реЗ override рдХрд░ рджреЗрдВред
+* рд╕рдВрдЧреНрд░рд╣реАрдд model рдХреА рдПрдХ copy рдмрдирд╛рдПрдБ, рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрд╢рд┐рдХ рдЕрдкрдбреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЙрд╕рдХреЗ attributes рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (`update` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
+* copied model рдХреЛ рдРрд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдХреА DB рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `jsonable_encoder` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
+ * рдпрд╣ model рдХреА `.model_dump()` method рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдмрджрд▓рддрд╛ рд╣реИ) рдХрд┐ values рдРрд╕реЗ data types рдореЗрдВ рд╣реЛрдВ рдЬрд┐рдиреНрд╣реЗрдВ JSON рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `datetime` рдХреЛ `str` рдореЗрдВред
+* data рдХреЛ рдЕрдкрдиреА DB рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред
+* рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ model рд▓реМрдЯрд╛рдПрдБред
+
+{* ../../docs_src/body_updates/tutorial002_py310.py hl[28:35] *}
+
+/// tip | рдЯрд┐рдк
+
+рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ HTTP `PUT` operation рдХреЗ рд╕рд╛рде рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдХрд╛ рдЙрджрд╛рд╣рд░рдг `PATCH` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЗрдиреНрд╣реАрдВ use cases рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
+
+///
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ input model рдЕрднреА рднреА validate рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк рдРрд╕реЗ рдЖрдВрд╢рд┐рдХ рдЕрдкрдбреЗрдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА attributes рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ model рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╕рднреА attributes optional рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реЛрдВ (default values рдпрд╛ `None` рдХреЗ рд╕рд╛рде)ред
+
+**рдЕрдкрдбреЗрдЯреНрд╕** рдХреЗ рд▓рд┐рдП рд╕рднреА optional values рд╡рд╛рд▓реЗ models рдФрд░ **creation** рдХреЗ рд▓рд┐рдП required values рд╡рд╛рд▓реЗ models рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк [Extra Models](extra-models.md) рдореЗрдВ рдмрддрд╛рдП рдЧрдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
--- /dev/null
+# Request Body { #request-body }
+
+рдЬрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА client (рдорд╛рди рд▓реЗрдВ, рдПрдХ browser) рд╕реЗ рдЕрдкрдиреА API рдХреЛ data рднреЗрдЬрдирд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрд╕реЗ **request body** рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВред
+
+**request** body рд╡рд╣ data рд╣реИ рдЬреЛ client рдЖрдкрдХреА API рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред **response** body рд╡рд╣ data рд╣реИ рдЬреЛ рдЖрдкрдХреА API client рдХреЛ рднреЗрдЬрддреА рд╣реИред
+
+рдЖрдкрдХреА API рдХреЛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ **response** body рднреЗрдЬрдиреА рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди clients рдХреЛ рд╣рд░ рд╕рдордп **request bodies** рднреЗрдЬрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА, рдХрднреА-рдХрднреА рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ path request рдХрд░рддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж рдХреБрдЫ query parameters рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди body рдирд╣реАрдВ рднреЗрдЬрддреЗред
+
+**request** body рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк [Pydantic](https://docs.pydantic.dev/) models рдХрд╛ рдЙрдирдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдФрд░ рд▓рд╛рднреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+Data рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: `POST` (рд╕рдмрд╕реЗ рдЖрдо), `PUT`, `DELETE` рдпрд╛ `PATCH`.
+
+`GET` request рдХреЗ рд╕рд╛рде body рднреЗрдЬрдиреЗ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ specifications рдореЗрдВ undefined рд╣реИ, рдлрд┐рд░ рднреА, FastAPI рдЗрд╕реЗ support рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдмрд╣реБрдд рдЬрдЯрд┐рд▓/рдЪрд░рдо use cases рдХреЗ рд▓рд┐рдПред
+
+рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ discouraged рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, Swagger UI рд╡рд╛рд▓реЗ interactive docs `GET` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп body рдХреЗ рд▓рд┐рдП documentation рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдБрдЧреЗ, рдФрд░ рдмреАрдЪ рдореЗрдВ рдореМрдЬреВрдж proxies рдЗрд╕реЗ support рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
+
+///
+
+## Pydantic рдХреЗ `BaseModel` рдХреЛ import рдХрд░реЗрдВ { #import-pydantics-basemodel }
+
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ `pydantic` рд╕реЗ `BaseModel` import рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
+
+{* ../../docs_src/body/tutorial001_py310.py hl[2] *}
+
+## рдЕрдкрдирд╛ data model рдмрдирд╛рдПрдБ { #create-your-data-model }
+
+рдлрд┐рд░ рдЖрдк рдЕрдкрдиреЗ data model рдХреЛ рдПрдХ class рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ `BaseModel` рд╕реЗ inherit рдХрд░рддреА рд╣реИред
+
+рд╕рднреА attributes рдХреЗ рд▓рд┐рдП standard Python types рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
+
+{* ../../docs_src/body/tutorial001_py310.py hl[5:9] *}
+
+
+Query parameters рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреА рддрд░рд╣, рдЬрдм рдХрд┐рд╕реА model attribute рдХрд╛ default value рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ required рдирд╣реАрдВ рд╣реЛрддрд╛ред рдЕрдиреНрдпрдерд╛, рд╡рд╣ required рд╣реЛрддрд╛ рд╣реИред рдЙрд╕реЗ рдХреЗрд╡рд▓ optional рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП `None` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдпрд╣ model рдЗрд╕ рддрд░рд╣ рдХрд╛ JSON "`object`" (рдпрд╛ Python `dict`) рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
+
+```JSON
+{
+ "name": "Foo",
+ "description": "An optional description",
+ "price": 45.2,
+ "tax": 3.5
+}
+```
+
+...рдХреНрдпреЛрдВрдХрд┐ `description` рдФрд░ `tax` optional рд╣реИрдВ (`None` рдХреЗ default value рдХреЗ рд╕рд╛рде), рдпрд╣ JSON "`object`" рднреА valid рд╣реЛрдЧрд╛:
+
+```JSON
+{
+ "name": "Foo",
+ "price": 45.2
+}
+```
+
+## рдЗрд╕реЗ рдПрдХ parameter рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ { #declare-it-as-a-parameter }
+
+рдЗрд╕реЗ рдЕрдкрдиреА *path operation* рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рдЬреИрд╕реЗ рдЖрдкрдиреЗ path рдФрд░ query parameters рдШреЛрд╖рд┐рдд рдХрд┐рдП рдереЗ:
+
+{* ../../docs_src/body/tutorial001_py310.py hl[16] *}
+
+...рдФрд░ рдЗрд╕рдХреЗ type рдХреЛ рдЖрдкрдХреЗ рдмрдирд╛рдП рд╣реБрдП model, `Item`, рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред
+
+## рдкрд░рд┐рдгрд╛рдо { #results }
+
+рд╕рд┐рд░реНрдл рдЙрд╕ Python type declaration рдХреЗ рд╕рд╛рде, **FastAPI** рдпрд╣ рдХрд░реЗрдЧрд╛:
+
+* request рдХреЗ body рдХреЛ JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝реЗрдЧрд╛ред
+* рд╕рдВрдмрдВрдзрд┐рдд types рдХреЛ convert рдХрд░реЗрдЧрд╛ (рдпрджрд┐ рдЬрд╝рд░реВрд░рдд рд╣реЛ)ред
+* data рдХреЛ validate рдХрд░реЗрдЧрд╛ред
+ * рдпрджрд┐ data invalid рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ error return рдХрд░реЗрдЧрд╛, рдЬреЛ рдареАрдХ-рдареАрдХ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЧрд▓рдд data рдХрд╣рд╛рдБ рдФрд░ рдХреНрдпрд╛ рдерд╛ред
+* рдЖрдкрдХреЛ рдкреНрд░рд╛рдкреНрдд data parameter `item` рдореЗрдВ рджреЗрдЧрд╛ред
+ * рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ function рдореЗрдВ `Item` type рдХрд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рднреА attributes рдФрд░ рдЙрдирдХреЗ types рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ editor support (completion, рдЖрджрд┐) рднреА рдорд┐рд▓реЗрдЧрд╛ред
+* рдЖрдкрдХреЗ model рдХреЗ рд▓рд┐рдП [JSON Schema](https://json-schema.org) definitions generate рдХрд░реЗрдЧрд╛, рдпрджрд┐ рдЖрдкрдХреЗ project рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реЛ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рдФрд░ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+* рд╡реЗ schemas generated OpenAPI schema рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдВрдЧреЗ, рдФрд░ automatic documentation <abbr title="User Interfaces - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕">UIs</abbr> рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдБрдЧреЗред
+
+## рд╕реНрд╡рдЪрд╛рд▓рд┐рдд docs { #automatic-docs }
+
+рдЖрдкрдХреЗ models рдХреЗ JSON Schemas рдЖрдкрдХреЗ OpenAPI generated schema рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдВрдЧреЗ, рдФрд░ interactive API docs рдореЗрдВ рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдБрдЧреЗ:
+
+<img src="/img/tutorial/body/image01.png">
+
+рдФрд░ рд╡реЗ API docs рдореЗрдВ рд╣рд░ рдЙрд╕ *path operation* рдХреЗ рдЕрдВрджрд░ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдБрдЧреЗ рдЬрд┐рд╕реЗ рдЙрдирдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ:
+
+<img src="/img/tutorial/body/image02.png">
+
+## Editor support { #editor-support }
+
+рдЕрдкрдиреЗ editor рдореЗрдВ, рдЕрдкрдиреЗ function рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЛ рд╣рд░ рдЬрдЧрд╣ type hints рдФрд░ completion рдорд┐рд▓реЗрдВрдЧреЗ (рдпрджрд┐ рдЖрдкрдХреЛ Pydantic model рдХреЗ рдмрдЬрд╛рдп `dict` рдорд┐рд▓рд╛ рд╣реЛрддрд╛, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛):
+
+<img src="/img/tutorial/body/image03.png">
+
+рдЖрдкрдХреЛ incorrect type operations рдХреЗ рд▓рд┐рдП error checks рднреА рдорд┐рд▓рддреЗ рд╣реИрдВ:
+
+<img src="/img/tutorial/body/image04.png">
+
+рдпрд╣ рд╕рдВрдпреЛрдЧ рд╕реЗ рдирд╣реАрдВ рд╣реИ, рдкреВрд░рд╛ framework рдЗрд╕реА design рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
+
+рдФрд░ рдХрд┐рд╕реА рднреА implementation рд╕реЗ рдкрд╣рд▓реЗ, design phase рдореЗрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ test рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рдХрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рд╕рднреА editors рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
+
+рдЗрд╕реЗ support рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Pydantic рдореЗрдВ рднреА рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЧрдП рдереЗред
+
+рдкрд┐рдЫрд▓реЗ screenshots [Visual Studio Code](https://code.visualstudio.com) рдХреЗ рд╕рд╛рде рд▓рд┐рдП рдЧрдП рдереЗред
+
+рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ [PyCharm](https://www.jetbrains.com/pycharm/) рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп Python editors рдХреЗ рд╕рд╛рде рднреА рд╡рд╣реА editor support рдорд┐рд▓реЗрдЧрд╛:
+
+<img src="/img/tutorial/body/image05.png">
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрджрд┐ рдЖрдк [PyCharm](https://www.jetbrains.com/pycharm/) рдХреЛ рдЕрдкрдиреЗ editor рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк [Pydantic PyCharm Plugin](https://github.com/koxudaxi/pydantic-pycharm-plugin/) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣ Pydantic models рдХреЗ рд▓рд┐рдП editor support рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрди рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде:
+
+* auto-completion
+* type checks
+* refactoring
+* searching
+* inspections
+
+///
+
+## model рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-the-model }
+
+Function рдХреЗ рдЕрдВрджрд░, рдЖрдк model object рдХреЗ рд╕рднреА attributes рдХреЛ рд╕реАрдзреЗ access рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/body/tutorial002_py310.py *}
+
+## Request body + path parameters { #request-body-path-parameters }
+
+рдЖрдк path parameters рдФрд░ request body рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдкрд╣рдЪрд╛рдиреЗрдЧрд╛ рдХрд┐ рд╡реЗ function parameters рдЬреЛ path parameters рд╕реЗ match рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ **path рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП**, рдФрд░ рд╡реЗ function parameters рдЬреЛ Pydantic models рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ **request body рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП**ред
+
+{* ../../docs_src/body/tutorial003_py310.py hl[15:16] *}
+
+
+## Request body + path + query parameters { #request-body-path-query-parameters }
+
+рдЖрдк **body**, **path** рдФрд░ **query** parameters рдХреЛ рднреА рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдкрд╣рдЪрд╛рдиреЗрдЧрд╛ рдФрд░ data рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рд╕реЗ рд▓реЗрдЧрд╛ред
+
+{* ../../docs_src/body/tutorial004_py310.py hl[16] *}
+
+Function parameters рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛:
+
+* рдпрджрд┐ parameter **path** рдореЗрдВ рднреА рдШреЛрд╖рд┐рдд рд╣реИ, рддреЛ рдЙрд╕реЗ path parameter рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+* рдпрджрд┐ parameter **singular type** рдХрд╛ рд╣реИ (рдЬреИрд╕реЗ `int`, `float`, `str`, `bool`, рдЖрджрд┐), рддреЛ рдЙрд╕реЗ **query** parameter рдХреЗ рд░реВрдк рдореЗрдВ interpret рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+* рдпрджрд┐ parameter рдХреЛ **Pydantic model** рдХреЗ type рдХрд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ request **body** рдХреЗ рд░реВрдк рдореЗрдВ interpret рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+/// note | рдиреЛрдЯ
+
+FastAPI рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ `q` рдХрд╛ value required рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдХрд╛ default value `= None` рд╣реИред
+
+`str | None` рдХрд╛ рдЙрдкрдпреЛрдЧ FastAPI рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ value required рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ required рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ default value `= None` рд╣реИред
+
+рд▓реЗрдХрд┐рди type annotations рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ editor рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ support рджреЗ рд╕рдХреЗрдЧрд╛ рдФрд░ errors detect рдХрд░ рд╕рдХреЗрдЧрд╛ред
+
+///
+
+## Pydantic рдХреЗ рдмрд┐рдирд╛ { #without-pydantic }
+
+рдпрджрд┐ рдЖрдк Pydantic models рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ, рддреЛ рдЖрдк **Body** parameters рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред [Body - Multiple Parameters: Singular values in body](body-multiple-params.md#singular-values-in-body) рдХреЗ docs рджреЗрдЦреЗрдВред
--- /dev/null
+# Cookie Parameter Models { #cookie-parameter-models }
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрдмрдВрдзрд┐рдд **cookies** рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ **Pydantic model** рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред ЁЯНк
+
+рдпрд╣ рдЖрдкрдХреЛ **model рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ** рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, **рдХрдИ рдЬрдЧрд╣реЛрдВ** рдкрд░, рдФрд░ рд╕рд╛рде рд╣реА рд╕рднреА parameters рдХреЗ рд▓рд┐рдП validations рдФрд░ metadata рдПрдХ рд╕рд╛рде declare рдХрд░рдиреЗ рдХреА рднреАред ЁЯШО
+
+/// note | рдиреЛрдЯ
+
+рдпрд╣ FastAPI version `0.115.0` рд╕реЗ supported рд╣реИред ЁЯдУ
+
+///
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрд╣реА рддрдХрдиреАрдХ `Query`, `Cookie`, рдФрд░ `Header` рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред ЁЯШО
+
+///
+
+## Pydantic Model рдХреЗ рд╕рд╛рде Cookies { #cookies-with-a-pydantic-model }
+
+рдЬрд┐рди **cookie** parameters рдХреА рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ **Pydantic model** рдореЗрдВ declare рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ parameter рдХреЛ `Cookie` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░реЗрдВ:
+
+{* ../../docs_src/cookie_param_models/tutorial001_an_py310.py hl[9:12,16] *}
+
+**FastAPI** request рдореЗрдВ рдкреНрд░рд╛рдкреНрдд **cookies** рд╕реЗ **рд╣рд░ field** рдХреЗ рд▓рд┐рдП data **extract** рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рд╡рд╣ Pydantic model рджреЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ define рдХрд┐рдпрд╛ рд╣реИред
+
+## Docs рджреЗрдЦреЗрдВ { #check-the-docs }
+
+рдЖрдк `/docs` рдкрд░ docs UI рдореЗрдВ defined cookies рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<div class="screenshot">
+<img src="/img/tutorial/cookie-param-models/image01.png">
+</div>
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐, рдХреНрдпреЛрдВрдХрд┐ **browsers cookies рдХреЛ** рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЛрдВ рд╕реЗ рдФрд░ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ handle рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ **JavaScript** рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЫреВрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ **рдирд╣реАрдВ** рджреЗрддреЗред
+
+рдЕрдЧрд░ рдЖрдк `/docs` рдкрд░ **API docs UI** рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ *path operations* рдХреЗ рд▓рд┐рдП cookies рдХреА **documentation** рджреЗрдЦ рдкрд╛рдПрдБрдЧреЗред
+
+рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдЖрдк **data рднрд░реЗрдВ** рдФрд░ "Execute" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ docs UI **JavaScript** рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, cookies рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рдПрдБрдЧреЗ, рдФрд░ рдЖрдкрдХреЛ рдПрдХ **error** message рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдЖрдкрдиреЗ рдХреЛрдИ values рд▓рд┐рдЦреА рд╣реА рди рд╣реЛрдВред
+
+///
+
+## Extra Cookies рдХреЛ forbid рдХрд░реЗрдВ { #forbid-extra-cookies }
+
+рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ use cases рдореЗрдВ (рд╢рд╛рдпрдж рдмрд╣реБрдд рдЖрдо рдирд╣реАрдВ), рдЖрдк рдЙрди cookies рдХреЛ **restrict** рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдЖрдкрдХреА API рдХреЗ рдкрд╛рд╕ рдЕрдм рдЕрдкрдиреА рдЦреБрдж рдХреА <dfn title="рдпрд╣ рдПрдХ рдордЬрд╝рд╛рдХ рд╣реИ, рдмрд╕ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХрд╛ cookie рд╕рд╣рдорддрд┐ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдордЬрд╝реЗрджрд╛рд░ рд╣реИ рдХрд┐ рдЕрдм API рднреА рдмреЗрдЪрд╛рд░реЗ cookies рдХреЛ reject рдХрд░ рд╕рдХрддреА рд╣реИред рдПрдХ cookie рд▓реАрдЬрд┐рдПред ЁЯНк">cookie рд╕рд╣рдорддрд┐</dfn> рдХреЛ control рдХрд░рдиреЗ рдХреА рд╢рдХреНрддрд┐ рд╣реИред ЁЯдкЁЯНк
+
+рдЖрдк Pydantic рдХреЗ model configuration рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА `extra` fields рдХреЛ `forbid` рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/cookie_param_models/tutorial002_an_py310.py hl[10] *}
+
+рдЕрдЧрд░ рдХреЛрдИ client рдХреБрдЫ **extra cookies** рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ **error** response рдорд┐рд▓реЗрдЧрд╛ред
+
+рдмреЗрдЪрд╛рд░реЗ cookie banners, рдЬреЛ <dfn title="рдпрд╣ рдПрдХ рдФрд░ рдордЬрд╝рд╛рдХ рд╣реИред рдореЗрд░реА рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВред рдЕрдкрдиреА cookie рдХреЗ рд▓рд┐рдП рдХреБрдЫ coffee рд▓реАрдЬрд┐рдПред тШХ">API рджреНрд╡рд╛рд░рд╛ рдЙрд╕реЗ reject рдХрд┐рдП рдЬрд╛рдиреЗ</dfn> рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рд╕рд╣рдорддрд┐ рдкрд╛рдиреЗ рдореЗрдВ рдЗрддрдиреА рдореЗрд╣рдирдд рдХрд░рддреЗ рд╣реИрдВред ЁЯНк
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ client `good-list-please` value рдХреЗ рд╕рд╛рде рдПрдХ `santa_tracker` cookie рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ client рдХреЛ рдПрдХ **error** response рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ `santa_tracker` <dfn title="Santa cookies рдХреА рдХрдореА рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ред ЁЯОЕ рдареАрдХ рд╣реИ, рдЕрдм рдФрд░ cookie jokes рдирд╣реАрдВред">cookie рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ</dfn>:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["cookie", "santa_tracker"],
+ "msg": "Extra inputs are not permitted",
+ "input": "good-list-please",
+ }
+ ]
+}
+```
+
+## рд╕рд╛рд░рд╛рдВрд╢ { #summary }
+
+рдЖрдк **FastAPI** рдореЗрдВ <dfn title="рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЖрдЦрд┐рд░реА cookie рд▓реАрдЬрд┐рдПред ЁЯНк">**cookies**</dfn> declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **Pydantic models** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ЁЯШО
--- /dev/null
+# Cookie Parameters { #cookie-parameters }
+
+рдЖрдк `Cookie` parameters рдХреЛ рдЙрд╕реА рддрд░рд╣ define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк `Query` рдФрд░ `Path` parameters define рдХрд░рддреЗ рд╣реИрдВред
+
+## `Cookie` import рдХрд░реЗрдВ { #import-cookie }
+
+рдкрд╣рд▓реЗ `Cookie` import рдХрд░реЗрдВ:
+
+{* ../../docs_src/cookie_params/tutorial001_an_py310.py hl[3] *}
+
+## `Cookie` parameters declare рдХрд░реЗрдВ { #declare-cookie-parameters }
+
+рдлрд┐рд░ cookie parameters рдХреЛ `Path` рдФрд░ `Query` рдЬреИрд╕реА рд╣реА structure рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ declare рдХрд░реЗрдВред
+
+рдЖрдк default value рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА extra validation рдпрд╛ annotation parameters рднреА define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/cookie_params/tutorial001_an_py310.py hl[9] *}
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+`Cookie`, `Path` рдФрд░ `Query` рдХреА рдПрдХ "sister" class рд╣реИред рдпрд╣ рднреА рдЙрд╕реА common `Param` class рд╕реЗ inherit рдХрд░рддреА рд╣реИред
+
+рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЬрдм рдЖрдк `fastapi` рд╕реЗ `Query`, `Path`, `Cookie` рдФрд░ рдЕрдиреНрдп рдЪреАрдЬрд╝реЗрдВ import рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ functions рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ special classes return рдХрд░рддреЗ рд╣реИрдВред
+
+///
+
+/// note | рдиреЛрдЯ
+
+Cookies declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ `Cookie` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ parameters рдХреЛ query parameters рдХреЗ рд░реВрдк рдореЗрдВ interpret рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+///
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐, рдХреНрдпреЛрдВрдХрд┐ **browsers cookies рдХреЛ** рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЛрдВ рд╕реЗ рдФрд░ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ handle рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ **JavaScript** рдХреЛ рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ access рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ **рдирд╣реАрдВ** рджреЗрддреЗред
+
+рдпрджрд┐ рдЖрдк `/docs` рдкрд░ **API docs UI** рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреА *path operations* рдХреЗ рд▓рд┐рдП cookies рдХреА **documentation** рджреЗрдЦ рдкрд╛рдПрдБрдЧреЗред
+
+рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдЖрдк **data рднрд░реЗрдВ** рдФрд░ "Execute" рдкрд░ click рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ docs UI **JavaScript** рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, cookies рднреЗрдЬреА рдирд╣реАрдВ рдЬрд╛рдПрдБрдЧреА, рдФрд░ рдЖрдкрдХреЛ рдРрд╕рд╛ **error** message рджрд┐рдЦреЗрдЧрд╛ рдЬреИрд╕реЗ рдЖрдкрдиреЗ рдХреЛрдИ values рд▓рд┐рдЦреА рд╣реА рдирд╣реАрдВ рд╣реЛрдВред
+
+///
+
+## Recap { #recap }
+
+`Query` рдФрд░ `Path` рдЬреИрд╕реЗ рд╣реА common pattern рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, `Cookie` рдХреЗ рд╕рд╛рде cookies declare рдХрд░реЗрдВред
--- /dev/null
+# CORS (Cross-Origin Resource Sharing) { #cors-cross-origin-resource-sharing }
+
+[CORS рдпрд╛ "Cross-Origin Resource Sharing"](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм browser рдореЗрдВ рдЪрд▓ рд░рд╣реЗ frontend рдореЗрдВ JavaScript code рд╣реЛрддрд╛ рд╣реИ рдЬреЛ backend рд╕реЗ communicate рдХрд░рддрд╛ рд╣реИ, рдФрд░ backend frontend рд╕реЗ рдЕрд▓рдЧ "origin" рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
+
+## Origin { #origin }
+
+рдПрдХ origin protocol (`http`, `https`), domain (`myapp.com`, `localhost`, `localhost.tiangolo.com`), рдФрд░ port (`80`, `443`, `8080`) рдХрд╛ combination рд╣реЛрддрд╛ рд╣реИред
+
+рддреЛ, рдпреЗ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ origins рд╣реИрдВ:
+
+* `http://localhost`
+* `https://localhost`
+* `http://localhost:8080`
+
+рднрд▓реЗ рд╣реА рд╡реЗ рд╕рднреА `localhost` рдореЗрдВ рд╣реЛрдВ, рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ protocols рдпрд╛ ports рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ "origins" рд╣реИрдВред
+
+## Steps { #steps }
+
+рддреЛ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ browser рдореЗрдВ `http://localhost:8080` рдкрд░ рдПрдХ frontend рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХрд╛ JavaScript `http://localhost` рдкрд░ рдЪрд▓ рд░рд╣реЗ backend рд╕реЗ communicate рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо port specify рдирд╣реАрдВ рдХрд░рддреЗ, browser default port `80` рдорд╛рди рд▓реЗрдЧрд╛)ред
+
+рдлрд┐рд░, browser `:80`-backend рдХреЛ рдПрдХ HTTP `OPTIONS` request рднреЗрдЬреЗрдЧрд╛, рдФрд░ рдЕрдЧрд░ backend рдЗрд╕ рдЕрд▓рдЧ origin (`http://localhost:8080`) рд╕реЗ communication рдХреЛ authorize рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдЪрд┐рдд headers рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ `:8080`-browser frontend рдореЗрдВ JavaScript рдХреЛ рдЕрдкрдирд╛ request `:80`-backend рдХреЛ рднреЗрдЬрдиреЗ рджреЗрдЧрд╛ред
+
+рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `:80`-backend рдХреЗ рдкрд╛рд╕ "allowed origins" рдХреА рдПрдХ list рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, `:8080`-frontend рдХреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП list рдореЗрдВ `http://localhost:8080` рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+## Wildcards { #wildcards }
+
+рдпрд╣ рднреА possible рд╣реИ рдХрд┐ list рдХреЛ `"*"` (рдПрдХ "wildcard") рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА allowed рд╣реИрдВред
+
+рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ communication рдХреЛ allow рдХрд░реЗрдЧрд╛, рдЙрди рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬрд┐рдирдореЗрдВ credentials рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: Cookies, Authorization headers рдЬреИрд╕реЗ рдХрд┐ Bearer Tokens рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ, рдЖрджрд┐ред
+
+рдЗрд╕рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП allowed origins рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ specify рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
+
+## `CORSMiddleware` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-corsmiddleware }
+
+рдЖрдк `CORSMiddleware` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЕрдкрдиреА **FastAPI** application рдореЗрдВ configure рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+* `CORSMiddleware` import рдХрд░реЗрдВред
+* allowed origins рдХреА рдПрдХ list рдмрдирд╛рдПрдБ (strings рдХреЗ рд░реВрдк рдореЗрдВ)ред
+* рдЗрд╕реЗ рдЕрдкрдиреА **FastAPI** application рдореЗрдВ "middleware" рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
+
+рдЖрдк рдпрд╣ рднреА specify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ backend allow рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
+
+* Credentials (Authorization headers, Cookies, рдЖрджрд┐)ред
+* Specific HTTP methods (`POST`, `PUT`) рдпрд╛ wildcard `"*"` рдХреЗ рд╕рд╛рде рд╕рднреА methodsред
+* Specific HTTP headers рдпрд╛ wildcard `"*"` рдХреЗ рд╕рд╛рде рд╕рднреА headersред
+
+{* ../../docs_src/cors/tutorial001_py310.py hl[2,6:11,13:19] *}
+
+
+`CORSMiddleware` implementation рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ default parameters default рд░реВрдк рд╕реЗ restrictive рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП browsers рдХреЛ Cross-Domain context рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА permission рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ particular origins, methods, рдпрд╛ headers рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ enable рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
+
+рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд arguments supported рд╣реИрдВ:
+
+* `allow_origins` - origins рдХреА рдПрдХ list рдЬрд┐рдиреНрд╣реЗрдВ cross-origin requests рдХрд░рдиреЗ рдХреА permission рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕реЗ `['https://example.org', 'https://www.example.org']`ред рдЖрдк рдХрд┐рд╕реА рднреА origin рдХреЛ allow рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `['*']` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+* `allow_origin_regex` - origins рдХреЗ against match рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ regex string рдЬрд┐рдиреНрд╣реЗрдВ cross-origin requests рдХрд░рдиреЗ рдХреА permission рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕реЗ `'https://.*\.example\.org'`ред
+* `allow_methods` - HTTP methods рдХреА рдПрдХ list рдЬрд┐рдиреНрд╣реЗрдВ cross-origin requests рдХреЗ рд▓рд┐рдП allowed рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Defaults to `['GET']`ред рдЖрдк рд╕рднреА standard methods рдХреЛ allow рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `['*']` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+* `allow_headers` - HTTP request headers рдХреА рдПрдХ list рдЬрд┐рдиреНрд╣реЗрдВ cross-origin requests рдХреЗ рд▓рд┐рдП supported рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Defaults to `[]`ред рдЖрдк рд╕рднреА headers рдХреЛ allow рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `['*']` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред `Accept`, `Accept-Language`, `Content-Language` рдФрд░ `Content-Type` headers рд╣рдореЗрд╢рд╛ [simple CORS requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests) рдХреЗ рд▓рд┐рдП allowed рд╣реЛрддреЗ рд╣реИрдВред
+* `allow_credentials` - indicate рдХрд░рддрд╛ рд╣реИ рдХрд┐ cookies cross-origin requests рдХреЗ рд▓рд┐рдП supported рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред Defaults to `False`.
+
+ рдЕрдЧрд░ `allow_credentials` рдХреЛ `True` рдкрд░ set рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ `allow_origins`, `allow_methods` рдФрд░ `allow_headers` рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА `['*']` рдкрд░ set рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред рдЙрди рд╕рднреА рдХреЛ [explicitly specified](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+* `expose_headers` - indicate рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ response headers browser рдХреЗ рд▓рд┐рдП accessible рдмрдирд╛рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред Defaults to `[]`ред
+* `max_age` - browsers рдХреЗ рд▓рд┐рдП CORS responses рдХреЛ cache рдХрд░рдиреЗ рдХрд╛ maximum рд╕рдордп seconds рдореЗрдВ set рдХрд░рддрд╛ рд╣реИред Defaults to `600`ред
+
+middleware рджреЛ particular рдкреНрд░рдХрд╛рд░ рдХреЗ HTTP request рдХрд╛ response рджреЗрддрд╛ рд╣реИ...
+
+### CORS preflight requests { #cors-preflight-requests }
+
+рдпреЗ `Origin` рдФрд░ `Access-Control-Request-Method` headers рд╡рд╛рд▓реЗ рдХреЛрдИ рднреА `OPTIONS` request рд╣реЛрддреЗ рд╣реИрдВред
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ middleware incoming request рдХреЛ intercept рдХрд░реЗрдЧрд╛ рдФрд░ appropriate CORS headers рдХреЗ рд╕рд╛рде respond рдХрд░реЗрдЧрд╛, рдФрд░ informational purposes рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ `200` рдпрд╛ `400` response рджреЗрдЧрд╛ред
+
+### Simple requests { #simple-requests }
+
+`Origin` header рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА requestред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ middleware request рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ pass through рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди response рдкрд░ appropriate CORS headers рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ред
+
+## рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА { #more-info }
+
+<abbr title="Cross-Origin Resource Sharing - рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ">CORS</abbr> рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, [Mozilla CORS documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) рджреЗрдЦреЗрдВред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЖрдк `from starlette.middleware.cors import CORSMiddleware` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, developer рдХреЗ рд░реВрдк рдореЗрдВ, `fastapi.middleware` рдореЗрдВ рдХрдИ middlewares provide рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди available middlewares рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддреЗ рд╣реИрдВред
+
+///
--- /dev/null
+# Debugging { #debugging }
+
+рдЖрдк рдЕрдкрдиреЗ editor рдореЗрдВ debugger connect рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Visual Studio Code рдпрд╛ PyCharm рдХреЗ рд╕рд╛рдеред
+
+## `uvicorn` рдХреЛ call рдХрд░реЗрдВ { #call-uvicorn }
+
+рдЕрдкрдиреЗ FastAPI application рдореЗрдВ, `uvicorn` рдХреЛ рд╕реАрдзреЗ import рдХрд░рдХреЗ run рдХрд░реЗрдВ:
+
+{* ../../docs_src/debugging/tutorial001_py310.py hl[1,15] *}
+
+### `__name__ == "__main__"` рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ { #about-name-main }
+
+`__name__ == "__main__"` рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдРрд╕рд╛ рдХреБрдЫ code рд░рдЦрдирд╛ рд╣реИ рдЬреЛ рддрдм execute рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреА file рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде call рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
+
+<div class="termy">
+
+```console
+$ python myapp.py
+```
+
+</div>
+
+рд▓реЗрдХрд┐рди рддрдм call рдирд╣реАрдВ рд╣реЛрддрд╛ рдЬрдм рдХреЛрдИ рджреВрд╕рд░реА file рдЗрд╕реЗ import рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐:
+
+```Python
+from myapp import app
+```
+
+#### рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг { #more-details }
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреА file рдХрд╛ рдирд╛рдо `myapp.py` рд╣реИред
+
+рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде run рдХрд░рддреЗ рд╣реИрдВ:
+
+<div class="termy">
+
+```console
+$ python myapp.py
+```
+
+</div>
+
+рддреЛ рдЖрдкрдХреА file рдореЗрдВ Python рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдЖрдк рдмрдирд╛рдИ рдЧрдИ internal variable `__name__` рдХрд╛ value string `"__main__"` рд╣реЛрдЧрд╛ред
+
+рддреЛ, рдпрд╣ section:
+
+```Python
+ uvicorn.run(app, host="0.0.0.0", port=8000)
+```
+
+run рд╣реЛрдЧрд╛ред
+
+---
+
+рдЕрдЧрд░ рдЖрдк рдЙрд╕ module (file) рдХреЛ import рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
+
+рддреЛ, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ `importer.py` рдирд╛рдо рдХреА рдХреЛрдИ рджреВрд╕рд░реА file рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╣реИ:
+
+```Python
+from myapp import app
+
+# рдХреБрдЫ рдФрд░ code
+```
+
+рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, `myapp.py` рдХреЗ рдЕрдВрджрд░ рдЕрдкрдиреЗ рдЖрдк рдмрдирд╛рдИ рдЧрдИ variable `__name__` рдХрд╛ value `"__main__"` рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
+
+рддреЛ, рдпрд╣ line:
+
+```Python
+ uvicorn.run(app, host="0.0.0.0", port=8000)
+```
+
+execute рдирд╣реАрдВ рд╣реЛрдЧреАред
+
+/// note | рдиреЛрдЯ
+
+рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, [рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Python docs](https://docs.python.org/3/library/__main__.html) рджреЗрдЦреЗрдВред
+
+///
+
+## рдЕрдкрдиреЗ debugger рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ code run рдХрд░реЗрдВ { #run-your-code-with-your-debugger }
+
+рдХреНрдпреЛрдВрдХрд┐ рдЖрдк Uvicorn server рдХреЛ рд╕реАрдзреЗ рдЕрдкрдиреЗ code рд╕реЗ run рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рдЕрдкрдиреЗ Python program (рдЕрдкрдиреЗ FastAPI application) рдХреЛ рд╕реАрдзреЗ debugger рд╕реЗ call рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+---
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Visual Studio Code рдореЗрдВ, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* "Debug" panel рдкрд░ рдЬрд╛рдПрдБред
+* "Add configuration..."ред
+* "Python" рдЪреБрдиреЗрдВред
+* "`Python: Current File (Integrated Terminal)`" option рдХреЗ рд╕рд╛рде debugger run рдХрд░реЗрдВред
+
+рдлрд┐рд░ рдпрд╣ рдЖрдкрдХреЗ **FastAPI** code рдХреЗ рд╕рд╛рде server start рдХрд░реЗрдЧрд╛, рдЖрдкрдХреЗ breakpoints рдкрд░ рд░реБрдХреЗрдЧрд╛, рдЖрджрд┐ред
+
+рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
+
+<img src="/img/tutorial/debugging/image01.png">
+
+---
+
+рдЕрдЧрд░ рдЖрдк PyCharm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* "Run" menu рдЦреЛрд▓реЗрдВред
+* "Debug..." option рдЪреБрдиреЗрдВред
+* рдлрд┐рд░ рдПрдХ context menu рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
+* debug рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП file рдЪреБрдиреЗрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, `main.py`)ред
+
+рдлрд┐рд░ рдпрд╣ рдЖрдкрдХреЗ **FastAPI** code рдХреЗ рд╕рд╛рде server start рдХрд░реЗрдЧрд╛, рдЖрдкрдХреЗ breakpoints рдкрд░ рд░реБрдХреЗрдЧрд╛, рдЖрджрд┐ред
+
+рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
+
+<img src="/img/tutorial/debugging/image02.png">
--- /dev/null
+# Dependencies рдХреЗ рд░реВрдк рдореЗрдВ Classes { #classes-as-dependencies }
+
+**Dependency Injection** system рдореЗрдВ рдФрд░ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддреЗ рд╣реИрдВред
+
+## рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдПрдХ `dict` { #a-dict-from-the-previous-example }
+
+рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЕрдкрдиреА dependency ("dependable") рд╕реЗ рдПрдХ `dict` return рдХрд░ рд░рд╣реЗ рдереЗ:
+
+{* ../../docs_src/dependencies/tutorial001_an_py310.py hl[9] *}
+
+рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдореЗрдВ *path operation function* рдХреЗ parameter `commons` рдореЗрдВ рдПрдХ `dict` рдорд┐рд▓рддрд╛ рд╣реИред
+
+рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ editors `dict`s рдХреЗ рд▓рд┐рдП рдЬрд╝реНрдпрд╛рджрд╛ support (рдЬреИрд╕реЗ completion) рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрдирдХреА keys рдФрд░ value types рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗред
+
+рд╣рдо рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ...
+
+## Dependency рдХрд┐рд╕рд╕реЗ рдмрдирддреА рд╣реИ { #what-makes-a-dependency }
+
+рдЕрдм рддрдХ рдЖрдкрдиреЗ dependencies рдХреЛ functions рдХреЗ рд░реВрдк рдореЗрдВ declare рд╣реЛрддреЗ рджреЗрдЦрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди dependencies declare рдХрд░рдиреЗ рдХрд╛ рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рдЕрдзрд┐рдХ common рд╣реЛрдЧрд╛)ред
+
+рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ dependency рдПрдХ "callable" рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
+
+Python рдореЗрдВ "**callable**" рд╡рд╣ рдХреЛрдИ рднреА рдЪреАрдЬрд╝ рд╣реИ рдЬрд┐рд╕реЗ Python рдПрдХ function рдХреА рддрд░рд╣ "call" рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+
+рддреЛ, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ object `something` рд╣реИ (рдЬреЛ рд╢рд╛рдпрдж function _рди_ рд╣реЛ) рдФрд░ рдЖрдк рдЙрд╕реЗ рдЗрд╕ рддрд░рд╣ "call" (execute) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```Python
+something()
+```
+
+рдпрд╛
+
+```Python
+something(some_argument, some_keyword_argument="foo")
+```
+
+рддреЛ рд╡рд╣ рдПрдХ "callable" рд╣реИред
+
+## Dependencies рдХреЗ рд░реВрдк рдореЗрдВ Classes { #classes-as-dependencies_1 }
+
+рдЖрдк рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ Python class рдХрд╛ instance рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрдк рд╡рд╣реА syntax рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```Python
+class Cat:
+ def __init__(self, name: str):
+ self.name = name
+
+
+fluffy = Cat(name="Mr Fluffy")
+```
+
+рдЗрд╕ case рдореЗрдВ, `fluffy` class `Cat` рдХрд╛ рдПрдХ instance рд╣реИред
+
+рдФрд░ `fluffy` рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк `Cat` рдХреЛ "call" рдХрд░ рд░рд╣реЗ рд╣реИрдВред
+
+рдЗрд╕рд▓рд┐рдП, Python class рднреА рдПрдХ **callable** рд╣реИред
+
+рдлрд┐рд░, **FastAPI** рдореЗрдВ, рдЖрдк Python class рдХреЛ dependency рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+FastAPI рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ check рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ "callable" (function, class рдпрд╛ рдХреБрдЫ рдФрд░) рд╣реИ рдФрд░ рдЙрд╕рдореЗрдВ parameters defined рд╣реИрдВред
+
+рдЕрдЧрд░ рдЖрдк **FastAPI** рдореЗрдВ dependency рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ "callable" pass рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрд╕ "callable" рдХреЗ parameters рдХреЛ analyze рдХрд░реЗрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ *path operation function* рдХреЗ parameters рдХреА рддрд░рд╣ рд╣реА process рдХрд░реЗрдЧрд╛ред рдЗрд╕рдореЗрдВ sub-dependencies рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
+
+рдпрд╣ рдЙрди callables рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдХреЛрдИ parameters рдирд╣реАрдВ рд╣реЛрддреЗред рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЬреИрд╕реЗ рдмрд┐рдирд╛ parameters рд╡рд╛рд▓реЗ *path operation functions* рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ред
+
+рдлрд┐рд░, рд╣рдо рдКрдкрд░ рд╡рд╛рд▓реА dependency "dependable" `common_parameters` рдХреЛ class `CommonQueryParams` рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/dependencies/tutorial002_an_py310.py hl[11:15] *}
+
+Class рдХрд╛ instance рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ `__init__` method рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
+
+{* ../../docs_src/dependencies/tutorial002_an_py310.py hl[12] *}
+
+...рдЗрд╕рдореЗрдВ рд╡рд╣реА parameters рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд┐рдЫрд▓реЗ `common_parameters` рдореЗрдВ рдереЗ:
+
+{* ../../docs_src/dependencies/tutorial001_an_py310.py hl[8] *}
+
+рдпрд╣реА parameters **FastAPI** dependency рдХреЛ "solve" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
+
+рджреЛрдиреЛрдВ cases рдореЗрдВ, рдЗрд╕рдореЗрдВ рд╣реЛрдЧрд╛:
+
+* рдПрдХ optional `q` query parameter рдЬреЛ `str` рд╣реИред
+* рдПрдХ `skip` query parameter рдЬреЛ `int` рд╣реИ, рдЬрд┐рд╕рдХрд╛ default `0` рд╣реИред
+* рдПрдХ `limit` query parameter рдЬреЛ `int` рд╣реИ, рдЬрд┐рд╕рдХрд╛ default `100` рд╣реИред
+
+рджреЛрдиреЛрдВ cases рдореЗрдВ data converted, validated, OpenAPI schema рдкрд░ documented, рдЖрджрд┐ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+## рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-it }
+
+рдЕрдм рдЖрдк рдЗрд╕ class рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА dependency declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/dependencies/tutorial002_an_py310.py hl[19] *}
+
+**FastAPI** `CommonQueryParams` class рдХреЛ call рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ class рдХрд╛ рдПрдХ "instance" рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣ instance рдЖрдкрдХреЗ function рдХреЛ parameter `commons` рдХреЗ рд░реВрдк рдореЗрдВ pass рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+## Type annotation рдмрдирд╛рдо `Depends` { #type-annotation-vs-depends }
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдКрдкрд░ рдХреЗ code рдореЗрдВ рд╣рдо `CommonQueryParams` рдХреЛ рджреЛ рдмрд╛рд░ рдХреИрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
+
+//// tab | Python 3.10+
+
+```Python
+commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
+```
+
+////
+
+//// tab | Python 3.10+ non-Annotated
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд╕рдВрднрд╡ рд╣реЛ рддреЛ `Annotated` version рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
+
+///
+
+```Python
+commons: CommonQueryParams = Depends(CommonQueryParams)
+```
+
+////
+
+рдЖрдЦрд┐рд░реА `CommonQueryParams`, рдЗрд╕рдореЗрдВ:
+
+```Python
+... Depends(CommonQueryParams)
+```
+
+...рд╡рд╣реА рд╣реИ рдЬрд┐рд╕реЗ **FastAPI** рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдХрд┐ dependency рдХреНрдпрд╛ рд╣реИред
+
+FastAPI рдЗрд╕реА рд╕реЗ declared parameters extract рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реА рдХреЛ call рдХрд░реЗрдЧрд╛ред
+
+---
+
+рдЗрд╕ case рдореЗрдВ, рдкрд╣рд▓рд╛ `CommonQueryParams`, рдЗрд╕рдореЗрдВ:
+
+//// tab | Python 3.10+
+
+```Python
+commons: Annotated[CommonQueryParams, ...
+```
+
+////
+
+//// tab | Python 3.10+ non-Annotated
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд╕рдВрднрд╡ рд╣реЛ рддреЛ `Annotated` version рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
+
+///
+
+```Python
+commons: CommonQueryParams ...
+```
+
+////
+
+...рдХрд╛ **FastAPI** рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред FastAPI рдЗрд╕реЗ data conversion, validation, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред (рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП `Depends(CommonQueryParams)` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ)ред
+
+рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+
+//// tab | Python 3.10+
+
+```Python
+commons: Annotated[Any, Depends(CommonQueryParams)]
+```
+
+////
+
+//// tab | Python 3.10+ non-Annotated
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд╕рдВрднрд╡ рд╣реЛ рддреЛ `Annotated` version рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
+
+///
+
+```Python
+commons = Depends(CommonQueryParams)
+```
+
+////
+
+...рдЬреИрд╕реЗ:
+
+{* ../../docs_src/dependencies/tutorial003_an_py310.py hl[19] *}
+
+рд▓реЗрдХрд┐рди type declare рдХрд░рдиреЗ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдЖрдкрдХрд╛ editor рдЬрд╛рди рдкрд╛рдПрдЧрд╛ рдХрд┐ parameter `commons` рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ pass рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдпрд╣ code completion, type checks, рдЖрджрд┐ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
+
+<img src="/img/tutorial/dependencies/image02.png">
+
+## Shortcut { #shortcut }
+
+рд▓реЗрдХрд┐рди рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдБ рдХреБрдЫ code repetition рд╣реЛ рд░рд╣рд╛ рд╣реИ, `CommonQueryParams` рдХреЛ рджреЛ рдмрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реБрдП:
+
+//// tab | Python 3.10+
+
+```Python
+commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
+```
+
+////
+
+//// tab | Python 3.10+ non-Annotated
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд╕рдВрднрд╡ рд╣реЛ рддреЛ `Annotated` version рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
+
+///
+
+```Python
+commons: CommonQueryParams = Depends(CommonQueryParams)
+```
+
+////
+
+**FastAPI** рдРрд╕реЗ cases рдХреЗ рд▓рд┐рдП рдПрдХ shortcut рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ dependency *specifically* рдПрдХ class рд╣реИ рдЬрд┐рд╕реЗ **FastAPI** class рдХрд╛ instance рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП "call" рдХрд░реЗрдЧрд╛ред
+
+рдЙрди specific cases рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп:
+
+//// tab | Python 3.10+
+
+```Python
+commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
+```
+
+////
+
+//// tab | Python 3.10+ non-Annotated
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд╕рдВрднрд╡ рд╣реЛ рддреЛ `Annotated` version рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
+
+///
+
+```Python
+commons: CommonQueryParams = Depends(CommonQueryParams)
+```
+
+////
+
+...рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
+
+//// tab | Python 3.10+
+
+```Python
+commons: Annotated[CommonQueryParams, Depends()]
+```
+
+////
+
+//// tab | Python 3.10+ non-Annotated
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд╕рдВрднрд╡ рд╣реЛ рддреЛ `Annotated` version рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
+
+///
+
+```Python
+commons: CommonQueryParams = Depends()
+```
+
+////
+
+рдЖрдк dependency рдХреЛ parameter рдХреЗ type рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ `Depends(CommonQueryParams)` рдХреЗ рдЕрдВрджрд░ рдкреВрд░реА class рдХреЛ *рдлрд┐рд░ рд╕реЗ* рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА parameter рдХреЗ `Depends()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+рдлрд┐рд░ рд╡рд╣реА рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
+
+{* ../../docs_src/dependencies/tutorial004_an_py310.py hl[19] *}
+
+...рдФрд░ **FastAPI** рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд░ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ confusing рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдЗрд╕рдХреА *рдЬрд╝рд░реВрд░рдд* рдирд╣реАрдВ рд╣реИред
+
+рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ shortcut рд╣реИред рдХреНрдпреЛрдВрдХрд┐ **FastAPI** рдЖрдкрдХреЛ code repetition рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред
+
+///
--- /dev/null
+# path operation decorators рдореЗрдВ Dependencies { #dependencies-in-path-operation-decorators }
+
+рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдЕрдкрдиреА *path operation function* рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА dependency рдХреА return value рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреАред
+
+рдпрд╛ dependency рдХреЛрдИ value return рдирд╣реАрдВ рдХрд░рддреАред
+
+рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рдЙрд╕рдХрд╛ execute/solve рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, `Depends` рдХреЗ рд╕рд╛рде *path operation function* parameter declare рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк *path operation decorator* рдореЗрдВ `dependencies` рдХреА рдПрдХ `list` рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+## *path operation decorator* рдореЗрдВ `dependencies` рдЬреЛрдбрд╝реЗрдВ { #add-dependencies-to-the-path-operation-decorator }
+
+*path operation decorator* рдПрдХ optional argument `dependencies` рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
+
+рдпрд╣ `Depends()` рдХреА рдПрдХ `list` рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
+
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[19] *}
+
+рдпреЗ dependencies normal dependencies рдХреА рддрд░рд╣ рд╣реА execute/solve рд╣реЛрдВрдЧреАред рд▓реЗрдХрд┐рди рдЙрдирдХреА value (рдпрджрд┐ рд╡реЗ рдХреЛрдИ return рдХрд░рддреА рд╣реИрдВ) рдЖрдкрдХреА *path operation function* рдХреЛ pass рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдХреБрдЫ editors unused function parameters рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ errors рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
+
+*path operation decorator* рдореЗрдВ рдЗрди `dependencies` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ execute рд╣реЛрдВ, рд╕рд╛рде рд╣реА editor/tooling errors рд╕реЗ рдмрдЪ рд╕рдХреЗрдВред
+
+рдпрд╣ рдирдП developers рдХреЗ рд▓рд┐рдП рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ code рдореЗрдВ unused parameter рджреЗрдЦрдХрд░ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред
+
+///
+
+/// note | рдиреЛрдЯ
+
+рдЗрд╕ example рдореЗрдВ рд╣рдо рдмрдирд╛рдП рдЧрдП custom headers `X-Key` рдФрд░ `X-Token` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, security implement рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ integrated [Security utilities (рдЕрдЧрд▓рд╛ рдЕрдзреНрдпрд╛рдп)](../security/index.md) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдн рдорд┐рд▓реЗрдВрдЧреЗред
+
+///
+
+## Dependencies errors рдФрд░ return values { #dependencies-errors-and-return-values }
+
+рдЖрдк рд╡рд╣реА dependency *functions* рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+### Dependency requirements { #dependency-requirements }
+
+рд╡реЗ request requirements (рдЬреИрд╕реЗ headers) рдпрд╛ рдЕрдиреНрдп sub-dependencies declare рдХрд░ рд╕рдХрддреА рд╣реИрдВ:
+
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[8,13] *}
+
+### Exceptions raise рдХрд░реЗрдВ { #raise-exceptions }
+
+рдпреЗ dependencies normal dependencies рдХреА рддрд░рд╣ рд╣реА exceptions `raise` рдХрд░ рд╕рдХрддреА рд╣реИрдВ:
+
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[10,15] *}
+
+### Return values { #return-values }
+
+рдФрд░ рд╡реЗ values return рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рднреА рдХрд░ рд╕рдХрддреАрдВ, values рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+рдЗрд╕рд▓рд┐рдП, рдЖрдк рдПрдХ normal dependency (рдЬреЛ value return рдХрд░рддреА рд╣реИ) рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рднрд▓реЗ рд╣реА value рдХрд╛ рдЙрдкрдпреЛрдЧ рди рд╣реЛ, dependency execute рд╣реЛрдЧреА:
+
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[11,16] *}
+
+## *path operations* рдХреЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП Dependencies { #dependencies-for-a-group-of-path-operations }
+
+рдмрд╛рдж рдореЗрдВ, рдЬрдм рдЖрдк рдмрдбрд╝реЗ applications рдХреЛ structure рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗ ([рдмрдбрд╝реЗ Applications - рдХрдИ Files](../../tutorial/bigger-applications.md)), рд╕рдВрднрд╡рддрдГ рдХрдИ files рдХреЗ рд╕рд╛рде, рддреЛ рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ *path operations* рдХреЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА `dependencies` parameter рдХреИрд╕реЗ declare рдХрд┐рдпрд╛ рдЬрд╛рдПред
+
+## Global Dependencies { #global-dependencies }
+
+рдЖрдЧреЗ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреВрд░реЗ `FastAPI` application рдореЗрдВ dependencies рдХреИрд╕реЗ рдЬреЛрдбрд╝реА рдЬрд╛рдПрдБ, рддрд╛рдХрд┐ рд╡реЗ рд╣рд░ *path operation* рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдВред
--- /dev/null
+# `yield` рд╡рд╛рд▓реА Dependencies { #dependencies-with-yield }
+
+FastAPI рдРрд╕реА dependencies рдХреЛ support рдХрд░рддрд╛ рд╣реИ рдЬреЛ <dfn title='рдХрднреА-рдХрднреА рдЗрдиреНрд╣реЗрдВ "exit code", "cleanup code", "teardown code", "closing code", "context manager exit code" рдЖрджрд┐ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред'>рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрддрд┐рд░рд┐рдХреНрдд steps</dfn> рдХрд░рддреА рд╣реИрдВред
+
+рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `return` рдХреА рдЬрдЧрд╣ `yield` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд steps (code) рдЙрд╕рдХреЗ рдмрд╛рдж рд▓рд┐рдЦреЗрдВред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд╣рд░ dependency рдореЗрдВ `yield` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
+
+///
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдХреЛрдИ рднреА function рдЬреЛ рдЗрдирдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП valid рд╣реИ:
+
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) рдпрд╛
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
+
+рд╡рд╣ **FastAPI** dependency рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП valid рд╣реЛрдЧреАред
+
+рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, FastAPI internally рдЗрди рджреЛрдиреЛрдВ decorators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+
+///
+
+## `yield` рд╡рд╛рд▓реА database dependency { #a-database-dependency-with-yield }
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ database session рдмрдирд╛рдиреЗ рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕реЗ close рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+`yield` statement рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЙрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реБрдП рдХреЗрд╡рд▓ рд╡рд╣реА code response рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ execute рд╣реЛрддрд╛ рд╣реИ:
+
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[2:4] *}
+
+yield рдХрд┐рдпрд╛ рдЧрдпрд╛ value рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ *path operations* рдФрд░ рдЕрдиреНрдп dependencies рдореЗрдВ inject рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
+
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[4] *}
+
+`yield` statement рдХреЗ рдмрд╛рдж рд╡рд╛рд▓рд╛ code response рдХреЗ рдмрд╛рдж execute рд╣реЛрддрд╛ рд╣реИ:
+
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[5:6] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЖрдк `async` рдпрд╛ regular functions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рд╣рд░ рдПрдХ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдареАрдХ normal dependencies рдХреА рддрд░рд╣ред
+
+///
+
+## `yield` рдФрд░ `try` рд╡рд╛рд▓реА dependency { #a-dependency-with-yield-and-try }
+
+рдЕрдЧрд░ рдЖрдк `yield` рд╡рд╛рд▓реА dependency рдореЗрдВ `try` block рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ dependency рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп throw рдХреА рдЧрдИ рдХреЛрдИ рднреА exception рдЖрдкрдХреЛ рдорд┐рд▓реЗрдЧреАред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдмреАрдЪ рдореЗрдВ рдХрд┐рд╕реА point рдкрд░, рдХрд┐рд╕реА рджреВрд╕рд░реА dependency рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА *path operation* рдореЗрдВ, рдХреБрдЫ code рдиреЗ database transaction рдХреЛ "rollback" рдХрд┐рдпрд╛ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп exception рдмрдирд╛рдИ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА dependency рдореЗрдВ рд╡рд╣ exception рдорд┐рд▓реЗрдЧреАред
+
+рдЗрд╕рд▓рд┐рдП, рдЖрдк `except SomeException` рдХреЗ рд╕рд╛рде dependency рдХреЗ рдЕрдВрджрд░ рдЙрд╕ specific exception рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕реА рддрд░рд╣, рдЖрдк `finally` рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ exit steps execute рд╣реЛрдВ, рдЪрд╛рд╣реЗ exception рдЖрдИ рд╣реЛ рдпрд╛ рдирд╣реАрдВред
+
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[3,5] *}
+
+## `yield` рд╡рд╛рд▓реА Sub-dependencies { #sub-dependencies-with-yield }
+
+рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рднреА size рдФрд░ shape рдХреА sub-dependencies рдФрд░ sub-dependencies рдХреЗ "trees" рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдпрд╛ рд╕рднреА `yield` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВред
+
+**FastAPI** рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ `yield` рд╡рд╛рд▓реА рд╣рд░ dependency рдореЗрдВ "exit code" рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ run рд╣реЛред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `dependency_c` рдХреА dependency `dependency_b` рдкрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ `dependency_b` рдХреА `dependency_a` рдкрд░:
+
+{* ../../docs_src/dependencies/tutorial008_an_py310.py hl[6,14,22] *}
+
+рдФрд░ рд╡реЗ рд╕рднреА `yield` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВред
+
+рдЗрд╕ case рдореЗрдВ `dependency_c` рдХреЛ рдЕрдкрдирд╛ exit code execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `dependency_b` рд╕реЗ рдорд┐рд▓рд╛ value (рдпрд╣рд╛рдБ `dep_b` рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рдЪрд╛рд╣рд┐рдПред
+
+рдФрд░, рдмрджрд▓реЗ рдореЗрдВ, `dependency_b` рдХреЛ рдЕрдкрдиреЗ exit code рдХреЗ рд▓рд┐рдП `dependency_a` рд╕реЗ рдорд┐рд▓рд╛ value (рдпрд╣рд╛рдБ `dep_a` рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдЙрдкрд▓рдмреНрдз рдЪрд╛рд╣рд┐рдПред
+
+{* ../../docs_src/dependencies/tutorial008_an_py310.py hl[18:19,26:27] *}
+
+рдЗрд╕реА рддрд░рд╣, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ dependencies `yield` рд╡рд╛рд▓реА рдФрд░ рдХреБрдЫ рдЕрдиреНрдп dependencies `return` рд╡рд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдмрд╛рдХреА рдХреБрдЫ рдкрд░ depend рдХрд░ рд╕рдХрддреА рд╣реИрдВред
+
+рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ single dependency рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ `yield` рд╡рд╛рд▓реА рдХрдИ рдЕрдиреНрдп dependencies required рд╣реЛрдВ, рдЖрджрд┐ред
+
+рдЖрдк dependencies рдХреЗ рдХреЛрдИ рднреА combinations рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ run рд╣реЛред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдпрд╣ Python рдХреЗ [Context Managers](https://docs.python.org/3/library/contextlib.html) рдХреА рд╡рдЬрд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
+
+**FastAPI** рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП internally рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+
+///
+
+## `yield` рдФрд░ `HTTPException` рд╡рд╛рд▓реА Dependencies { #dependencies-with-yield-and-httpexception }
+
+рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдк `yield` рд╡рд╛рд▓реА dependencies рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдРрд╕реЗ `try` blocks рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ code execute рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ `finally` рдХреЗ рдмрд╛рдж рдХреБрдЫ exit code run рдХрд░рддреЗ рд╣реИрдВред
+
+рдЖрдк raise рдХреА рдЧрдИ exception рдХреЛ catch рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `except` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЛрдИ рдЕрд▓рдЧ exception raise рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ `HTTPException`ред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрд╣ рдереЛрдбрд╝реА advanced technique рд╣реИ, рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ cases рдореЗрдВ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдиреЗ application code рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдЕрдВрджрд░ рд╕реЗ exceptions (рдЬрд┐рд╕рдореЗрдВ `HTTPException` рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ) raise рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, *path operation function* рдореЗрдВред
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛ рддреЛ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИред ЁЯдУ
+
+///
+
+{* ../../docs_src/dependencies/tutorial008b_an_py310.py hl[18:22,31] *}
+
+рдЕрдЧрд░ рдЖрдк exceptions рдХреЛ catch рдХрд░рдХреЗ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ custom response рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ [Custom Exception Handler](../handling-errors.md#install-custom-exception-handlers) рдмрдирд╛рдПрдБред
+
+## `yield` рдФрд░ `except` рд╡рд╛рд▓реА Dependencies { #dependencies-with-yield-and-except }
+
+рдЕрдЧрд░ рдЖрдк `yield` рд╡рд╛рд▓реА dependency рдореЗрдВ `except` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ exception catch рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ raise рдирд╣реАрдВ рдХрд░рддреЗ (рдпрд╛ рдХреЛрдИ рдирдИ exception raise рдирд╣реАрдВ рдХрд░рддреЗ), рддреЛ FastAPI рдпрд╣ notice рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ рдХрд┐ рдХреЛрдИ exception рд╣реБрдИ рдереА, рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЬреИрд╕реЗ regular Python рдореЗрдВ рд╣реЛрддрд╛:
+
+{* ../../docs_src/dependencies/tutorial008c_an_py310.py hl[15:16] *}
+
+рдЗрд╕ case рдореЗрдВ, client рдХреЛ *HTTP 500 Internal Server Error* response рджрд┐рдЦреЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо `HTTPException` рдпрд╛ рдЙрд╕рдХреЗ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ raise рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди server рдХреЗ рдкрд╛рд╕ **рдХреЛрдИ logs рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ** рдпрд╛ error рдХреНрдпрд╛ рдерд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред ЁЯШ▒
+
+### `yield` рдФрд░ `except` рд╡рд╛рд▓реА Dependencies рдореЗрдВ рд╣рдореЗрд╢рд╛ `raise` рдХрд░реЗрдВ { #always-raise-in-dependencies-with-yield-and-except }
+
+рдЕрдЧрд░ рдЖрдк `yield` рд╡рд╛рд▓реА dependency рдореЗрдВ exception catch рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рддрдХ рдЖрдк рдХреЛрдИ рджреВрд╕рд░реА `HTTPException` рдпрд╛ similar рдЪреАрдЬрд╝ raise рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, **рдЖрдкрдХреЛ original exception рдХреЛ рдлрд┐рд░ рд╕реЗ raise рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП**ред
+
+рдЖрдк `raise` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реА exception рдХреЛ рдлрд┐рд░ рд╕реЗ raise рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/dependencies/tutorial008d_an_py310.py hl[17] *}
+
+рдЕрдм client рдХреЛ рд╡рд╣реА *HTTP 500 Internal Server Error* response рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди server рдХреЗ logs рдореЗрдВ рд╣рдорд╛рд░рд╛ custom `InternalError` рд╣реЛрдЧрд╛ред ЁЯШО
+
+## `yield` рд╡рд╛рд▓реА dependencies рдХрд╛ Execution { #execution-of-dependencies-with-yield }
+
+Execution рдХрд╛ sequence рдХрдореЛрдмреЗрд╢ рдЗрд╕ diagram рдЬреИрд╕рд╛ рд╣реИред Time рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдХреА рдУрд░ рдЪрд▓рддрд╛ рд╣реИред рдФрд░ рд╣рд░ column code рдХреЗ рд╕рд╛рде interact рдХрд░рдиреЗ рдпрд╛ execute рдХрд░рдиреЗ рд╡рд╛рд▓реЗ parts рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
+
+```mermaid
+sequenceDiagram
+
+participant client as Client
+participant handler as Exception handler
+participant dep as Dep with yield
+participant operation as Path Operation
+participant tasks as Background tasks
+
+ Note over client,operation: Can raise exceptions, including HTTPException
+ client ->> dep: Start request
+ Note over dep: Run code up to yield
+ opt raise Exception
+ dep -->> handler: Raise Exception
+ handler -->> client: HTTP error response
+ end
+ dep ->> operation: Run dependency, e.g. DB session
+ opt raise
+ operation -->> dep: Raise Exception (e.g. HTTPException)
+ opt handle
+ dep -->> dep: Can catch exception, raise a new HTTPException, raise other exception
+ end
+ handler -->> client: HTTP error response
+ end
+
+ operation ->> client: Return response to client
+ Note over client,operation: Response is already sent, can't change it anymore
+ opt Tasks
+ operation -->> tasks: Send background tasks
+ end
+ opt Raise other exception
+ tasks -->> tasks: Handle exceptions in the background task code
+ end
+```
+
+/// note | рдиреЛрдЯ
+
+Client рдХреЛ рдХреЗрд╡рд▓ **рдПрдХ response** рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ error responses рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ *path operation* рд╕реЗ рдЖрдпрд╛ response рд╣реЛрдЧрд╛ред
+
+рдЙрди responses рдореЗрдВ рд╕реЗ рдПрдХ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЛрдИ рдЕрдиреНрдп response рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ред
+
+///
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд░ рдЖрдк *path operation function* рдХреЗ code рдореЗрдВ рдХреЛрдИ рднреА exception raise рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ yield рд╡рд╛рд▓реА dependencies рдХреЛ pass рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ `HTTPException` рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ cases рдореЗрдВ рдЖрдк рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ `yield` рд╡рд╛рд▓реА dependency рд╕реЗ рд╡рд╣реА exception рдпрд╛ рдХреЛрдИ рдирдИ exception рдлрд┐рд░ рд╕реЗ raise рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдЙрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ handle рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+///
+
+## Early exit рдФрд░ `scope` { #early-exit-and-scope }
+
+рдЖрдо рддреМрд░ рдкрд░ `yield` рд╡рд╛рд▓реА dependencies рдХрд╛ exit code client рдХреЛ **response** рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж execute рд╣реЛрддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ *path operation function* рд╕реЗ return рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ dependency рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреА, рддреЛ рдЖрдк `Depends(scope="function")` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ FastAPI рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕реЗ dependency рдХреЛ *path operation function* рдХреЗ return рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд▓реЗрдХрд┐рди **response рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ** close рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+{* ../../docs_src/dependencies/tutorial008e_an_py310.py hl[12,16] *}
+
+`Depends()` рдПрдХ `scope` parameter receive рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
+
+* `"function"`: request handle рдХрд░рдиреЗ рд╡рд╛рд▓реЗ *path operation function* рд╕реЗ рдкрд╣рд▓реЗ dependency рд╢реБрд░реВ рдХрд░реЗрдВ, *path operation function* рдЦрддреНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж dependency рдЦрддреНрдо рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди client рдХреЛ response рд╡рд╛рдкрд╕ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ **рдкрд╣рд▓реЗ**ред рдпрд╛рдиреА, dependency function *path operation **function*** рдХреЗ **around** execute рд╣реЛрдЧрд╛ред
+* `"request"`: request handle рдХрд░рдиреЗ рд╡рд╛рд▓реЗ *path operation function* рд╕реЗ рдкрд╣рд▓реЗ dependency рд╢реБрд░реВ рдХрд░реЗрдВ (`"function"` рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕рд╛), рд▓реЗрдХрд┐рди client рдХреЛ response рд╡рд╛рдкрд╕ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ **рдмрд╛рдж** рдЦрддреНрдо рдХрд░реЗрдВред рдпрд╛рдиреА, dependency function **request** рдФрд░ response cycle рдХреЗ **around** execute рд╣реЛрдЧрд╛ред
+
+рдЕрдЧрд░ specify рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ dependency рдореЗрдВ `yield` рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ `scope` default рд░реВрдк рд╕реЗ `"request"` рд╣реЛрдЧрд╛ред
+
+### Sub-dependencies рдХреЗ рд▓рд┐рдП `scope` { #scope-for-sub-dependencies }
+
+рдЬрдм рдЖрдк `scope="request"` (default) рд╡рд╛рд▓реА dependency declare рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рднреА sub-dependency рдХрд╛ `scope` рднреА `"request"` рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+рд▓реЗрдХрд┐рди `"function"` рдХреЗ `scope` рд╡рд╛рд▓реА dependency рдХреЗ рдкрд╛рд╕ `"function"` рдФрд░ `"request"` scope рд╡рд╛рд▓реА dependencies рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
+
+рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА dependency рдХреЛ sub-dependencies рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ exit code run рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реЗ рдЕрдкрдиреЗ exit code рдХреЗ рджреМрд░рд╛рди рдЕрднреА рднреА рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛ рд╕рдХрддреА рд╣реИред
+
+```mermaid
+sequenceDiagram
+
+participant client as Client
+participant dep_req as Dep scope="request"
+participant dep_func as Dep scope="function"
+participant operation as Path Operation
+
+ client ->> dep_req: Start request
+ Note over dep_req: Run code up to yield
+ dep_req ->> dep_func: Pass dependency
+ Note over dep_func: Run code up to yield
+ dep_func ->> operation: Run path operation with dependency
+ operation ->> dep_func: Return from path operation
+ Note over dep_func: Run code after yield
+ Note over dep_func: тЬЕ Dependency closed
+ dep_func ->> client: Send response to client
+ Note over client: Response sent
+ Note over dep_req: Run code after yield
+ Note over dep_req: тЬЕ Dependency closed
+```
+
+## `yield`, `HTTPException`, `except` рдФрд░ Background Tasks рд╡рд╛рд▓реА Dependencies { #dependencies-with-yield-httpexception-except-and-background-tasks }
+
+`yield` рд╡рд╛рд▓реА Dependencies рд╕рдордп рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ use cases cover рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ issues fix рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП evolve рд╣реБрдИ рд╣реИрдВред
+
+рдЕрдЧрд░ рдЖрдк рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ FastAPI рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ versions рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ advanced guide рдореЗрдВ, [Advanced Dependencies - `yield`, `HTTPException`, `except` рдФрд░ Background Tasks рд╡рд╛рд▓реА Dependencies](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks) рдореЗрдВ рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+## Context Managers { #context-managers }
+
+### "Context Managers" рдХреНрдпрд╛ рд╣реИрдВ { #what-are-context-managers }
+
+"Context Managers" рдЙрди Python objects рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк `with` statement рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, [рдЖрдк file рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП `with` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files):
+
+```Python
+with open("./somefile.txt") as f:
+ contents = f.read()
+ print(contents)
+```
+
+рдЕрдВрджрд░ рд╕реЗ, `open("./somefile.txt")` рдПрдХ object рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ "Context Manager" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдЬрдм `with` block рдЦрддреНрдо рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ file рдХреЛ close рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА exceptions рдЖрдИ рд╣реЛрдВред
+
+рдЬрдм рдЖрдк `yield` рд╡рд╛рд▓реА dependency рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ **FastAPI** internally рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ context manager рдмрдирд╛рдПрдЧрд╛, рдФрд░ рдЙрд╕реЗ рдХреБрдЫ рдЕрдиреНрдп related tools рдХреЗ рд╕рд╛рде combine рдХрд░реЗрдЧрд╛ред
+
+### `yield` рд╡рд╛рд▓реА dependencies рдореЗрдВ context managers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-context-managers-in-dependencies-with-yield }
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+рдпрд╣ рдХрдореЛрдмреЗрд╢ рдПрдХ "advanced" idea рд╣реИред
+
+рдЕрдЧрд░ рдЖрдк рдЕрднреА **FastAPI** рд╢реБрд░реВ рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдЖрдк рдЗрд╕реЗ рдЕрднреА skip рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
+
+///
+
+Python рдореЗрдВ, рдЖрдк [рджреЛ methods рд╡рд╛рд▓реА class рдмрдирд╛рдХрд░: `__enter__()` рдФрд░ `__exit__()`](https://docs.python.org/3/reference/datamodel.html#context-managers) Context Managers рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк dependency function рдХреЗ рдЕрдВрджрд░ `with` рдпрд╛ `async with` statements рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдиреНрд╣реЗрдВ `yield` рд╡рд╛рд▓реА **FastAPI** dependencies рдХреЗ рдЕрдВрджрд░ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/dependencies/tutorial010_py310.py hl[1:9,13] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+Context manager рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ:
+
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) рдпрд╛
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
+
+рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ single `yield` рд╡рд╛рд▓реЗ function рдХреЛ decorate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ред
+
+**FastAPI** internally `yield` рд╡рд╛рд▓реА dependencies рдХреЗ рд▓рд┐рдП рдпрд╣реА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ FastAPI dependencies рдХреЗ рд▓рд┐рдП decorators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЖрдкрдХреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред
+
+FastAPI internally рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░ рджреЗрдЧрд╛ред
+
+///
--- /dev/null
+# рд╡реИрд╢реНрд╡рд┐рдХ Dependencies { #global-dependencies }
+
+рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ applications рдХреЗ рд▓рд┐рдП рдЖрдк рдкреВрд░реЗ application рдореЗрдВ dependencies рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЬрд┐рд╕ рддрд░рд╣ рдЖрдк [*path operation decorators* рдореЗрдВ `dependencies` рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ](dependencies-in-path-operation-decorators.md), рдЙрд╕реА рддрд░рд╣ рдЖрдк рдЙрдиреНрд╣реЗрдВ `FastAPI` application рдореЗрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡реЗ application рдХреА рд╕рднреА *path operations* рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреА:
+
+{* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *}
+
+
+рдФрд░ [*path operation decorators* рдореЗрдВ `dependencies` рдЬреЛрдбрд╝рдиреЗ](dependencies-in-path-operation-decorators.md) рд╡рд╛рд▓реЗ section рдХреА рд╕рднреА рдмрд╛рддреЗрдВ рдЕрднреА рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, app рдХреА рд╕рднреА *path operations* рдкрд░ред
+
+## *path operations* рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП Dependencies { #dependencies-for-groups-of-path-operations }
+
+рдмрд╛рдж рдореЗрдВ, рдЬрдм рдЖрдк рдмрдбрд╝реЗ applications рдХреЛ рд╕рдВрд░рдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗ ([рдмрдбрд╝реЗ Applications - рдХрдИ Files](../../tutorial/bigger-applications.md)), рд╕рдВрднрд╡рддрдГ рдХрдИ files рдХреЗ рд╕рд╛рде, рддреЛ рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ *path operations* рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА `dependencies` parameter рдХреИрд╕реЗ declare рдХрд┐рдпрд╛ рдЬрд╛рдПред
--- /dev/null
+# Dependencies { #dependencies }
+
+**FastAPI** рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓реЗрдХрд┐рди рд╕рд╣рдЬ **<dfn title="рдЬрд┐рд╕реЗ components, resources, providers, services, injectables рдХреЗ рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ">Dependency Injection</dfn>** system рд╣реИред
+
+рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХрд┐рд╕реА рднреА developer рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ components рдХреЛ **FastAPI** рдХреЗ рд╕рд╛рде integrate рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+## "Dependency Injection" рдХреНрдпрд╛ рд╣реИ { #what-is-dependency-injection }
+
+**"Dependency Injection"** рдХрд╛ рдорддрд▓рдм programming рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ code (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ *path operation functions*) рдХреЗ рдкрд╛рд╕ рдпрд╣ declare рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рдЪреАрдЬрд╝реЛрдВ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ: "dependencies"ред
+
+рдФрд░ рдлрд┐рд░, рд╡рд╣ system (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ **FastAPI**) рдЖрдкрдХреЗ code рдХреЛ рд╡реЗ рдЬрд╝рд░реВрд░реА dependencies рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рднреА required рд╣реИ, рдЙрд╕рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ (dependencies рдХреЛ "inject" рдХрд░реЗрдЧрд╛)ред
+
+рдпрд╣ рддрдм рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ:
+
+* shared logic рдЪрд╛рд╣рд┐рдП (рд╡рд╣реА code logic рдмрд╛рд░-рдмрд╛рд░)ред
+* database connections share рдХрд░рдиреЗ рд╣реЛрдВред
+* security, authentication, role requirements, рдЖрджрд┐ enforce рдХрд░рдиреЗ рд╣реЛрдВред
+* рдФрд░ рднреА рдХрдИ рдЪреАрдЬрд╝реЗрдВ...
+
+рдпреЗ рд╕рдм, code repetition рдХреЛ рдХрдо рд╕реЗ рдХрдо рд░рдЦрддреЗ рд╣реБрдПред
+
+## рдкрд╣рд▓реЗ рдХрджрдо { #first-steps }
+
+рдЖрдЗрдП рдПрдХ рдмрд╣реБрдд рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВред рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ focus рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ **Dependency Injection** system рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
+
+### рдПрдХ dependency, рдпрд╛ "dependable" рдмрдирд╛рдПрдБ { #create-a-dependency-or-dependable }
+
+рдкрд╣рд▓реЗ dependency рдкрд░ focus рдХрд░рддреЗ рд╣реИрдВред
+
+рдпрд╣ рдмрд╕ рдПрдХ function рд╣реИ рдЬреЛ рд╡реЗ рд╕рднреА рд╕рдорд╛рди parameters рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ *path operation function* рд▓реЗ рд╕рдХрддрд╛ рд╣реИ:
+
+{* ../../docs_src/dependencies/tutorial001_an_py310.py hl[8:9] *}
+
+рдмрд╕ рдЗрддрдирд╛ рд╣реАред
+
+**2 lines**ред
+
+рдФрд░ рдЗрд╕рдХрд╛ shape рдФрд░ structure рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд╕рднреА *path operation functions* рдХрд╛ рд╣реЛрддрд╛ рд╣реИред
+
+рдЖрдк рдЗрд╕реЗ "decorator" рдХреЗ рдмрд┐рдирд╛ рдПрдХ *path operation function* рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ (`@app.get("/some-path")` рдХреЗ рдмрд┐рдирд╛)ред
+
+рдФрд░ рдпрд╣ рдЖрдкрдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдЫ рднреА return рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ dependency рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИ:
+
+* рдПрдХ optional query parameter `q` рдЬреЛ `str` рд╣реИред
+* рдПрдХ optional query parameter `skip` рдЬреЛ `int` рд╣реИ, рдФрд░ default рд░реВрдк рд╕реЗ `0` рд╣реИред
+* рдПрдХ optional query parameter `limit` рдЬреЛ `int` рд╣реИ, рдФрд░ default рд░реВрдк рд╕реЗ `100` рд╣реИред
+
+рдФрд░ рдлрд┐рд░ рдпрд╣ рдмрд╕ рдЙрди values рд╡рд╛рд▓рд╛ рдПрдХ `dict` return рдХрд░рддрд╛ рд╣реИред
+
+/// note | рдиреЛрдЯ
+
+FastAPI рдиреЗ version 0.95.0 рдореЗрдВ `Annotated` рдХреЗ рд▓рд┐рдП support рдЬреЛрдбрд╝рд╛ (рдФрд░ рдЗрд╕реЗ recommend рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛)ред
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреБрд░рд╛рдирд╛ version рд╣реИ, рддреЛ `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ errors рдорд┐рд▓реЗрдВрдЧреЗред
+
+`Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк [FastAPI version рдХреЛ Upgrade](../../deployment/versions.md#upgrading-the-fastapi-versions) рдХрд░рдХреЗ рдХрдо рд╕реЗ рдХрдо 0.95.1 рдХрд░ рд▓реЗрдВред
+
+///
+
+### `Depends` import рдХрд░реЗрдВ { #import-depends }
+
+{* ../../docs_src/dependencies/tutorial001_an_py310.py hl[3] *}
+
+### "dependant" рдореЗрдВ dependency declare рдХрд░реЗрдВ { #declare-the-dependency-in-the-dependant }
+
+рдЬрд┐рд╕ рддрд░рд╣ рдЖрдк рдЕрдкрдиреЗ *path operation function* parameters рдХреЗ рд╕рд╛рде `Body`, `Query`, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реА рддрд░рд╣ рдПрдХ рдирдП parameter рдХреЗ рд╕рд╛рде `Depends` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
+
+{* ../../docs_src/dependencies/tutorial001_an_py310.py hl[13,18] *}
+
+рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдЕрдкрдиреЗ function рдХреЗ parameters рдореЗрдВ `Depends` рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рддрд░рд╣ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк `Body`, `Query`, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, `Depends` рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
+
+рдЖрдк `Depends` рдХреЛ рдХреЗрд╡рд▓ рдПрдХ parameter рджреЗрддреЗ рд╣реИрдВред
+
+рдпрд╣ parameter рдХрд┐рд╕реА function рдЬреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ **call рдирд╣реАрдВ рдХрд░рддреЗ** (рдЕрдВрдд рдореЗрдВ parentheses рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ), рдЖрдк рдмрд╕ рдЗрд╕реЗ `Depends()` рдХреЛ рдПрдХ parameter рдХреЗ рд░реВрдк рдореЗрдВ pass рдХрд░рддреЗ рд╣реИрдВред
+
+рдФрд░ рд╡рд╣ function рдЙрд╕реА рддрд░рд╣ parameters рд▓реЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ *path operation functions* рд▓реЗрддреЗ рд╣реИрдВред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд▓реЗ chapter рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ functions рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреМрди рд╕реА рджреВрд╕рд░реА "рдЪреАрдЬрд╝реЗрдВ" dependencies рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
+
+///
+
+рдЬрдм рднреА рдХреЛрдИ рдирдпрд╛ request рдЖрддрд╛ рд╣реИ, **FastAPI** рдЗрди рдмрд╛рддреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛:
+
+* рдЖрдкрдХреА dependency ("dependable") function рдХреЛ рд╕рд╣реА parameters рдХреЗ рд╕рд╛рде call рдХрд░рдирд╛ред
+* рдЖрдкрдХреЗ function рд╕реЗ result рд▓реЗрдирд╛ред
+* рдЙрд╕ result рдХреЛ рдЖрдкрдХреЗ *path operation function* рдХреЗ parameter рдХреЛ assign рдХрд░рдирд╛ред
+
+```mermaid
+graph TB
+
+common_parameters(["common_parameters"])
+read_items["/items/"]
+read_users["/users/"]
+
+common_parameters --> read_items
+common_parameters --> read_users
+```
+
+рдЗрд╕ рддрд░рд╣ рдЖрдк shared code рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ **FastAPI** рдЖрдкрдХреЗ *path operations* рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ call рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреЛрдИ special class рдмрдирд╛рдХрд░ рдЙрд╕реЗ **FastAPI** рдХреЛ "register" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ pass рдХрд░рдиреЗ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
+
+рдЖрдк рдмрд╕ рдЗрд╕реЗ `Depends` рдХреЛ pass рдХрд░рддреЗ рд╣реИрдВ рдФрд░ **FastAPI** рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
+
+///
+
+## `Annotated` dependencies share рдХрд░реЗрдВ { #share-annotated-dependencies }
+
+рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ **code duplication** рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
+
+рдЬрдм рдЖрдкрдХреЛ `common_parameters()` dependency рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛ, рддреЛ рдЖрдкрдХреЛ type annotation рдФрд░ `Depends()` рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ parameter рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ:
+
+```Python
+commons: Annotated[dict, Depends(common_parameters)]
+```
+
+рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рд╣рдо `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЙрд╕ `Annotated` value рдХреЛ рдПрдХ variable рдореЗрдВ store рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрдИ рдЬрдЧрд╣реЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/dependencies/tutorial001_02_an_py310.py hl[12,16,21] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрд╣ рдмрд╕ standard Python рд╣реИ, рдЗрд╕реЗ "type alias" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ **FastAPI** рдХреЗ рд▓рд┐рдП specific рдирд╣реАрдВ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ **FastAPI** Python standards рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ `Annotated` рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ code рдореЗрдВ рдЗрд╕ trick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ЁЯШО
+
+///
+
+dependencies рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд░рд╣реЗрдВрдЧреА, рдФрд░ **рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд** рдпрд╣ рд╣реИ рдХрд┐ **type information preserve рд░рд╣реЗрдЧреА**, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ editor рдЖрдкрдХреЛ **autocompletion**, **inline errors**, рдЖрджрд┐ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХреЗрдЧрд╛ред рдпрд╣реА рдмрд╛рдд `mypy` рдЬреИрд╕реЗ рджреВрд╕рд░реЗ tools рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред
+
+рдпрд╣ рдЦрд╛рд╕ рддреМрд░ рдкрд░ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк рдЗрд╕реЗ рдПрдХ **large code base** рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдк **рд╡рд╣реА dependencies** рдмрд╛рд░-рдмрд╛рд░ **рдХрдИ *path operations*** рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+## `async` рдХрд░реЗрдВ рдпрд╛ `async` рди рдХрд░реЗрдВ { #to-async-or-not-to-async }
+
+рдХреНрдпреЛрдВрдХрд┐ dependencies рдХреЛ рднреА **FastAPI** рджреНрд╡рд╛рд░рд╛ call рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЖрдкрдХреЗ *path operation functions* рдХреА рддрд░рд╣), functions define рдХрд░рддреЗ рд╕рдордп рд╡рд╣реА rules рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
+
+рдЖрдк `async def` рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп `def` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдФрд░ рдЖрдк normal `def` *path operation functions* рдХреЗ рдЕрдВрджрд░ `async def` dependencies declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ `async def` *path operation functions* рдХреЗ рдЕрдВрджрд░ `def` dependencies, рдЖрджрд┐ред
+
+рдЗрд╕рд╕реЗ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред **FastAPI** рдЬрд╛рдирддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
+
+/// note | рдиреЛрдЯ
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ рдирд╣реАрдВ рдкрддрд╛, рддреЛ docs рдореЗрдВ `async` рдФрд░ `await` рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ [Async: *"In a hurry?"*](../../async.md#in-a-hurry) section рджреЗрдЦреЗрдВред
+
+///
+
+## OpenAPI рдХреЗ рд╕рд╛рде integrated { #integrated-with-openapi }
+
+рдЖрдкрдХреА dependencies (рдФрд░ sub-dependencies) рдХреА рд╕рднреА request declarations, validations рдФрд░ requirements рдЙрд╕реА OpenAPI schema рдореЗрдВ integrate рдХреА рдЬрд╛рдПрдБрдЧреАред
+
+рдЗрд╕рд▓рд┐рдП, interactive docs рдореЗрдВ рдЗрди dependencies рдХреА рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рднреА рд╣реЛрдЧреА:
+
+<img src="/img/tutorial/dependencies/image01.png">
+
+## рд╕рд░рд▓ рдЙрдкрдпреЛрдЧ { #simple-usage }
+
+рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рджреЗрдЦреЗрдВ, рддреЛ *path operation functions* рдЗрд╕ рддрд░рд╣ declare рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рднреА рдХреЛрдИ *path* рдФрд░ *operation* match рдХрд░рддрд╛ рд╣реИ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдлрд┐рд░ **FastAPI** рд╕рд╣реА parameters рдХреЗ рд╕рд╛рде function рдХреЛ call рдХрд░рдиреЗ рдФрд░ request рд╕реЗ data extract рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред
+
+рдЕрд╕рд▓ рдореЗрдВ, рд╕рднреА (рдпрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢) web frameworks рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
+
+рдЖрдк рдЙрди functions рдХреЛ рдХрднреА рд╕реАрдзреЗ call рдирд╣реАрдВ рдХрд░рддреЗред рд╡реЗ рдЖрдкрдХреЗ framework рджреНрд╡рд╛рд░рд╛ call рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, **FastAPI**)ред
+
+Dependency Injection system рдХреЗ рд╕рд╛рде, рдЖрдк **FastAPI** рдХреЛ рдпрд╣ рднреА рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ *path operation function* рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдкрд░ рднреА "depend" рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ *path operation function* рд╕реЗ рдкрд╣рд▓реЗ execute рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ **FastAPI** рдЙрд╕реЗ execute рдХрд░рдиреЗ рдФрд░ results рдХреЛ "inject" рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
+
+"dependency injection" рдХреЗ рдЗрд╕реА idea рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп common terms рд╣реИрдВ:
+
+* resources
+* providers
+* services
+* injectables
+* components
+
+## **FastAPI** plug-ins { #fastapi-plug-ins }
+
+Integrations рдФрд░ "plug-ins" **Dependency Injection** system рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, **"plug-ins" рдмрдирд╛рдиреЗ рдХреА рдХреЛрдИ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ**, рдХреНрдпреЛрдВрдХрд┐ dependencies рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдирдЧрд┐рдирдд integrations рдФрд░ interactions declare рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ *path operation functions* рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
+
+рдФрд░ dependencies рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдмрд╕ рдЕрдкрдиреЗ required Python packages import рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ API functions рдХреЗ рд╕рд╛рде рдХреБрдЫ lines of code рдореЗрдВ integrate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, *literally*ред
+
+рдЖрдк рдЕрдЧрд▓реЗ chapters рдореЗрдВ relational рдФрд░ NoSQL databases, security, рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕рдХреЗ examples рджреЗрдЦреЗрдВрдЧреЗред
+
+## **FastAPI** compatibility { #fastapi-compatibility }
+
+Dependency injection system рдХреА рд╕рд░рд▓рддрд╛ **FastAPI** рдХреЛ рдЗрдирдХреЗ рд╕рд╛рде compatible рдмрдирд╛рддреА рд╣реИ:
+
+* рд╕рднреА relational databases
+* NoSQL databases
+* external packages
+* external APIs
+* authentication рдФрд░ authorization systems
+* API usage monitoring systems
+* response data injection systems
+* рдЖрджрд┐ред
+
+## рд╕рд░рд▓ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА { #simple-and-powerful }
+
+рд╣рд╛рд▓рд╛рдБрдХрд┐ hierarchical dependency injection system рдХреЛ define рдФрд░ use рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред
+
+рдЖрдк рдРрд╕реА dependencies define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЦреБрдж dependencies define рдХрд░ рд╕рдХрддреА рд╣реИрдВред
+
+рдЕрдВрдд рдореЗрдВ, dependencies рдХрд╛ рдПрдХ hierarchical tree рдмрдирддрд╛ рд╣реИ, рдФрд░ **Dependency Injection** system рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрди рд╕рднреА dependencies (рдФрд░ рдЙрдирдХреА sub-dependencies) рдХреЛ solve рдХрд░рдиреЗ рдФрд░ рд╣рд░ step рдкрд░ results рдкреНрд░рджрд╛рди рдХрд░рдиреЗ (inject рдХрд░рдиреЗ) рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 4 API endpoints (*path operations*) рд╣реИрдВ:
+
+* `/items/public/`
+* `/items/private/`
+* `/users/{user_id}/activate`
+* `/items/pro/`
+
+рддреЛ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ permission requirements рдХреЗрд╡рд▓ dependencies рдФрд░ sub-dependencies рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```mermaid
+graph TB
+
+current_user(["current_user"])
+active_user(["active_user"])
+admin_user(["admin_user"])
+paying_user(["paying_user"])
+
+public["/items/public/"]
+private["/items/private/"]
+activate_user["/users/{user_id}/activate"]
+pro_items["/items/pro/"]
+
+current_user --> active_user
+active_user --> admin_user
+active_user --> paying_user
+
+current_user --> public
+active_user --> private
+admin_user --> activate_user
+paying_user --> pro_items
+```
+
+## **OpenAPI** рдХреЗ рд╕рд╛рде integrated { #integrated-with-openapi_1 }
+
+рдпреЗ рд╕рднреА dependencies, рдЕрдкрдиреА requirements declare рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЗ *path operations* рдореЗрдВ parameters, validations, рдЖрджрд┐ рднреА рдЬреЛрдбрд╝рддреА рд╣реИрдВред
+
+**FastAPI** рдпрд╣ рд╕рдм OpenAPI schema рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛, рддрд╛рдХрд┐ рдпрд╣ interactive documentation systems рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
--- /dev/null
+# Sub-dependencies { #sub-dependencies }
+
+рдЖрдк рдРрд╕реА dependencies рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдЕрдкрдиреА **sub-dependencies** рд╣реЛрдВред
+
+рд╡реЗ рдЙрддрдиреА **deep** рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рддрдиреА рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред
+
+**FastAPI** рдЙрдиреНрд╣реЗрдВ solve рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
+
+## рдкрд╣рд▓реА dependency "dependable" { #first-dependency-dependable }
+
+рдЖрдк рдкрд╣рд▓реА dependency ("dependable") рдЗрд╕ рддрд░рд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[8:9] *}
+
+рдпрд╣ рдПрдХ optional query parameter `q` рдХреЛ `str` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╕ рдЙрд╕реЗ return рдХрд░рддрд╛ рд╣реИред
+
+рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ (рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ), рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдХрд┐ sub-dependencies рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред
+
+## рджреВрд╕рд░реА dependency, "dependable" рдФрд░ "dependant" { #second-dependency-dependable-and-dependant }
+
+рдлрд┐рд░ рдЖрдк рдПрдХ рдФрд░ dependency function (рдПрдХ "dependable") рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕реА рд╕рдордп рдЕрдкрдиреА рдЦреБрдж рдХреА dependency declare рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ "dependant" рднреА рд╣реИ):
+
+{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[13] *}
+
+рдЖрдЗрдП declared parameters рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
+
+* рднрд▓реЗ рд╣реА рдпрд╣ function рдЦреБрдж рдПрдХ dependency ("dependable") рд╣реИ, рдпрд╣ рдПрдХ рдФрд░ dependency рднреА declare рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдкрд░ "depends" рдХрд░рддрд╛ рд╣реИ)ред
+ * рдпрд╣ `query_extractor` рдкрд░ depends рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ return рдХрд┐рдП рдЧрдП value рдХреЛ parameter `q` рдореЗрдВ assign рдХрд░рддрд╛ рд╣реИред
+* рдпрд╣ рдПрдХ optional `last_query` cookie рдХреЛ рднреА `str` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░рддрд╛ рд╣реИред
+ * рдЕрдЧрд░ user рдиреЗ рдХреЛрдИ query `q` provide рдирд╣реАрдВ рдХреА, рддреЛ рд╣рдо рдкрд┐рдЫрд▓реА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЧрдИ query рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдПрдХ cookie рдореЗрдВ save рдХрд┐рдпрд╛ рдерд╛ред
+
+## dependency рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-the-dependency }
+
+рдлрд┐рд░ рд╣рдо dependency рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *}
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо *path operation function* рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ dependency declare рдХрд░ рд░рд╣реЗ рд╣реИрдВ, `query_or_cookie_extractor`ред
+
+рд▓реЗрдХрд┐рди **FastAPI** рдХреЛ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ `query_or_cookie_extractor` рдХреЛ call рдХрд░рддреЗ рд╕рдордп рдЙрд╕рдХреЗ results pass рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ `query_extractor` рдХреЛ solve рдХрд░рдирд╛ рд╣реИред
+
+///
+
+```mermaid
+graph TB
+
+query_extractor(["query_extractor"])
+query_or_cookie_extractor(["query_or_cookie_extractor"])
+
+read_query["/items/"]
+
+query_extractor --> query_or_cookie_extractor --> read_query
+```
+
+## рдЙрд╕реА dependency рдХреЛ рдХрдИ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-the-same-dependency-multiple-times }
+
+рдЕрдЧрд░ рдЖрдкрдХреА рдХрд┐рд╕реА dependency рдХреЛ рдЙрд╕реА *path operation* рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ dependencies рдХреА рдХреЛрдИ common sub-dependency рд╣реИ, рддреЛ **FastAPI** рдЬрд╛рдирддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕ sub-dependency рдХреЛ рдкреНрд░рддрд┐ request рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ call рдХрд░рдирд╛ рд╣реИред
+
+рдФрд░ рдпрд╣ return рдХрд┐рдП рдЧрдП value рдХреЛ рдПрдХ <dfn title="computed/generated values рдХреЛ store рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ compute рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп reuse рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ utility/system">"cache"</dfn> рдореЗрдВ save рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдЙрди рд╕рднреА "dependants" рдХреЛ pass рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрд╕ specific request рдореЗрдВ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдмрдЬрд╛рдп рдЙрд╕реА request рдХреЗ рд▓рд┐рдП dependency рдХреЛ рдХрдИ рдмрд╛рд░ call рдХрд░рдиреЗ рдХреЗред
+
+рдПрдХ advanced scenario рдореЗрдВ, рдЬрд╣рд╛рдБ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЙрд╕реА request рдореЗрдВ "cached" value рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╣рд░ step рдкрд░ dependency рдХреЛ call рдХрд░рд╡рд╛рдирд╛ рд╣реИ (рд╕рдВрднрд╡рддрдГ рдХрдИ рдмрд╛рд░), рдЖрдк `Depends` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп parameter `use_cache=False` set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+//// tab | Python 3.10+
+
+```Python hl_lines="1"
+async def needy_dependency(fresh_value: Annotated[str, Depends(get_value, use_cache=False)]):
+ return {"fresh_value": fresh_value}
+```
+
+////
+
+//// tab | Python 3.10+ non-Annotated
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд░ рд╕рдВрднрд╡ рд╣реЛ рддреЛ `Annotated` version рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВред
+
+///
+
+```Python hl_lines="1"
+async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False)):
+ return {"fresh_value": fresh_value}
+```
+
+////
+
+## Recap { #recap }
+
+рдпрд╣рд╛рдБ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд╕рднреА fancy words рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ, рддреЛ **Dependency Injection** system рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
+
+рдмрд╕ рдРрд╕реЗ functions рдЬреЛ *path operation functions* рдЬреИрд╕реЗ рд╣реА рджрд┐рдЦрддреЗ рд╣реИрдВред
+
+рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ рдмрд╣реБрдд powerful рд╣реИ, рдФрд░ рдЖрдкрдХреЛ arbitrarily deeply nested dependency "graphs" (trees) declare рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЗрди рд╕рд░рд▓ examples рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдм рдЗрддрдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд▓рдЧ рд╕рдХрддрд╛ред
+
+рд▓реЗрдХрд┐рди **security** рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ chapters рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред
+
+рдФрд░ рдЖрдк рдпрд╣ рднреА рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдЖрдкрдХрд╛ рдХрд┐рддрдирд╛ code рдмрдЪрд╛рдПрдЧрд╛ред
+
+///
--- /dev/null
+# JSON рд╕рдВрдЧрдд Encoder { #json-compatible-encoder }
+
+рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдХрд┐рд╕реА data type (рдЬреИрд╕реЗ Pydantic model) рдХреЛ JSON рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдХрд┐рд╕реА рдЪреАрдЬрд╝ (рдЬреИрд╕реЗ `dict`, `list`, рдЖрджрд┐) рдореЗрдВ convert рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝ рд╕рдХрддреА рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ database рдореЗрдВ store рдХрд░рдирд╛ рд╣реЛред
+
+рдЗрд╕рдХреЗ рд▓рд┐рдП, **FastAPI** рдПрдХ `jsonable_encoder()` function рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
+
+## `jsonable_encoder` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-the-jsonable-encoder }
+
+рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ database `fake_db` рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ JSON рд╕рдВрдЧрдд data рд╣реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ `datetime` objects рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ JSON рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реЛрддреЗред
+
+рдЗрд╕рд▓рд┐рдП, рдПрдХ `datetime` object рдХреЛ [ISO format](https://en.wikipedia.org/wiki/ISO_8601) рдореЗрдВ data рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ `str` рдореЗрдВ convert рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
+
+рдЗрд╕реА рддрд░рд╣, рдпрд╣ database Pydantic model (attributes рд╡рд╛рд▓рд╛ рдПрдХ object) рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреЗрд╡рд▓ рдПрдХ `dict`ред
+
+рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк `jsonable_encoder` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣ рдПрдХ object, рдЬреИрд╕реЗ Pydantic model, рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ JSON рд╕рдВрдЧрдд version рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
+
+{* ../../docs_src/encoder/tutorial001_py310.py hl[4,21] *}
+
+рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ Pydantic model рдХреЛ `dict` рдореЗрдВ рдФрд░ `datetime` рдХреЛ `str` рдореЗрдВ convert рдХрд░реЗрдЧрд╛ред
+
+рдЗрд╕реЗ call рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ Python standard [`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps) рдХреЗ рд╕рд╛рде encode рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+
+рдпрд╣ JSON format рдореЗрдВ data рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдмрдбрд╝рд╛ `str` (string рдХреЗ рд░реВрдк рдореЗрдВ) return рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрд╣ рдПрдХ Python standard data structure (рдЬреИрд╕реЗ `dict`) return рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ values рдФрд░ sub-values рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рд╕рднреА JSON рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрддреА рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+`jsonable_encoder` рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ **FastAPI** рджреНрд╡рд╛рд░рд╛ internally data convert рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рдЕрдиреНрдп scenarios рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИред
+
+///
--- /dev/null
+# рдЕрддрд┐рд░рд┐рдХреНрдд Data Types { #extra-data-types }
+
+рдЕрдм рддрдХ, рдЖрдк рд╕рд╛рдорд╛рдиреНрдп data types рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд░рд╣реЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
+
+* `int`
+* `float`
+* `str`
+* `bool`
+
+рд▓реЗрдХрд┐рди рдЖрдк рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ data types рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдФрд░ рдЖрдкрдХреЛ рдЕрдм рддрдХ рджреЗрдЦреА рдЧрдИ рд╡рд╣реА features рдорд┐рд▓рддреА рд░рд╣реЗрдВрдЧреА:
+
+* рд╢рд╛рдирджрд╛рд░ editor support.
+* рдЖрдиреЗ рд╡рд╛рд▓реА requests рд╕реЗ data conversion.
+* response data рдХреЗ рд▓рд┐рдП data conversion.
+* Data validation.
+* Automatic annotation рдФрд░ documentation.
+
+## рдЕрдиреНрдп data types { #other-data-types }
+
+рдпрд╣рд╛рдБ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд data types рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* `UUID`:
+ * рдПрдХ standard "Universally Unique Identifier", рдЬреЛ рдХрдИ databases рдФрд░ systems рдореЗрдВ ID рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдо рд╣реИред
+ * requests рдФрд░ responses рдореЗрдВ рдЗрд╕реЗ `str` рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+* `datetime.datetime`:
+ * рдПрдХ Python `datetime.datetime`.
+ * requests рдФрд░ responses рдореЗрдВ рдЗрд╕реЗ ISO 8601 format рдореЗрдВ `str` рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ: `2008-09-15T15:53:00+05:00`.
+* `datetime.date`:
+ * Python `datetime.date`.
+ * requests рдФрд░ responses рдореЗрдВ рдЗрд╕реЗ ISO 8601 format рдореЗрдВ `str` рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ: `2008-09-15`.
+* `datetime.time`:
+ * рдПрдХ Python `datetime.time`.
+ * requests рдФрд░ responses рдореЗрдВ рдЗрд╕реЗ ISO 8601 format рдореЗрдВ `str` рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ: `14:23:55.003`.
+* `datetime.timedelta`:
+ * рдПрдХ Python `datetime.timedelta`.
+ * requests рдФрд░ responses рдореЗрдВ рдЗрд╕реЗ рдХреБрд▓ seconds рдХреЗ `float` рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+ * Pydantic рдЗрд╕реЗ "ISO 8601 time diff encoding" рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИ, [рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП docs рджреЗрдЦреЗрдВ](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers).
+* `frozenset`:
+ * requests рдФрд░ responses рдореЗрдВ, рдЗрд╕реЗ `set` рдЬреИрд╕рд╛ рд╣реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:
+ * requests рдореЗрдВ, рдПрдХ list рдкрдврд╝реА рдЬрд╛рдПрдЧреА, duplicates рд╣рдЯрд╛рдП рдЬрд╛рдПрдБрдЧреЗ рдФрд░ рдЙрд╕реЗ `set` рдореЗрдВ convert рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+ * responses рдореЗрдВ, `set` рдХреЛ `list` рдореЗрдВ convert рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+ * generate рдХрд┐рдпрд╛ рдЧрдпрд╛ schema рдмрддрд╛рдПрдЧрд╛ рдХрд┐ `set` values unique рд╣реИрдВ (JSON Schema рдХреЗ `uniqueItems` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП)ред
+* `bytes`:
+ * Standard Python `bytes`.
+ * requests рдФрд░ responses рдореЗрдВ рдЗрд╕реЗ `str` рдХреА рддрд░рд╣ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
+ * generate рдХрд┐рдпрд╛ рдЧрдпрд╛ schema рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ `binary` "format" рд╡рд╛рд▓рд╛ `str` рд╣реИред
+* `Decimal`:
+ * Standard Python `Decimal`.
+ * requests рдФрд░ responses рдореЗрдВ, рдЗрд╕реЗ `float` рдЬреИрд╕рд╛ рд╣реА handle рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+* рдЖрдк рд╕рднреА valid Pydantic data types рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: [Pydantic data types](https://docs.pydantic.dev/latest/usage/types/types/).
+
+## рдЙрджрд╛рд╣рд░рдг { #example }
+
+рдпрд╣рд╛рдБ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреБрдЫ types рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП parameters рд╡рд╛рд▓рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг *path operation* рд╣реИред
+
+{* ../../docs_src/extra_data_types/tutorial001_an_py310.py hl[1,3,12:16] *}
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ function рдХреЗ рдЕрдВрджрд░ parameters рдХреЗ рдЕрдкрдиреЗ natural data type рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд╛рдорд╛рдиреНрдп date manipulations рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
+
+{* ../../docs_src/extra_data_types/tutorial001_an_py310.py hl[18:19] *}
--- /dev/null
+# Extra Models { #extra-models }
+
+рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП, рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдмрдВрдзрд┐рдд model рд╣реЛрдирд╛ рдЖрдо рдмрд╛рдд рд╣реЛрдЧреАред
+
+рдпрд╣ рдЦрд╛рд╕рдХрд░ user models рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:
+
+* **input model** рдореЗрдВ password рд╣реЛ рд╕рдХрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рд┐рдПред
+* **output model** рдореЗрдВ password рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+* **database model** рдореЗрдВ рд╢рд╛рдпрдж hashed password рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+/// danger | рдЦрддрд░рд╛
+
+user рдХреЗ plaintext passwords рдХрднреА store рди рдХрд░реЗрдВред рд╣рдореЗрд╢рд╛ рдПрдХ "secure hash" store рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдмрд╛рдж рдореЗрдВ verify рдХрд░ рд╕рдХреЗрдВред
+
+рдЕрдЧрд░ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ, рддреЛ рдЖрдк [security chapters](security/simple-oauth2.md#password-hashing) рдореЗрдВ рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ "password hash" рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред
+
+///
+
+## рдХрдИ models { #multiple-models }
+
+рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп idea рд╣реИ рдХрд┐ models рдЕрдкрдиреЗ password fields рдФрд░ рдЬрд╣рд╛рдБ рд╡реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдБ рдХреИрд╕реЗ рджрд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/extra_models/tutorial001_py310.py hl[7,9,14,20,22,27:28,31:33,38:39] *}
+
+### `**user_in.model_dump()` рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ { #about-user-in-model-dump }
+
+#### Pydantic рдХрд╛ `.model_dump()` { #pydantics-model-dump }
+
+`user_in`, class `UserIn` рдХрд╛ рдПрдХ Pydantic model рд╣реИред
+
+Pydantic models рдореЗрдВ рдПрдХ `.model_dump()` method рд╣реЛрддрд╛ рд╣реИ рдЬреЛ model рдХреЗ data рдХреЗ рд╕рд╛рде рдПрдХ `dict` return рдХрд░рддрд╛ рд╣реИред
+
+рддреЛ, рдЕрдЧрд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рдПрдХ Pydantic object `user_in` рдмрдирд╛рддреЗ рд╣реИрдВ:
+
+```Python
+user_in = UserIn(username="john", password="secret", email="john.doe@example.com")
+```
+
+рдФрд░ рдлрд┐рд░ рд╣рдо call рдХрд░рддреЗ рд╣реИрдВ:
+
+```Python
+user_dict = user_in.model_dump()
+```
+
+рддреЛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ variable `user_dict` рдореЗрдВ data рдХреЗ рд╕рд╛рде рдПрдХ `dict` рд╣реИ (рдпрд╣ Pydantic model object рдХреЗ рдмрдЬрд╛рдп рдПрдХ `dict` рд╣реИ)ред
+
+рдФрд░ рдЕрдЧрд░ рд╣рдо call рдХрд░рддреЗ рд╣реИрдВ:
+
+```Python
+print(user_dict)
+```
+
+рддреЛ рд╣рдореЗрдВ рдпрд╣ Python `dict` рдорд┐рд▓реЗрдЧрд╛:
+
+```Python
+{
+ 'username': 'john',
+ 'password': 'secret',
+ 'email': 'john.doe@example.com',
+ 'full_name': None,
+}
+```
+
+#### рдПрдХ `dict` рдХреЛ unpack рдХрд░рдирд╛ { #unpacking-a-dict }
+
+рдЕрдЧрд░ рд╣рдо `user_dict` рдЬреИрд╕рд╛ рдПрдХ `dict` рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рдХрд┐рд╕реА function (рдпрд╛ class) рдХреЛ `**user_dict` рдХреЗ рд╕рд╛рде pass рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Python рдЙрд╕реЗ "unpack" рдХрд░реЗрдЧрд╛ред рдпрд╣ `user_dict` рдХреА keys рдФрд░ values рдХреЛ рд╕реАрдзреЗ key-value arguments рдХреЗ рд░реВрдк рдореЗрдВ pass рдХрд░реЗрдЧрд╛ред
+
+рддреЛ, рдКрдкрд░ рд╡рд╛рд▓реЗ `user_dict` рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ рд▓рд┐рдЦрдирд╛:
+
+```Python
+UserInDB(**user_dict)
+```
+
+рдХреБрдЫ рдЗрд╕ equivalent result рджреЗрдЧрд╛:
+
+```Python
+UserInDB(
+ username="john",
+ password="secret",
+ email="john.doe@example.com",
+ full_name=None,
+)
+```
+
+рдпрд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд░реВрдк рдореЗрдВ, `user_dict` рдХреЛ рд╕реАрдзреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реБрдП, рдЙрд╕рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬреЛ рднреА contents рд╣реЛрдВ:
+
+```Python
+UserInDB(
+ username = user_dict["username"],
+ password = user_dict["password"],
+ email = user_dict["email"],
+ full_name = user_dict["full_name"],
+)
+```
+
+#### рджреВрд╕рд░реЗ model рдХреЗ contents рд╕реЗ рдПрдХ Pydantic model { #a-pydantic-model-from-the-contents-of-another }
+
+рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдореЗрдВ `user_in.model_dump()` рд╕реЗ `user_dict` рдорд┐рд▓рд╛, рдпрд╣ code:
+
+```Python
+user_dict = user_in.model_dump()
+UserInDB(**user_dict)
+```
+
+рдЗрд╕рдХреЗ equivalent рд╣реЛрдЧрд╛:
+
+```Python
+UserInDB(**user_in.model_dump())
+```
+
+...рдХреНрдпреЛрдВрдХрд┐ `user_in.model_dump()` рдПрдХ `dict` рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрд╕реЗ `**` prefix рдХреЗ рд╕рд╛рде `UserInDB` рдХреЛ pass рдХрд░рдХреЗ Python рд╕реЗ рдЙрд╕реЗ "unpack" рдХрд░рд╡рд╛рддреЗ рд╣реИрдВред
+
+рддреЛ, рд╣рдореЗрдВ рдПрдХ Pydantic model рдХреЗ data рд╕реЗ рджреВрд╕рд░рд╛ Pydantic model рдорд┐рд▓рддрд╛ рд╣реИред
+
+#### рдПрдХ `dict` рдХреЛ unpack рдХрд░рдирд╛ рдФрд░ extra keywords { #unpacking-a-dict-and-extra-keywords }
+
+рдФрд░ рдлрд┐рд░ extra keyword argument `hashed_password=hashed_password` рдЬреЛрдбрд╝рдирд╛, рдЬреИрд╕реЗ:
+
+```Python
+UserInDB(**user_in.model_dump(), hashed_password=hashed_password)
+```
+
+...рдЕрдВрдд рдореЗрдВ рдРрд╕рд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ:
+
+```Python
+UserInDB(
+ username = user_dict["username"],
+ password = user_dict["password"],
+ email = user_dict["email"],
+ full_name = user_dict["full_name"],
+ hashed_password = hashed_password,
+)
+```
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+supporting additional functions `fake_password_hasher` рдФрд░ `fake_save_user` рд╕рд┐рд░реНрдл data рдХреЗ рдПрдХ possible flow рдХреЛ demo рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдИ real security рдирд╣реАрдВ рджреЗ рд░рд╣реЗ рд╣реИрдВред
+
+///
+
+## Duplication рдХрдо рдХрд░реЗрдВ { #reduce-duplication }
+
+Code duplication рдХрдо рдХрд░рдирд╛ **FastAPI** рдХреЗ core ideas рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
+
+рдХреНрдпреЛрдВрдХрд┐ code duplication рдмрдврд╝рдиреЗ рд╕реЗ bugs, security issues, code desynchronization issues (рдЬрдм рдЖрдк рдПрдХ рдЬрдЧрд╣ update рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдЬрдЧрд╣ рдирд╣реАрдВ), рдЖрджрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред
+
+рдФрд░ рдпреЗ models рдмрд╣реБрдд рд╕рд╛рд░рд╛ data share рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ attribute names рдФрд░ types рдХреЛ duplicate рдХрд░ рд░рд╣реЗ рд╣реИрдВред
+
+рд╣рдо рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рд╣рдо рдПрдХ `UserBase` model declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рджреВрд╕рд░реЗ models рдХреЗ рд▓рд┐рдП base рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрд╕ model рдХреА subclasses рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕рдХреЗ attributes (type declarations, validation, рдЖрджрд┐) inherit рдХрд░рддреА рд╣реИрдВред
+
+рд╕рд╛рд░рд╛ data conversion, validation, documentation, рдЖрджрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣реЗрдЧрд╛ред
+
+рдЗрд╕ рддрд░рд╣, рд╣рдо рдХреЗрд╡рд▓ models рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (plaintext `password` рдХреЗ рд╕рд╛рде, `hashed_password` рдХреЗ рд╕рд╛рде рдФрд░ password рдХреЗ рдмрд┐рдирд╛):
+
+{* ../../docs_src/extra_models/tutorial002_py310.py hl[7,13:14,17:18,21:22] *}
+
+## `Union` рдпрд╛ `anyOf` { #union-or-anyof }
+
+рдЖрдк response рдХреЛ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ types рдХреЗ `Union` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ response рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+рдЗрд╕реЗ OpenAPI рдореЗрдВ `anyOf` рдХреЗ рд╕рд╛рде define рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, standard Python type hint [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ:
+
+/// note | рдиреЛрдЯ
+
+[`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions) define рдХрд░рддреЗ рд╕рдордп, рд╕рдмрд╕реЗ specific type рдХреЛ рдкрд╣рд▓реЗ include рдХрд░реЗрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж рдХрдо specific type рдХреЛред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЕрдзрд┐рдХ specific `PlaneItem`, `Union[PlaneItem, CarItem]` рдореЗрдВ `CarItem` рд╕реЗ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИред
+
+///
+
+{* ../../docs_src/extra_models/tutorial003_py310.py hl[1,14:15,18:20,33] *}
+
+### Python 3.10 рдореЗрдВ `Union` { #union-in-python-3-10 }
+
+рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо argument `response_model` рдХреА value рдХреЗ рд░реВрдк рдореЗрдВ `Union[PlaneItem, CarItem]` pass рдХрд░рддреЗ рд╣реИрдВред
+
+рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ **type annotation** рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп **argument рдХреЛ value** рдХреЗ рд░реВрдк рдореЗрдВ pass рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ Python 3.10 рдореЗрдВ рднреА `Union` рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
+
+рдЕрдЧрд░ рдпрд╣ type annotation рдореЗрдВ рд╣реЛрддрд╛ рддреЛ рд╣рдо vertical bar рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рдереЗ, рдЬреИрд╕реЗ:
+
+```Python
+some_variable: PlaneItem | CarItem
+```
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ assignment `response_model=PlaneItem | CarItem` рдореЗрдВ рдбрд╛рд▓рддреЗ, рддреЛ рд╣рдореЗрдВ error рдорд┐рд▓рддрд╛, рдХреНрдпреЛрдВрдХрд┐ Python рдЗрд╕реЗ type annotation рдХреЗ рд░реВрдк рдореЗрдВ interpret рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп `PlaneItem` рдФрд░ `CarItem` рдХреЗ рдмреАрдЪ рдПрдХ **invalid operation** perform рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ред
+
+## Models рдХреА list { #list-of-models }
+
+рдЗрд╕реА рддрд░рд╣, рдЖрдк objects рдХреА lists рдХреЗ responses declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕рдХреЗ рд▓рд┐рдП, standard Python `list` рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ:
+
+{* ../../docs_src/extra_models/tutorial004_py310.py hl[18] *}
+
+## Arbitrary `dict` рдХреЗ рд╕рд╛рде response { #response-with-arbitrary-dict }
+
+рдЖрдк plain arbitrary `dict` рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рднреА response declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ Pydantic model рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ keys рдФрд░ values рдХрд╛ type declare рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдкрдХреЛ valid field/attribute names (рдЬреЛ Pydantic model рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рд┐рдП рд╣реЛрдВрдЧреЗ) рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдВред
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк `dict` рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/extra_models/tutorial005_py310.py hl[6] *}
+
+## Recap { #recap }
+
+рд╣рд░ case рдХреЗ рд▓рд┐рдП рдХрдИ Pydantic models рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ рдФрд░ freely inherit рдХрд░реЗрдВред
+
+рдЕрдЧрд░ рдХрд┐рд╕реА entity рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ "states" рд╣реЛ рд╕рдХрдиреЗ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдкрдХреЛ рдкреНрд░рддрд┐ entity рдПрдХ рд╣реА data model рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред **user** "entity" рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд┐рд╕рдореЗрдВ states рдореЗрдВ `password`, `password_hash`, рдпрд╛ рдХреЛрдИ password рдирд╣реАрдВ рд╣реЛрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред
--- /dev/null
+# рдкрд╣рд▓реЗ рдХрджрдо { #first-steps }
+
+рд╕рдмрд╕реЗ рд╕рд░рд▓ FastAPI file рдРрд╕реА рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
+
+{* ../../docs_src/first_steps/tutorial001_py310.py *}
+
+рдЗрд╕реЗ `main.py` рдирд╛рдо рдХреА file рдореЗрдВ copy рдХрд░реЗрдВред
+
+live server рдЪрд▓рд╛рдПрдБ:
+
+<div class="termy">
+
+```console
+$ <font color="#4E9A06">fastapi</font> dev
+
+ <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting development server ЁЯЪА
+
+ Searching for package file structure from directories
+ with <font color="#3465A4">__init__.py</font> files
+ Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> ЁЯРН main.py
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with
+ the following code:
+
+ <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
+ <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span> Running in development mode, for production use:
+ <b>fastapi run</b>
+
+ Logs:
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Will watch for changes in these directories:
+ <b>[</b><font color="#4E9A06">'/home/user/code/awesomeapp'</font><b>]</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C
+ to quit<b>)</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
+```
+
+</div>
+
+output рдореЗрдВ, рдХреБрдЫ рдРрд╕реА рдПрдХ line рд╣реЛрддреА рд╣реИ:
+
+```hl_lines="4"
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+рдпрд╣ line рд╡рд╣ URL рджрд┐рдЦрд╛рддреА рд╣реИ рдЬрд╣рд╛рдБ рдЖрдкрдХреА app рдЖрдкрдХреА local machine рдкрд░ serve рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред
+
+### рдЗрд╕реЗ рдЬрд╛рдБрдЪреЗрдВ { #check-it }
+
+рдЕрдкрдиреЗ browser рдореЗрдВ [http://127.0.0.1:8000](http://127.0.0.1:8000) рдЦреЛрд▓реЗрдВред
+
+рдЖрдкрдХреЛ JSON response рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
+
+```JSON
+{"message": "Hello World"}
+```
+
+### Interactive API docs { #interactive-api-docs }
+
+рдЕрдм [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) рдкрд░ рдЬрд╛рдПрдБред
+
+рдЖрдкрдХреЛ automatic interactive API documentation рджрд┐рдЦреЗрдЧреА ([Swagger UI](https://github.com/swagger-api/swagger-ui) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ):
+
+
+
+### рд╡реИрдХрд▓реНрдкрд┐рдХ API docs { #alternative-api-docs }
+
+рдФрд░ рдЕрдм, [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) рдкрд░ рдЬрд╛рдПрдБред
+
+рдЖрдкрдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ automatic documentation рджрд┐рдЦреЗрдЧреА ([ReDoc](https://github.com/Rebilly/ReDoc) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ):
+
+
+
+### OpenAPI { #openapi }
+
+**FastAPI** APIs рдХреЛ define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **OpenAPI** standard рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреА рдкреВрд░реА API рдХреЗ рд╕рд╛рде рдПрдХ "schema" generate рдХрд░рддрд╛ рд╣реИред
+
+#### "Schema" { #schema }
+
+"schema" рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА definition рдпрд╛ description рд╣реИред рд╡рд╣ code рдирд╣реАрдВ рдЬреЛ рдЗрд╕реЗ implement рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдлрд╝ рдПрдХ abstract description рд╣реИред
+
+#### API "schema" { #api-schema }
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, [OpenAPI](https://github.com/OAI/OpenAPI-Specification) рдПрдХ specification рд╣реИ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЖрдкрдХреА API рдХрд╛ schema рдХреИрд╕реЗ define рдХрд░рдирд╛ рд╣реИред
+
+рдЗрд╕ schema definition рдореЗрдВ рдЖрдкрдХреА API paths, рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрднрд╛рд╡рд┐рдд parameters рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред
+
+#### Data "schema" { #data-schema }
+
+"schema" рд╢рдмреНрдж рдХреБрдЫ data рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рднреА refer рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ JSON contentред
+
+рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм JSON attributes, рдФрд░ рдЙрдирдХреЗ data types рдЖрджрд┐ рд╣реЛрдЧрд╛ред
+
+#### OpenAPI рдФрд░ JSON Schema { #openapi-and-json-schema }
+
+OpenAPI рдЖрдкрдХреА API рдХреЗ рд▓рд┐рдП API schema define рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрд╕ schema рдореЗрдВ **JSON Schema**, рдЬреЛ JSON data schemas рдХреЗ рд▓рд┐рдП standard рд╣реИ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреА API рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП data рдХреА definitions (рдпрд╛ "schemas") рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВред
+
+#### `openapi.json` рдЬрд╛рдБрдЪреЗрдВ { #check-the-openapi-json }
+
+рдЕрдЧрд░ рдЖрдк рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЛ рдЙрддреНрд╕реБрдХ рд╣реИрдВ рдХрд┐ raw OpenAPI schema рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, FastAPI рдЖрдкрдХреА рдкреВрд░реА API рдХреЗ descriptions рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЖрдк рдПрдХ JSON (schema) generate рдХрд░рддрд╛ рд╣реИред
+
+рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json)ред
+
+рдпрд╣ рдХреБрдЫ рдРрд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ JSON рджрд┐рдЦрд╛рдПрдЧрд╛:
+
+```JSON
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "FastAPI",
+ "version": "0.1.0"
+ },
+ "paths": {
+ "/items/": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+
+
+
+...
+```
+
+#### OpenAPI рдХрд┐рд╕рд▓рд┐рдП рд╣реИ { #what-is-openapi-for }
+
+OpenAPI schema рд╣реА рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЧрдП рджреЛ interactive documentation systems рдХреЛ power рджреЗрддрд╛ рд╣реИред
+
+рдФрд░ рджрд░реНрдЬрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд╕рднреА OpenAPI рдкрд░ рдЖрдзрд╛рд░рд┐рддред рдЖрдк **FastAPI** рд╕реЗ рдмрдиреА рдЕрдкрдиреА application рдореЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╡рд┐рдХрд▓реНрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди clients рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрдк code generate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА API рд╕реЗ communicate рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, frontend, mobile рдпрд╛ IoT applicationsред
+
+### `pyproject.toml` рдореЗрдВ app `entrypoint` configure рдХрд░реЗрдВ { #configure-the-app-entrypoint-in-pyproject-toml }
+
+рдЖрдк `pyproject.toml` file рдореЗрдВ рдЕрдкрдиреА app рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ configure рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```toml
+[tool.fastapi]
+entrypoint = "main:app"
+```
+
+рд╡рд╣ `entrypoint` `fastapi` command рдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЙрд╕реЗ app рдХреЛ рдЗрд╕ рддрд░рд╣ import рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
+
+```python
+from main import app
+```
+
+рдЕрдЧрд░ рдЖрдкрдХрд╛ code рдЗрд╕ рддрд░рд╣ structured рдерд╛:
+
+```
+.
+тФЬтФАтФА backend
+тФВ┬а┬а тФЬтФАтФА main.py
+тФВ┬а┬а тФЬтФАтФА __init__.py
+```
+
+рддреЛ рдЖрдк `entrypoint` рдХреЛ рдЗрд╕ рддрд░рд╣ set рдХрд░реЗрдВрдЧреЗ:
+
+```toml
+[tool.fastapi]
+entrypoint = "backend.main:app"
+```
+
+рдЬреЛ рдЗрд╕рдХреЗ equivalent рд╣реЛрдЧрд╛:
+
+```python
+from backend.main import app
+```
+
+### `fastapi dev` path рдХреЗ рд╕рд╛рде рдпрд╛ `--entrypoint` CLI option рдХреЗ рд╕рд╛рде { #fastapi-dev-with-path-or-with-entrypoint-cli-option }
+
+рдЖрдк `fastapi dev` command рдХреЛ file path рднреА pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП FastAPI app object рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓реЗрдЧрд╛:
+
+```console
+$ fastapi dev main.py
+```
+
+рдпрд╛, рдЖрдк `fastapi dev` command рдХреЛ `--entrypoint` option рднреА pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```console
+$ fastapi dev --entrypoint main:app
+```
+
+рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ `fastapi` command call рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рд╕рд╣реА path\entrypoint pass рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
+
+рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреВрд╕рд░реЗ tools рдЗрд╕реЗ рдвреВрдБрдв рдирд╣реАрдВ рдкрд╛рдПрдБрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [VS Code Extension](../editor-support.md) рдпрд╛ [FastAPI Cloud](https://fastapicloud.com), рдЗрд╕рд▓рд┐рдП `pyproject.toml` рдореЗрдВ `entrypoint` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред
+
+### рдЕрдкрдиреА app deploy рдХрд░реЗрдВ (рд╡реИрдХрд▓реНрдкрд┐рдХ) { #deploy-your-app-optional }
+
+рдЖрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреА FastAPI app рдХреЛ рдПрдХ single command рд╕реЗ [FastAPI Cloud](https://fastapicloud.com) рдкрд░ deploy рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ЁЯЪА
+
+<div class="termy">
+
+```console
+$ fastapi deploy
+
+Deploying to FastAPI Cloud...
+
+тЬЕ Deployment successful!
+
+ЁЯРФ Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
+```
+
+</div>
+
+CLI рдЖрдкрдХреА FastAPI application рдХреЛ рдЕрдкрдиреЗ рдЖрдк detect рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ cloud рдкрд░ deploy рдХрд░реЗрдЧрд╛ред рдЕрдЧрд░ рдЖрдк logged in рдирд╣реАрдВ рд╣реИрдВ, рддреЛ authentication process рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ browser рдЦреБрд▓реЗрдЧрд╛ред
+
+рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдЕрдм рдЖрдк рдЙрд╕ URL рдкрд░ рдЕрдкрдиреА app access рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред тЬи
+
+## Recap, рдЪрд░рдг рджрд░ рдЪрд░рдг { #recap-step-by-step }
+
+### рдЪрд░рдг 1: `FastAPI` import рдХрд░реЗрдВ { #step-1-import-fastapi }
+
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[1] *}
+
+`FastAPI` рдПрдХ Python class рд╣реИ рдЬреЛ рдЖрдкрдХреА API рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реА functionality рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+`FastAPI` рдПрдХ class рд╣реИ рдЬреЛ рд╕реАрдзреЗ `Starlette` рд╕реЗ inherit рдХрд░рддреА рд╣реИред
+
+рдЖрдк `FastAPI` рдХреЗ рд╕рд╛рде рд╕рд╛рд░реА [Starlette](https://www.starlette.dev/) functionality рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+### рдЪрд░рдг 2: рдПрдХ `FastAPI` "instance" рдмрдирд╛рдПрдБ { #step-2-create-a-fastapi-instance }
+
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[3] *}
+
+рдпрд╣рд╛рдБ `app` variable class `FastAPI` рдХрд╛ рдПрдХ "instance" рд╣реЛрдЧрд╛ред
+
+рдпрд╣ рдЖрдкрдХреА рдкреВрд░реА API рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП interaction рдХрд╛ рдореБрдЦреНрдп point рд╣реЛрдЧрд╛ред
+
+### рдЪрд░рдг 3: рдПрдХ *path operation* рдмрдирд╛рдПрдБ { #step-3-create-a-path-operation }
+
+#### Path { #path }
+
+рдпрд╣рд╛рдБ "Path" URL рдХреЗ рдкрд╣рд▓реЗ `/` рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЖрдЦрд╝рд┐рд░реА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ refer рдХрд░рддрд╛ рд╣реИред
+
+рддреЛ, рдРрд╕реЗ URL рдореЗрдВ:
+
+```
+https://example.com/items/foo
+```
+
+...path рд╣реЛрдЧрд╛:
+
+```
+/items/foo
+```
+
+/// note | рдиреЛрдЯ
+
+рдПрдХ "path" рдХреЛ рдЖрдорддреМрд░ рдкрд░ "endpoint" рдпрд╛ "route" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+///
+
+API рдмрдирд╛рддреЗ рд╕рдордп, "path" "concerns" рдФрд░ "resources" рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рддрд░реАрдХрд╛ рд╣реИред
+
+#### Operation { #operation }
+
+рдпрд╣рд╛рдБ "Operation" HTTP "methods" рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ refer рдХрд░рддрд╛ рд╣реИред
+
+рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ:
+
+* `POST`
+* `GET`
+* `PUT`
+* `DELETE`
+
+...рдФрд░ рдХреБрдЫ рдЕрдзрд┐рдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд▓реЗ:
+
+* `OPTIONS`
+* `HEAD`
+* `PATCH`
+* `TRACE`
+
+HTTP protocol рдореЗрдВ, рдЖрдк рдЗрди "methods" рдореЗрдВ рд╕реЗ рдПрдХ (рдпрд╛ рдЕрдзрд┐рдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд░ path рд╕реЗ communicate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+---
+
+APIs рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдХреЛрдИ specific action рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди specific HTTP methods рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
+
+* `POST`: data рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
+* `GET`: data рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдПред
+* `PUT`: data update рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
+* `DELETE`: data delete рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
+
+рдЗрд╕рд▓рд┐рдП, OpenAPI рдореЗрдВ, рд╣рд░ HTTP method рдХреЛ рдПрдХ "operation" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рд╣рдо рдЙрдиреНрд╣реЗрдВ рднреА "**operations**" рдХрд╣реЗрдВрдЧреЗред
+
+#### рдПрдХ *path operation decorator* define рдХрд░реЗрдВ { #define-a-path-operation-decorator }
+
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[6] *}
+
+`@app.get("/")` **FastAPI** рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдареАрдХ рдиреАрдЪреЗ рд╡рд╛рд▓рд╛ function рдЙрди requests рдХреЛ handle рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рднрд╛рд░реА рд╣реИ рдЬреЛ рдпрд╣рд╛рдБ рдЬрд╛рддреА рд╣реИрдВ:
+
+* path `/`
+* <dfn title="рдПрдХ HTTP GET method"><code>get</code> operation</dfn> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
+
+/// note | `@decorator` рдЬрд╛рдирдХрд╛рд░реА
+
+Python рдореЗрдВ рдЙрд╕ `@something` syntax рдХреЛ "decorator" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА function рдХреЗ рдКрдкрд░ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рдПрдХ рд╕реБрдВрджрд░ рд╕рдЬрд╛рд╡рдЯреА рдЯреЛрдкреА (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ term рд╡рд╣реАрдВ рд╕реЗ рдЖрдпрд╛ рд╣реИ)ред
+
+рдПрдХ "decorator" рдиреАрдЪреЗ рд╡рд╛рд▓реЗ function рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред
+
+рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ decorator **FastAPI** рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдиреАрдЪреЗ рд╡рд╛рд▓рд╛ function **path** `/` рдХреЗ рд╕рд╛рде **operation** `get` рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
+
+рдпрд╣ "**path operation decorator**" рд╣реИред
+
+///
+
+рдЖрдк рджреВрд╕рд░реЗ operations рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* `@app.post()`
+* `@app.put()`
+* `@app.delete()`
+
+рдФрд░ рдХреБрдЫ рдЕрдзрд┐рдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд▓реЗ:
+
+* `@app.options()`
+* `@app.head()`
+* `@app.patch()`
+* `@app.trace()`
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЖрдк рд╣рд░ operation (HTTP method) рдХреЛ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред
+
+**FastAPI** рдХреЛрдИ specific рдЕрд░реНрде enforce рдирд╣реАрдВ рдХрд░рддрд╛ред
+
+рдпрд╣рд╛рдБ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА guideline рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ, requirement рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GraphQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдЖрдо рддреМрд░ рдкрд░ рд╕рднреА actions рдХреЗрд╡рд▓ `POST` operations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░рддреЗ рд╣реИрдВред
+
+///
+
+### рдЪрд░рдг 4: **path operation function** define рдХрд░реЗрдВ { #step-4-define-the-path-operation-function }
+
+рдпрд╣ рд╣рдорд╛рд░рд╛ "**path operation function**" рд╣реИ:
+
+* **path**: `/` рд╣реИред
+* **operation**: `get` рд╣реИред
+* **function**: "decorator" рдХреЗ рдиреАрдЪреЗ рд╡рд╛рд▓рд╛ function рд╣реИ (`@app.get("/")` рдХреЗ рдиреАрдЪреЗ)ред
+
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[7] *}
+
+рдпрд╣ рдПрдХ Python function рд╣реИред
+
+рдЬрдм рднреА **FastAPI** рдХреЛ `GET` operation рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ URL "`/`" рдкрд░ рдХреЛрдИ request рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕реЗ call рдХрд░реЗрдЧрд╛ред
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ `async` function рд╣реИред
+
+---
+
+рдЖрдк рдЗрд╕реЗ `async def` рдХреЗ рдмрдЬрд╛рдп normal function рдХреЗ рд░реВрдк рдореЗрдВ рднреА define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/first_steps/tutorial003_py310.py hl[7] *}
+
+/// note | рдиреЛрдЯ
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрдВрддрд░ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рддреЛ [Async: *"In a hurry?"*](../async.md#in-a-hurry) рджреЗрдЦреЗрдВред
+
+///
+
+### рдЪрд░рдг 5: content return рдХрд░реЗрдВ { #step-5-return-the-content }
+
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[8] *}
+
+рдЖрдк `dict`, `list`, `str`, `int` рдЖрджрд┐ рдЬреИрд╕реЗ singular values return рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк Pydantic models рднреА return рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдЖрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ)ред
+
+рдХрдИ рдЕрдиреНрдп objects рдФрд░ models рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдЖрдк JSON рдореЗрдВ convert рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (ORMs рдЖрджрд┐ рд╕рд╣рд┐рдд)ред рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ ones рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦреЗрдВ, рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ supported рд╣реЛрдВред
+
+### рдЪрд░рдг 6: рдЗрд╕реЗ Deploy рдХрд░реЗрдВ { #step-6-deploy-it }
+
+рдЕрдкрдиреА app рдХреЛ **[FastAPI Cloud](https://fastapicloud.com)** рдкрд░ рдПрдХ command рд╕реЗ deploy рдХрд░реЗрдВ: `fastapi deploy`ред ЁЯОЙ
+
+#### FastAPI Cloud рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ { #about-fastapi-cloud }
+
+**[FastAPI Cloud](https://fastapicloud.com)** рдХреЛ **FastAPI** рдХреЗ рдкреАрдЫреЗ рдореМрдЬреВрдж рдЙрд╕реА author рдФрд░ team рдиреЗ рдмрдирд╛рдпрд╛ рд╣реИред
+
+рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде API рдХреЛ **рдмрдирд╛рдиреЗ**, **deploy рдХрд░рдиреЗ**, рдФрд░ **access рдХрд░рдиреЗ** рдХреА process рдХреЛ streamlined рдХрд░рддрд╛ рд╣реИред
+
+рдпрд╣ FastAPI рдХреЗ рд╕рд╛рде apps рдмрдирд╛рдиреЗ рдЬреИрд╕рд╛ рд╣реА **developer experience**, рдЙрдиреНрд╣реЗрдВ cloud рдкрд░ **deploy** рдХрд░рдиреЗ рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИред ЁЯОЙ
+
+FastAPI Cloud *FastAPI and friends* open source projects рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ sponsor рдФрд░ funding provider рд╣реИред тЬи
+
+#### рджреВрд╕рд░реЗ cloud providers рдкрд░ deploy рдХрд░реЗрдВ { #deploy-to-other-cloud-providers }
+
+FastAPI open source рд╣реИ рдФрд░ standards рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЖрдк FastAPI apps рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА cloud provider рдкрд░ deploy рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+FastAPI apps рдХреЛ рдЙрдирдХреЗ рд╕рд╛рде deploy рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ cloud provider рдХреА guides follow рдХрд░реЗрдВред ЁЯдУ
+
+## Recap { #recap }
+
+* `FastAPI` import рдХрд░реЗрдВред
+* рдПрдХ `app` instance рдмрдирд╛рдПрдБред
+* `@app.get("/")` рдЬреИрд╕реЗ decorators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ **path operation decorator** рд▓рд┐рдЦреЗрдВред
+* рдПрдХ **path operation function** define рдХрд░реЗрдВ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `def root(): ...`ред
+* `fastapi dev` command рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ development server рдЪрд▓рд╛рдПрдБред
+* рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреА app рдХреЛ `fastapi deploy` рдХреЗ рд╕рд╛рде deploy рдХрд░реЗрдВред
--- /dev/null
+# Frontend { #frontend }
+
+рдЖрдк `app.frontend()` (рдпрд╛ `router.frontend()`) рдХреЗ рд╕рд╛рде static frontend apps serve рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣ рдЙрди frontend tools рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ static files generate рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ React with Vite, TanStack Router, Astro, Vue, Svelte, Angular, Solid, рдФрд░ рдЕрдиреНрдпред
+
+рдЗрди tools рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдорддреМрд░ рдкрд░ рдПрдХ step рд╣реЛрддрд╛ рд╣реИ рдЬреЛ frontend рдХреЛ build рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЗрд╕ command рдХреЗ рд╕рд╛рде:
+
+```bash
+npm run build
+```
+
+рдпрд╣ рдЖрдкрдХреЗ frontend files рдХреЗ рд╕рд╛рде `./dist/` рдЬреИрд╕реА рдПрдХ directory generate рдХрд░реЗрдЧрд╛ред
+
+рдЖрдк рдЙрд╕ directory рдХреЛ рдЗрди frontend frameworks рдХреЗ рд▓рд┐рдП required conventions рдХреЗ рдЕрдиреБрд╕рд╛рд░ serve рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `app.frontend()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдкрд╣рд▓реЗ *path operations* рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред frontend files рдХреА рдЬрд╛рдБрдЪ рдХреЗрд╡рд▓ рддрдм рдХреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп route match рдирд╣реАрдВ рд╣реБрдЖ рд╣реЛ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреА API рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреАред
+
+## Frontend Serve рдХрд░реЗрдВ { #serve-a-frontend }
+
+рдЕрдкрдирд╛ frontend build рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `npm run build` рдХреЗ рд╕рд╛рде, generate рдХреА рдЧрдИ files рдХреЛ рдХрд┐рд╕реА directory рдореЗрдВ рд░рдЦреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `dist`ред
+
+рдЖрдкрдХреА project рд╕рдВрд░рдЪрдирд╛ рдРрд╕реА рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
+
+```text
+.
+тФЬтФАтФА pyproject.toml
+тФЬтФАтФА app
+тФВ тФЬтФАтФА __init__.py
+тФВ тФФтФАтФА main.py
+тФФтФАтФА dist
+ тФЬтФАтФА index.html
+ тФФтФАтФА assets
+ тФФтФАтФА app.js
+```
+
+рдлрд┐рд░ рдЗрд╕реЗ `app.frontend()` рдХреЗ рд╕рд╛рде serve рдХрд░реЗрдВ:
+
+{* ../../docs_src/frontend/tutorial001_py310.py hl[5] *}
+
+рдЗрд╕рдХреЗ рд╕рд╛рде, `/assets/app.js` рдХреЗ рд▓рд┐рдП рдПрдХ request `dist/assets/app.js` serve рдХрд░ рд╕рдХрддреА рд╣реИред
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ **FastAPI** *path operation* рднреА рд╣реИ, рддреЛ *path operation* рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд┐рд▓рддреА рд╣реИред
+
+## Client-Side Routing { #client-side-routing }
+
+рдХрдИ frontend apps, рдЬрд┐рдирдореЗрдВ **single-page apps** (SPAs) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, client-side routing рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред `/dashboard/settings` рдЬреИрд╕рд╛ path рдЕрд╕рд▓реА file рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди framework рдЗрд╕реЗ handle рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
+
+рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЙрд╕ URL рдХреЛ рд╕реАрдзреЗ access рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (app рдХреЗ рдЕрдВрджрд░ navigate рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп), рддреЛ backend рдХреЛ frontend app рдХреЛ `index.html` рд╕реЗ serve рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ frontend framework рдлрд┐рд░ client-side routing рдХреЛ handle рдХрд░ рд╕рдХреЗред
+
+рдЗрд╕рдХреЗ рд▓рд┐рдП, `fallback="index.html"` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
+
+{* ../../docs_src/frontend/tutorial002_py310.py hl[5] *}
+
+**FastAPI** рдЗрд╕ fallback рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЙрди `GET` рдФрд░ `HEAD` requests рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдЬреЛ browser navigation рдЬреИрд╕реА рджрд┐рдЦрддреА рд╣реИрдВред JavaScript, CSS, рдФрд░ images рдЬреИрд╕реА missing files рдЕрднреА рднреА `404` рд▓реМрдЯрд╛рддреА рд╣реИрдВред
+
+рдЕрдиреНрдп methods рд╡рд╛рд▓реА requests, рдЬреИрд╕реЗ `POST` рдпрд╛ `PUT`, рдЙрди paths рдкрд░ рдЬреЛ рдХреЗрд╡рд▓ frontend fallback рд╕реЗ match рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рднреА `404` рд▓реМрдЯрд╛рддреА рд╣реИрдВред рдирд┐рдпрдорд┐рдд **FastAPI** *path operations* рдХреА priority рдЕрднреА рднреА frontend routes рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+Default рд░реВрдк рд╕реЗ, `fallback` рдХреА value `fallback="auto"` рд╣реЛрддреА рд╣реИред рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ `fallback` specify рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреАред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдкрдврд╝реЗрдВред
+
+///
+
+рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдк рдХрдИ frontend apps рдХреЗ рд╕рд╛рде рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ client-side routing рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, React with TanStack Router, Vue, Angular, SvelteKit, рдпрд╛ Solidред
+
+## Custom 404 Page { #custom-404-page }
+
+рдЖрдк missing frontend paths рдХреЗ рд▓рд┐рдП static `404.html` page рднреА serve рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/frontend/tutorial003_py310.py hl[5] *}
+
+рд╡рд╣ response `404` рдХрд╛ status code рдмрдирд╛рдП рд░рдЦрддреА рд╣реИред
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, **FastAPI** missing frontend paths рдХреЗ рд▓рд┐рдП `index.html` serve рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ `404.html` file рд▓реМрдЯрд╛рдПрдЧрд╛ред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+Default рд░реВрдк рд╕реЗ, `fallback` рдХреА value `fallback="auto"` рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдЕрдЧрд░ `404.html` file рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдЕрдкрдиреЗ-рдЖрдк fallback рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╕рд╛рдорд╛рдиреНрдпрддрдГ `fallback` argument рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+рдпрд╣ рдЙрди frontend tools рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рд╣рд░ page рдХреЗ рд▓рд┐рдП static HTML files generate рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ Astroред
+
+## Fallback Auto { #fallback-auto }
+
+Default рд░реВрдк рд╕реЗ, `app.frontend()` `fallback="auto"` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+
+рдЕрдЧрд░ frontend directory рдореЗрдВ `404.html` file рд╣реИ, рддреЛ missing frontend paths рдЙрд╕ file рдХреЛ status code `404` рдХреЗ рд╕рд╛рде serve рдХрд░рддреЗ рд╣реИрдВред
+
+рдЕрдиреНрдпрдерд╛, рдЕрдЧрд░ `index.html` file рд╣реИ, рддреЛ missing browser navigation paths `index.html` serve рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ client-side routing рд╡рд╛рд▓реЗ рдХрдИ frontend apps рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред
+
+рдЗрд╕рд▓рд┐рдП, рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк `fallback` argument specify рдХрд┐рдП рдмрд┐рдирд╛ `app.frontend("/", directory="dist")` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/frontend/tutorial001_py310.py hl[5] *}
+
+## Fallback рдмрдВрдж рдХрд░реЗрдВ { #disable-fallback }
+
+рдЕрдЧрд░ рдЖрдк missing frontend paths рдХреЗ рд▓рд┐рдП fallback file serve рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ, рддреЛ `fallback=None` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
+
+{* ../../docs_src/frontend/tutorial005_py310.py hl[5] *}
+
+рдлрд┐рд░ missing frontend paths рд╕рд╛рдорд╛рдиреНрдп `404` рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
+
+## Directory рдЬрд╛рдБрдЪреЗрдВ { #check-directory }
+
+Default рд░реВрдк рд╕реЗ, `app.frontend()` app рдмрдирд╛рддреЗ рд╕рдордп рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ directory рдореМрдЬреВрдж рд╣реИред
+
+рдпрд╣ configuration errors рдХреЛ рдЬрд▓реНрджреА рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ frontend build output directory missing рд╣реИ, рддреЛ **FastAPI** startup рдкрд░ error raise рдХрд░реЗрдЧрд╛ред
+
+рдЕрдЧрд░ рдЖрдкрдХреА frontend files рдмрд╛рдж рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП app object рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдЕрд▓рдЧ build step рджреНрд╡рд╛рд░рд╛, рддреЛ `check_dir=False` set рдХрд░реЗрдВ:
+
+{* ../../docs_src/frontend/tutorial006_py310.py hl[5] *}
+
+`check_dir=False` рдХреЗ рд╕рд╛рде, **FastAPI** app рдмрдирд╛рддреЗ рд╕рдордп directory рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЕрдЧрд░ configured directory рдХрд┐рд╕реА request рдХреЛ handle рдХрд░рддреЗ рд╕рдордп рдЕрднреА рднреА missing рд╣реИ, рддреЛ **FastAPI** рддрдм error raise рдХрд░реЗрдЧрд╛ред
+
+## рдЗрд╕реЗ `APIRouter` рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-it-with-apirouter }
+
+рдЖрдк frontend files рдХреЛ `APIRouter` рдореЗрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ prefix рдХреЗ рд╕рд╛рде include рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/frontend/tutorial004_py310.py hl[6,7] *}
+
+рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, frontend paths `/app` рдХреЗ рдЕрдВрддрд░реНрдЧрдд serve рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
+
+App рдореЗрдВ рдХреЛрдИ рднреА рдирд┐рдпрдорд┐рдд *path operations* рдЕрднреА рднреА precedence рд▓реЗрдВрдЧреЗ, рдЕрдиреНрдп routers рдореЗрдВ рд╢рд╛рдорд┐рд▓ ones рднреАред
+
+## Dependencies рдФрд░ Middleware { #dependencies-and-middleware }
+
+Frontend responses рд╕рд╛рдорд╛рдиреНрдп **FastAPI** application рдХреЗ рдЕрдВрджрд░ run рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП HTTP middleware рдЙрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
+
+App рд╕реЗ, `APIRouter` рд╕реЗ, рдФрд░ `include_router()` рд╕реЗ dependencies рднреА frontend responses рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣ cookie authentication рдпрд╛ рдЗрд╕реА рддрд░рд╣ рд╕реЗ frontend рдХреЛ protect рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+## рдХреЗрд╡рд▓ Static Build Output { #static-build-output-only }
+
+`app.frontend()` рдЖрдкрдХреЗ frontend build рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ generate рдХреА рдЧрдИ files serve рдХрд░рддрд╛ рд╣реИред
+
+рдпрд╣ server-side rendering run рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрд╣ рдЙрди frontend frameworks рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ static files generate рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдЙрди frameworks рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рд░ request рдХреЗ рд▓рд┐рдП server рдкрд░ dynamic rendering рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИред
--- /dev/null
+# Errors рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛ { #handling-errors }
+
+рдРрд╕реА рдХрдИ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЖрдкрдХреЛ рдЕрдкрдиреА API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ client рдХреЛ error report рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
+
+рдпрд╣ client frontend рд╡рд╛рд▓рд╛ рдХреЛрдИ browser, рдХрд┐рд╕реА рдФрд░ рдХрд╛ code, рдХреЛрдИ IoT device рдЖрджрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+рдЖрдкрдХреЛ client рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝ рд╕рдХрддреА рд╣реИ рдХрд┐:
+
+* client рдХреЗ рдкрд╛рд╕ рдЙрд╕ operation рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд privileges рдирд╣реАрдВ рд╣реИрдВред
+* client рдХреЗ рдкрд╛рд╕ рдЙрд╕ resource рдХрд╛ access рдирд╣реАрдВ рд╣реИред
+* рдЬрд┐рд╕ item рдХреЛ client access рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
+* рдЖрджрд┐ред
+
+рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рд╕рд╛рдорд╛рдиреНрдпрддрдГ **400** рдХреА range (400 рд╕реЗ 499 рддрдХ) рдореЗрдВ рдПрдХ **HTTP status code** return рдХрд░реЗрдВрдЧреЗред
+
+рдпрд╣ 200 HTTP status codes (200 рд╕реЗ 299 рддрдХ) рдЬреИрд╕рд╛ рд╣реА рд╣реИред рд╡реЗ "200" status codes рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ request рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ "success" рд╣реБрдЖ рдерд╛ред
+
+400 range рдХреЗ status codes рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ client рдХреА рддрд░рдлрд╝ рд╕реЗ рдХреЛрдИ error рдерд╛ред
+
+рд╡реЗ рд╕рднреА **"404 Not Found"** errors (рдФрд░ jokes) рдпрд╛рдж рд╣реИрдВ?
+
+## `HTTPException` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-httpexception }
+
+Client рдХреЛ errors рд╡рд╛рд▓реА HTTP responses return рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк `HTTPException` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+### `HTTPException` import рдХрд░реЗрдВ { #import-httpexception }
+
+{* ../../docs_src/handling_errors/tutorial001_py310.py hl[1] *}
+
+### рдЕрдкрдиреЗ code рдореЗрдВ `HTTPException` raise рдХрд░реЗрдВ { #raise-an-httpexception-in-your-code }
+
+`HTTPException` APIs рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд data рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп Python exception рд╣реИред
+
+рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ Python exception рд╣реИ, рдЖрдк рдЗрд╕реЗ `return` рдирд╣реАрдВ рдХрд░рддреЗ, рдЖрдк рдЗрд╕реЗ `raise` рдХрд░рддреЗ рд╣реИрдВред
+
+рдЗрд╕рдХрд╛ рдпрд╣ рднреА рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА utility function рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреА *path operation function* рдХреЗ рдЕрдВрджрд░ call рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЙрд╕ utility function рдХреЗ рдЕрдВрджрд░ рд╕реЗ `HTTPException` raise рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ *path operation function* рдореЗрдВ рдмрд╛рдХреА code рдирд╣реАрдВ рдЪрд▓рд╛рдПрдЧрд╛, рдпрд╣ рдЙрд╕ request рдХреЛ рддреБрд░рдВрдд рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛ рдФрд░ `HTTPException` рд╕реЗ HTTP error client рдХреЛ рднреЗрдЬ рджреЗрдЧрд╛ред
+
+рдХрд┐рд╕реА value рдХреЛ return рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп exception raise рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн Dependencies рдФрд░ Security рд╡рд╛рд▓реЗ section рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред
+
+рдЗрд╕ example рдореЗрдВ, рдЬрдм client рдХрд┐рд╕реА рдРрд╕реЗ ID рд╕реЗ item request рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ `404` рдХреЗ status code рдХреЗ рд╕рд╛рде exception raise рдХрд░реЗрдВ:
+
+{* ../../docs_src/handling_errors/tutorial001_py310.py hl[11] *}
+
+### рдкрд░рд┐рдгрд╛рдореА response { #the-resulting-response }
+
+рдЕрдЧрд░ client `http://example.com/items/foo` (рдПрдХ `item_id` `"foo"`) request рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕ client рдХреЛ 200 рдХрд╛ HTTP status code рдФрд░ рдпрд╣ JSON response рдорд┐рд▓реЗрдЧрд╛:
+
+```JSON
+{
+ "item": "The Foo Wrestlers"
+}
+```
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ client `http://example.com/items/bar` (рдПрдХ non-existent `item_id` `"bar"`) request рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕ client рдХреЛ 404 рдХрд╛ HTTP status code ("not found" error) рдФрд░ рдпрд╣ JSON response рдорд┐рд▓реЗрдЧрд╛:
+
+```JSON
+{
+ "detail": "Item not found"
+}
+```
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+`HTTPException` raise рдХрд░рддреЗ рд╕рдордп, рдЖрдк `detail` parameter рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдХреЛрдИ рднреА value pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ JSON рдореЗрдВ convert рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реЛ, рдХреЗрд╡рд▓ `str` рд╣реА рдирд╣реАрдВред
+
+рдЖрдк `dict`, `list` рдЖрджрд┐ pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрдиреНрд╣реЗрдВ **FastAPI** рдЕрдкрдиреЗ рдЖрдк handle рдХрд░рддрд╛ рд╣реИ рдФрд░ JSON рдореЗрдВ convert рдХрд░рддрд╛ рд╣реИред
+
+///
+
+## custom headers рдЬреЛрдбрд╝реЗрдВ { #add-custom-headers }
+
+рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдРрд╕реА рд╣реЛрддреА рд╣реИрдВ рдЬрд╣рд╛рдБ HTTP error рдореЗрдВ custom headers рдЬреЛрдбрд╝ рдкрд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА security рдХреЗ рд▓рд┐рдПред
+
+рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЕрдкрдиреЗ code рдореЗрдВ рд╕реАрдзреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреАред
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА advanced scenario рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝реЗ, рддреЛ рдЖрдк custom headers рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/handling_errors/tutorial002_py310.py hl[14] *}
+
+## custom exception handlers install рдХрд░реЗрдВ { #install-custom-exception-handlers }
+
+рдЖрдк [Starlette рд╕реЗ рд╡рд╣реА exception utilities](https://www.starlette.dev/exceptions/) рдХреЗ рд╕рд╛рде custom exception handlers рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ custom exception `UnicornException` рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк (рдпрд╛ рдХреЛрдИ library рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) `raise` рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдФрд░ рдЖрдк рдЗрд╕ exception рдХреЛ FastAPI рдХреЗ рд╕рд╛рде globally handle рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдЖрдк `@app.exception_handler()` рдХреЗ рд╕рд╛рде custom exception handler рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/handling_errors/tutorial003_py310.py hl[5:7,13:18,24] *}
+
+рдпрд╣рд╛рдБ, рдЕрдЧрд░ рдЖрдк `/unicorns/yolo` request рдХрд░рддреЗ рд╣реИрдВ, рддреЛ *path operation* рдПрдХ `UnicornException` `raise` рдХрд░реЗрдЧрд╛ред
+
+рд▓реЗрдХрд┐рди рдЗрд╕реЗ `unicorn_exception_handler` рджреНрд╡рд╛рд░рд╛ handle рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ `418` рдХреЗ HTTP status code рдФрд░ рдЗрд╕ JSON content рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдлрд╝ error рдорд┐рд▓реЗрдЧрд╛:
+
+```JSON
+{"message": "Oops! yolo did something. There goes a rainbow..."}
+```
+
+/// note | Technical Details
+
+рдЖрдк `from starlette.requests import Request` рдФрд░ `from starlette.responses import JSONResponse` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЖрдкрдХреА, developer рдХреА, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП `starlette.responses` рдХреЛ `fastapi.responses` рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдкрд▓рдмреНрдз рдЕрдзрд┐рдХрд╛рдВрд╢ responses рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддреЗ рд╣реИрдВред `Request` рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рд╣реИред
+
+///
+
+## default exception handlers рдХреЛ override рдХрд░реЗрдВ { #override-the-default-exception-handlers }
+
+**FastAPI** рдореЗрдВ рдХреБрдЫ default exception handlers рд╣реЛрддреЗ рд╣реИрдВред
+
+рдпреЗ handlers default JSON responses return рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдм рдЖрдк `HTTPException` `raise` рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрдм request рдореЗрдВ invalid data рд╣реЛрддрд╛ рд╣реИред
+
+рдЖрдк рдЗрди exception handlers рдХреЛ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ handlers рд╕реЗ override рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+### request validation exceptions рдХреЛ override рдХрд░реЗрдВ { #override-request-validation-exceptions }
+
+рдЬрдм рдХрд┐рд╕реА request рдореЗрдВ invalid data рд╣реЛрддрд╛ рд╣реИ, рддреЛ **FastAPI** internally рдПрдХ `RequestValidationError` raise рдХрд░рддрд╛ рд╣реИред
+
+рдФрд░ рдЗрд╕рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ default exception handler рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред
+
+рдЗрд╕реЗ override рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `RequestValidationError` import рдХрд░реЗрдВ рдФрд░ exception handler рдХреЛ decorate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ `@app.exception_handler(RequestValidationError)` рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+Exception handler рдХреЛ рдПрдХ `Request` рдФрд░ exception рдорд┐рд▓реЗрдЧрд╛ред
+
+{* ../../docs_src/handling_errors/tutorial004_py310.py hl[2,14:19] *}
+
+рдЕрдм, рдЕрдЧрд░ рдЖрдк `/items/foo` рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ default JSON error рдкрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп:
+
+```JSON
+{
+ "detail": [
+ {
+ "loc": [
+ "path",
+ "item_id"
+ ],
+ "msg": "value is not a valid integer",
+ "type": "type_error.integer"
+ }
+ ]
+}
+```
+
+рдЖрдкрдХреЛ text version рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣реЛрдЧрд╛:
+
+```
+Validation errors:
+Field: ('path', 'item_id'), Error: Input should be a valid integer, unable to parse string as an integer
+```
+
+### `HTTPException` error handler рдХреЛ override рдХрд░реЗрдВ { #override-the-httpexception-error-handler }
+
+рдЙрд╕реА рддрд░рд╣, рдЖрдк `HTTPException` handler рдХреЛ override рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрди errors рдХреЗ рд▓рд┐рдП JSON рдХреЗ рдмрдЬрд╛рдп plain text response return рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/handling_errors/tutorial004_py310.py hl[3:4,9:11,25] *}
+
+/// note | Technical Details
+
+рдЖрдк `from starlette.responses import PlainTextResponse` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЖрдкрдХреА, developer рдХреА, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП `starlette.responses` рдХреЛ `fastapi.responses` рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдкрд▓рдмреНрдз рдЕрдзрд┐рдХрд╛рдВрд╢ responses рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддреЗ рд╣реИрдВред
+
+///
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ `RequestValidationError` рдореЗрдВ file name рдФрд░ рдЙрд╕ line рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдБ validation error рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ relevant рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЙрд╕реЗ рдЕрдкрдиреЗ logs рдореЗрдВ рджрд┐рдЦрд╛ рд╕рдХреЗрдВред
+
+рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ string рдореЗрдВ convert рдХрд░рдХреЗ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рд╕реАрдзреЗ return рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ system рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдЬрд╛рдирдХрд╛рд░реА leak рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ code рд╣рд░ error рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ extract рдХрд░рдХреЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
+
+///
+
+### `RequestValidationError` body рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-the-requestvalidationerror-body }
+
+`RequestValidationError` рдореЗрдВ рд╡рд╣ `body` рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ invalid data рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛ рдерд╛ред
+
+рдЖрдк рдЕрдкрдиреА app develop рдХрд░рддреЗ рд╕рдордп body рдХреЛ log рдФрд░ debug рдХрд░рдиреЗ, user рдХреЛ return рдХрд░рдиреЗ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/handling_errors/tutorial005_py310.py hl[14] *}
+
+рдЕрдм рдРрд╕рд╛ invalid item рднреЗрдЬрдХрд░ рджреЗрдЦреЗрдВ:
+
+```JSON
+{
+ "title": "towel",
+ "size": "XL"
+}
+```
+
+рдЖрдкрдХреЛ рдПрдХ response рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ data invalid рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ received body рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛:
+
+```JSON hl_lines="12-15"
+{
+ "detail": [
+ {
+ "loc": [
+ "body",
+ "size"
+ ],
+ "msg": "value is not a valid integer",
+ "type": "type_error.integer"
+ }
+ ],
+ "body": {
+ "title": "towel",
+ "size": "XL"
+ }
+}
+```
+
+#### FastAPI рдХрд╛ `HTTPException` рдмрдирд╛рдо Starlette рдХрд╛ `HTTPException` { #fastapis-httpexception-vs-starlettes-httpexception }
+
+**FastAPI** рдХрд╛ рдЕрдкрдирд╛ `HTTPException` рд╣реИред
+
+рдФрд░ **FastAPI** рдХреА `HTTPException` error class, Starlette рдХреА `HTTPException` error class рд╕реЗ inherit рдХрд░рддреА рд╣реИред
+
+рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ **FastAPI** рдХрд╛ `HTTPException`, `detail` field рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА JSON-able data accept рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ Starlette рдХрд╛ `HTTPException` рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ strings accept рдХрд░рддрд╛ рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ code рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ **FastAPI** рдХрд╛ `HTTPException` raise рдХрд░рддреЗ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред
+
+рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк exception handler register рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕реЗ Starlette рдХреЗ `HTTPException` рдХреЗ рд▓рд┐рдП register рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+рдЗрд╕ рддрд░рд╣, рдЕрдЧрд░ Starlette рдХреЗ internal code рдХрд╛ рдХреЛрдИ рд╣рд┐рд╕реНрд╕рд╛, рдпрд╛ рдХреЛрдИ Starlette extension рдпрд╛ plug-in, Starlette `HTTPException` raise рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ handler рдЙрд╕реЗ catch рдФрд░ handle рдХрд░ рдкрд╛рдПрдЧрд╛ред
+
+рдЗрд╕ example рдореЗрдВ, рдПрдХ рд╣реА code рдореЗрдВ рджреЛрдиреЛрдВ `HTTPException`s рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, Starlette рдХреЗ exceptions рдХреЛ `StarletteHTTPException` рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
+
+```Python
+from starlette.exceptions import HTTPException as StarletteHTTPException
+```
+
+### **FastAPI** рдХреЗ exception handlers рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #reuse-fastapis-exception-handlers }
+
+рдЕрдЧрд░ рдЖрдк **FastAPI** рдХреЗ рдЙрдиреНрд╣реАрдВ default exception handlers рдХреЗ рд╕рд╛рде exception рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк `fastapi.exception_handlers` рд╕реЗ default exception handlers import рдХрд░рдХреЗ рдЙрдирдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/handling_errors/tutorial006_py310.py hl[2:5,15,21] *}
+
+рдЗрд╕ example рдореЗрдВ рдЖрдк рдХреЗрд╡рд▓ error рдХреЛ рдмрд╣реБрдд expressive message рдХреЗ рд╕рд╛рде print рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдмрд╛рдд рд╕рдордЭ рдЧрдПред рдЖрдк exception рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдмрд╕ default exception handlers рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
--- /dev/null
+# Header Parameter Models { #header-parameter-models }
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрдмрдВрдзрд┐рдд **header parameters** рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ **Pydantic model** рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕рд╕реЗ рдЖрдк **model рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ** рдХрд░ рдкрд╛рдПрдВрдЧреЗ, **рдХрдИ рдЬрдЧрд╣реЛрдВ** рдкрд░, рдФрд░ рд╕рд╛рде рд╣реА рд╕рднреА parameters рдХреЗ рд▓рд┐рдП validations рдФрд░ metadata рдПрдХ рд╕рд╛рде declare рдХрд░ рдкрд╛рдПрдВрдЧреЗред ЁЯШО
+
+/// note | рдиреЛрдЯ
+
+рдпрд╣ FastAPI version `0.115.0` рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред ЁЯдУ
+
+///
+
+## Pydantic Model рдХреЗ рд╕рд╛рде Header Parameters { #header-parameters-with-a-pydantic-model }
+
+рдЬрд┐рди **header parameters** рдХреА рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ **Pydantic model** рдореЗрдВ declare рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ parameter рдХреЛ `Header` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░реЗрдВ:
+
+{* ../../docs_src/header_param_models/tutorial001_an_py310.py hl[9:14,18] *}
+
+**FastAPI** request рдореЗрдВ **headers** рд╕реЗ **рд╣рд░ field** рдХрд╛ data **extract** рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рд╡рд╣ Pydantic model рджреЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ define рдХрд┐рдпрд╛ рд╣реИред
+
+## Docs рджреЗрдЦреЗрдВ { #check-the-docs }
+
+рдЖрдк `/docs` рдкрд░ docs UI рдореЗрдВ required headers рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<div class="screenshot">
+<img src="/img/tutorial/header-param-models/image01.png">
+</div>
+
+## Extra Headers рдХреЛ рдордирд╛ рдХрд░реЗрдВ { #forbid-extra-headers }
+
+рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ use cases рдореЗрдВ (рд╢рд╛рдпрдж рдмрд╣реБрдд рдЖрдо рдирд╣реАрдВ), рдЖрдк рдЙрди headers рдХреЛ **restrict** рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк receive рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдЖрдк Pydantic рдХреА model configuration рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА `extra` fields рдХреЛ `forbid` рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/header_param_models/tutorial002_an_py310.py hl[10] *}
+
+рдЕрдЧрд░ рдХреЛрдИ client рдХреБрдЫ **extra headers** рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ **error** response рдорд┐рд▓реЗрдЧрд╛ред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ client `plumbus` рдХреЗ value рдХреЗ рд╕рд╛рде рдПрдХ `tool` header рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ **error** response рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ header parameter `tool` рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["header", "tool"],
+ "msg": "Extra inputs are not permitted",
+ "input": "plumbus",
+ }
+ ]
+}
+```
+
+## Convert Underscores рдХреЛ Disable рдХрд░реЗрдВ { #disable-convert-underscores }
+
+рдирд┐рдпрдорд┐рдд header parameters рдХреА рддрд░рд╣ рд╣реА, рдЬрдм parameter names рдореЗрдВ underscore characters рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ **рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ hyphens рдореЗрдВ convert** рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдкрдХреЗ code рдореЗрдВ header parameter `save_data` рд╣реИ, рддреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд HTTP header `save-data` рд╣реЛрдЧрд╛, рдФрд░ docs рдореЗрдВ рднреА рд╡рд╣ рдЗрд╕реА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
+
+рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдкрдХреЛ рдЗрд╕ automatic conversion рдХреЛ disable рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдк header parameters рдХреЗ рд▓рд┐рдП Pydantic models рдореЗрдВ рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/header_param_models/tutorial003_an_py310.py hl[19] *}
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+`convert_underscores` рдХреЛ `False` рдкрд░ set рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреБрдЫ HTTP proxies рдФрд░ servers underscores рд╡рд╛рд▓реЗ headers рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗред
+
+///
+
+## рд╕рд╛рд░рд╛рдВрд╢ { #summary }
+
+рдЖрдк **FastAPI** рдореЗрдВ **headers** declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **Pydantic models** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ЁЯШО
--- /dev/null
+# Header Parameters { #header-parameters }
+
+рдЖрдк Header parameters рдХреЛ рдЙрд╕реА рддрд░рд╣ define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк `Query`, `Path` рдФрд░ `Cookie` parameters рдХреЛ define рдХрд░рддреЗ рд╣реИрдВред
+
+## `Header` import рдХрд░реЗрдВ { #import-header }
+
+рдкрд╣рд▓реЗ `Header` import рдХрд░реЗрдВ:
+
+{* ../../docs_src/header_params/tutorial001_an_py310.py hl[3] *}
+
+## `Header` parameters рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ { #declare-header-parameters }
+
+рдлрд┐рд░ `Path`, `Query` рдФрд░ `Cookie` рдЬреИрд╕реА рд╣реА structure рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ header parameters рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред
+
+рдЖрдк default value рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд validation рдпрд╛ annotation parameters рднреА define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/header_params/tutorial001_an_py310.py hl[9] *}
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+`Header` `Path`, `Query` рдФрд░ `Cookie` рдХреА рдПрдХ "sister" class рд╣реИред рдпрд╣ рднреА рдЙрд╕реА common `Param` class рд╕реЗ inherit рдХрд░рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЬрдм рдЖрдк `fastapi` рд╕реЗ `Query`, `Path`, `Header`, рдФрд░ рдЕрдиреНрдп import рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ functions рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ special classes return рдХрд░рддреЗ рд╣реИрдВред
+
+///
+
+/// note | рдиреЛрдЯ
+
+headers рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ `Header` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ parameters рдХреЛ query parameters рдХреЗ рд░реВрдк рдореЗрдВ interpret рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+///
+
+## рд╕реНрд╡рдЪрд╛рд▓рд┐рдд conversion { #automatic-conversion }
+
+`Header` рдореЗрдВ `Path`, `Query` рдФрд░ `Cookie` рджреНрд╡рд╛рд░рд╛ рджреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА functionality рдХреЗ рдКрдкрд░ рдереЛрдбрд╝реА рдЕрддрд┐рд░рд┐рдХреНрдд functionality рд╣реЛрддреА рд╣реИред
+
+рдЕрдзрд┐рдХрд╛рдВрд╢ standard headers рдПрдХ "hyphen" character рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ "minus symbol" (`-`) рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди Python рдореЗрдВ `user-agent` рдЬреИрд╕рд╛ variable invalid рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП, default рд░реВрдк рд╕реЗ, `Header` headers рдХреЛ extract рдФрд░ document рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП parameter names рдХреЗ characters рдХреЛ underscore (`_`) рд╕реЗ hyphen (`-`) рдореЗрдВ convert рдХрд░реЗрдЧрд╛ред
+
+рд╕рд╛рде рд╣реА, HTTP headers case-insensitive рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЖрдк рдЙрдиреНрд╣реЗрдВ standard Python style (рдЬрд┐рд╕реЗ "snake_case" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕рд▓рд┐рдП, Python code рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЬреИрд╕реЗ рдЖрдк `user_agent` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реИрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ `User_Agent` рдХреА рддрд░рд╣ capitalize рдХрд░рдирд╛ рдкрдбрд╝реЗ рдпрд╛ рдХреБрдЫ рд╕рдорд╛рди рдХрд░рдирд╛ рдкрдбрд╝реЗред
+
+рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдкрдХреЛ underscores рд╕реЗ hyphens рдореЗрдВ automatic conversion disable рдХрд░рдирд╛ рд╣реЛ, рддреЛ `Header` рдХреЗ parameter `convert_underscores` рдХреЛ `False` рдкрд░ set рдХрд░реЗрдВ:
+
+{* ../../docs_src/header_params/tutorial002_an_py310.py hl[10] *}
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+`convert_underscores` рдХреЛ `False` рдкрд░ set рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреБрдЫ HTTP proxies рдФрд░ servers underscores рд╡рд╛рд▓реЗ headers рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗред
+
+///
+
+## Duplicate headers { #duplicate-headers }
+
+duplicate headers receive рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рдХрдИ values рд╡рд╛рд▓рд╛ рд╡рд╣реА headerред
+
+рдЖрдк type declaration рдореЗрдВ list рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реЗ cases define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк duplicate header рд╕реЗ рд╕рднреА values Python `list` рдХреЗ рд░реВрдк рдореЗрдВ receive рдХрд░реЗрдВрдЧреЗред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `X-Token` рдХрд╛ header declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/header_params/tutorial003_an_py310.py hl[9] *}
+
+рдпрджрд┐ рдЖрдк рдЙрд╕ *path operation* рдХреЗ рд╕рд╛рде рджреЛ HTTP headers рднреЗрдЬрддреЗ рд╣реБрдП communicate рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
+
+```
+X-Token: foo
+X-Token: bar
+```
+
+response рдРрд╕рд╛ рд╣реЛрдЧрд╛:
+
+```JSON
+{
+ "X-Token values": [
+ "bar",
+ "foo"
+ ]
+}
+```
+
+## Recap { #recap }
+
+`Query`, `Path` рдФрд░ `Cookie` рдЬреИрд╕реЗ рд╣реА common pattern рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, `Header` рдХреЗ рд╕рд╛рде headers declare рдХрд░реЗрдВред
+
+рдФрд░ рдЕрдкрдиреА variables рдореЗрдВ underscores рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, **FastAPI** рдЙрдиреНрд╣реЗрдВ convert рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
--- /dev/null
+# Tutorial - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб { #tutorial-user-guide }
+
+рдпрд╣ tutorial рдЖрдкрдХреЛ step by step рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ **FastAPI** рдХреЛ рдЗрд╕рдХреА рдЕрдзрд┐рдХрддрд░ features рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+рд╣рд░ section рдзреАрд░реЗ-рдзреАрд░реЗ рдкрд┐рдЫрд▓реЗ section рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ topics рдХреЛ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреА рдЦрд╛рд╕ API рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдХрд┐рд╕реА рднреА specific topic рдкрд░ рдЬрд╛ рд╕рдХреЗрдВред
+
+рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ reference рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рд╡рд╛рдкрд╕ рдЖрдХрд░ рдареАрдХ рд╡рд╣реА рджреЗрдЦ рд╕рдХреЗрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИред
+
+## code рдЪрд▓рд╛рдПрдБ { #run-the-code }
+
+рд╕рднреА code blocks рдХреЛ copy рдХрд░рдХреЗ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ tested Python files рд╣реИрдВ)ред
+
+рдХрд┐рд╕реА рднреА example рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, code рдХреЛ `main.py` file рдореЗрдВ copy рдХрд░реЗрдВ, рдФрд░ `fastapi dev` рд╢реБрд░реВ рдХрд░реЗрдВ:
+
+<div class="termy">
+
+```console
+$ <font color="#4E9A06">fastapi</font> dev
+
+ <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting development server ЁЯЪА
+
+ Searching for package file structure from directories
+ with <font color="#3465A4">__init__.py</font> files
+ Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> ЁЯРН main.py
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with
+ the following code:
+
+ <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
+ <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span> Running in development mode, for production use:
+ <b>fastapi run</b>
+
+ Logs:
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Will watch for changes in these directories:
+ <b>[</b><font color="#4E9A06">'/home/user/code/awesomeapp'</font><b>]</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C
+ to quit<b>)</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
+```
+
+</div>
+
+рдпрд╣ **рдмрд╣реБрдд рдЬрд╝реНрдпрд╛рджрд╛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк code рд▓рд┐рдЦреЗрдВ рдпрд╛ copy рдХрд░реЗрдВ, рдЙрд╕реЗ edit рдХрд░реЗрдВ рдФрд░ locally рдЪрд▓рд╛рдПрдБред
+
+рдЗрд╕реЗ рдЕрдкрдиреЗ editor рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ FastAPI рдХреЗ рд▓рд╛рдн рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЖрдкрдХреЛ рдХрд┐рддрдирд╛ рдХрдо code рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд╕рднреА type checks, autocompletion, рдЖрджрд┐ред
+
+---
+
+## FastAPI install рдХрд░реЗрдВ { #install-fastapi }
+
+рдкрд╣рд▓рд╛ step FastAPI install рдХрд░рдирд╛ рд╣реИред
+
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ [virtual environment](../virtual-environments.md) рдмрдирд╛рдПрдБ, рдЙрд╕реЗ activate рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ **FastAPI install рдХрд░реЗрдВ**:
+
+<div class="termy">
+
+```console
+$ pip install "fastapi[standard]"
+
+---> 100%
+```
+
+</div>
+
+/// note | рдиреЛрдЯ
+
+рдЬрдм рдЖрдк `pip install "fastapi[standard]"` рдХреЗ рд╕рд╛рде install рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреБрдЫ default optional standard dependencies рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ `fastapi-cloud-cli` рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ [FastAPI Cloud](https://fastapicloud.com) рдкрд░ deploy рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
+
+рдЕрдЧрд░ рдЖрдк рд╡реЗ optional dependencies рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдк `pip install fastapi` install рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЕрдЧрд░ рдЖрдк standard dependencies install рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди `fastapi-cloud-cli` рдХреЗ рдмрд┐рдирд╛, рддреЛ рдЖрдк `pip install "fastapi[standard-no-fastapi-cloud-cli]"` рдХреЗ рд╕рд╛рде install рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+FastAPI рдХреЗ рдкрд╛рд╕ [VS Code рдХреЗ рд▓рд┐рдП official extension](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) (рдФрд░ Cursor) рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╕рд╛рд░реА features рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ path operation explorer, path operation search, tests рдореЗрдВ CodeLens navigation (tests рд╕реЗ definition рдкрд░ jump рдХрд░рдирд╛), рдФрд░ FastAPI Cloud deployment рдФрд░ logs рд╢рд╛рдорд┐рд▓ рд╣реИрдВ тАФ рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ editor рд╕реЗред
+
+///
+
+## рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб { #advanced-user-guide }
+
+рдПрдХ **рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб** рднреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕ **Tutorial - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб** рдХреЗ рдмрд╛рдж рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+**рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб** рдЗрд╕реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд╡рд╣реА concepts рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд features рд╕рд┐рдЦрд╛рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкрд╣рд▓реЗ **Tutorial - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб** рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ рдЖрдк рдЕрднреА рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ)ред
+
+рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл **Tutorial - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб** рдХреЗ рд╕рд╛рде рдПрдХ complete application рдмрдирд╛ рд╕рдХреЗрдВ, рдФрд░ рдлрд┐рд░ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ **рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб** рдХреЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд ideas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ extend рдХрд░ рд╕рдХреЗрдВред
--- /dev/null
+# Metadata рдФрд░ Docs URLs { #metadata-and-docs-urls }
+
+рдЖрдк рдЕрдкрдиреА **FastAPI** application рдореЗрдВ рдХрдИ metadata configurations рдХреЛ customize рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+## API рдХреЗ рд▓рд┐рдП Metadata { #metadata-for-api }
+
+рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд fields set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ OpenAPI specification рдФрд░ automatic API docs UIs рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
+
+| Parameter | Type | рд╡рд┐рд╡рд░рдг |
+|------------|------|-------------|
+| `title` | `str` | API рдХрд╛ titleред |
+| `summary` | `str` | API рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ summaryред <small>OpenAPI 3.1.0, FastAPI 0.99.0 рд╕реЗ рдЙрдкрд▓рдмреНрдзред</small> |
+| `description` | `str` | API рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ descriptionред рдпрд╣ Markdown рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред |
+| `version` | `str` | API рдХрд╛ versionред рдпрд╣ рдЖрдкрдХреА рдЕрдкрдиреА application рдХрд╛ version рд╣реИ, OpenAPI рдХрд╛ рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `2.5.0`ред |
+| `terms_of_service` | `str` | API рдХреЗ Terms of Service рдХреЗ рд▓рд┐рдП рдПрдХ URLред рдпрджрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рддреЛ рдпрд╣ URL рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред |
+| `contact` | `dict` | exposed API рдХреЗ рд▓рд┐рдП contact informationред рдЗрд╕рдореЗрдВ рдХрдИ fields рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред <details><summary><code>contact</code> fields</summary><table><thead><tr><th>Parameter</th><th>Type</th><th>рд╡рд┐рд╡рд░рдг</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td>contact person/organization рдХрд╛ identifying nameред</td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>contact information рдХреА рдУрд░ point рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ URLред URL рдХреЗ format рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред</td></tr><tr><td><code>email</code></td><td><code>str</code></td><td>contact person/organization рдХрд╛ email addressред email address рдХреЗ format рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред</td></tr></tbody></table></details> |
+| `license_info` | `dict` | exposed API рдХреЗ рд▓рд┐рдП license informationред рдЗрд╕рдореЗрдВ рдХрдИ fields рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред <details><summary><code>license_info</code> fields</summary><table><thead><tr><th>Parameter</th><th>Type</th><th>рд╡рд┐рд╡рд░рдг</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td><strong>REQUIRED</strong> (рдпрджрд┐ <code>license_info</code> set рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ)ред API рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ license nameред</td></tr><tr><td><code>identifier</code></td><td><code>str</code></td><td>API рдХреЗ рд▓рд┐рдП рдПрдХ [SPDX](https://spdx.org/licenses/) license expressionред <code>identifier</code> field, <code>url</code> field рдХреЗ рд╕рд╛рде mutually exclusive рд╣реИред <small>OpenAPI 3.1.0, FastAPI 0.99.0 рд╕реЗ рдЙрдкрд▓рдмреНрдзред</small></td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>API рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП license рдХрд╛ URLред URL рдХреЗ format рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред</td></tr></tbody></table></details> |
+
+рдЖрдк рдЗрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/metadata/tutorial001_py310.py hl[3:16, 19:32] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЖрдк `description` field рдореЗрдВ Markdown рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ output рдореЗрдВ render рд╣реЛрдЧрд╛ред
+
+///
+
+рдЗрд╕ configuration рдХреЗ рд╕рд╛рде, automatic API docs рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:
+
+<img src="/img/tutorial/metadata/image01.png">
+
+## License identifier { #license-identifier }
+
+OpenAPI 3.1.0 рдФрд░ FastAPI 0.99.0 рд╕реЗ, рдЖрдк `license_info` рдХреЛ `url` рдХреЗ рдмрдЬрд╛рдп `identifier` рдХреЗ рд╕рд╛рде рднреА set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+{* ../../docs_src/metadata/tutorial001_1_py310.py hl[31] *}
+
+## Tags рдХреЗ рд▓рд┐рдП Metadata { #metadata-for-tags }
+
+рдЖрдк рдЕрдкрдиреЗ path operations рдХреЛ group рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрд▓рдЧ-рдЕрд▓рдЧ tags рдХреЗ рд▓рд┐рдП `openapi_tags` parameter рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд metadata рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ tag рдХреЗ рд▓рд┐рдП рдПрдХ dictionary рд╡рд╛рд▓реА list рд▓реЗрддрд╛ рд╣реИред
+
+рдкреНрд░рддреНрдпреЗрдХ dictionary рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
+
+* `name` (**required**): рд╡рд╣реА tag name рд╡рд╛рд▓рд╛ `str`, рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ *path operations* рдФрд░ `APIRouter`s рдореЗрдВ `tags` parameter рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+* `description`: tag рдХреЗ рд▓рд┐рдП short description рд╡рд╛рд▓рд╛ `str`ред рдЗрд╕рдореЗрдВ Markdown рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ docs UI рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+* `externalDocs`: external documentation рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ `dict`, рдЬрд┐рд╕рдореЗрдВ:
+ * `description`: external docs рдХреЗ рд▓рд┐рдП short description рд╡рд╛рд▓рд╛ `str`ред
+ * `url` (**required**): external documentation рдХреЗ рд▓рд┐рдП URL рд╡рд╛рд▓рд╛ `str`ред
+
+### Tags рдХреЗ рд▓рд┐рдП metadata рдмрдирд╛рдПрдБ { #create-metadata-for-tags }
+
+рдЖрдЗрдП рдЗрд╕реЗ `users` рдФрд░ `items` рдХреЗ tags рд╡рд╛рд▓реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдЬрд╝рдорд╛рддреЗ рд╣реИрдВред
+
+рдЕрдкрдиреЗ tags рдХреЗ рд▓рд┐рдП metadata рдмрдирд╛рдПрдБ рдФрд░ рдЙрд╕реЗ `openapi_tags` parameter рдореЗрдВ pass рдХрд░реЗрдВ:
+
+{* ../../docs_src/metadata/tutorial004_py310.py hl[3:16,18] *}
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк descriptions рдХреЗ рдЕрдВрджрд░ Markdown рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "login" bold (**login**) рдореЗрдВ рджрд┐рдЦреЗрдЧрд╛ рдФрд░ "fancy" italics (_fancy_) рдореЗрдВ рджрд┐рдЦреЗрдЧрд╛ред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рднреА tags рдХреЗ рд▓рд┐рдП metadata рдЬреЛрдбрд╝рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИред
+
+///
+
+### рдЕрдкрдиреЗ tags рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-your-tags }
+
+рдЕрдкрдиреЗ *path operations* (рдФрд░ `APIRouter`s) рдХреЗ рд╕рд╛рде `tags` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ tags рдореЗрдВ assign рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:
+
+{* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *}
+
+/// note | рдиреЛрдЯ
+
+Tags рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ [Path Operation Configuration](path-operation-configuration.md#tags) рдореЗрдВред
+
+///
+
+### Docs рдЬрд╛рдБрдЪреЗрдВ { #check-the-docs }
+
+рдЕрдм, рдЕрдЧрд░ рдЖрдк docs рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд metadata рджрд┐рдЦрд╛рдПрдБрдЧреЗ:
+
+<img src="/img/tutorial/metadata/image02.png">
+
+### Tags рдХрд╛ рдХреНрд░рдо { #order-of-tags }
+
+рд╣рд░ tag metadata dictionary рдХрд╛ рдХреНрд░рдо рднреА docs UI рдореЗрдВ рджрд┐рдЦрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░рдо рдХреЛ define рдХрд░рддрд╛ рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рднрд▓реЗ рд╣реА `users` alphabetical order рдореЗрдВ `items` рдХреЗ рдмрд╛рдж рдЖрддрд╛, рдпрд╣ рдЙрдирд╕реЗ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЙрдирдХреА metadata рдХреЛ list рдореЗрдВ рдкрд╣рд▓реА dictionary рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдерд╛ред
+
+## OpenAPI URL { #openapi-url }
+
+Default рд░реВрдк рд╕реЗ, OpenAPI schema `/openapi.json` рдкрд░ serve рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ `openapi_url` parameter рдХреЗ рд╕рд╛рде configure рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ `/api/v1/openapi.json` рдкрд░ serve рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП set рдХрд░рдиреЗ рд╣реЗрддреБ:
+
+{* ../../docs_src/metadata/tutorial002_py310.py hl[3] *}
+
+рдпрджрд┐ рдЖрдк OpenAPI schema рдХреЛ рдкреВрд░реА рддрд░рд╣ disable рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк `openapi_url=None` set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ documentation user interfaces рднреА disable рд╣реЛ рдЬрд╛рдПрдБрдЧреЗред
+
+## Docs URLs { #docs-urls }
+
+рдЖрдк рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЧрдП рджреЛ documentation user interfaces configure рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* **Swagger UI**: `/docs` рдкрд░ serve рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+ * рдЖрдк рдЗрд╕рдХрд╛ URL `docs_url` parameter рдХреЗ рд╕рд╛рде set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+ * рдЖрдк `docs_url=None` set рдХрд░рдХреЗ рдЗрд╕реЗ disable рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+* **ReDoc**: `/redoc` рдкрд░ serve рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+ * рдЖрдк рдЗрд╕рдХрд╛ URL `redoc_url` parameter рдХреЗ рд╕рд╛рде set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+ * рдЖрдк `redoc_url=None` set рдХрд░рдХреЗ рдЗрд╕реЗ disable рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Swagger UI рдХреЛ `/documentation` рдкрд░ serve рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП set рдХрд░рдирд╛ рдФрд░ ReDoc рдХреЛ disable рдХрд░рдирд╛:
+
+{* ../../docs_src/metadata/tutorial003_py310.py hl[3] *}
--- /dev/null
+# Middleware { #middleware }
+
+рдЖрдк **FastAPI** applications рдореЗрдВ middleware рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+"middleware" рдПрдХ function рд╣реИ рдЬреЛ рд╣рд░ **request** рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЙрд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ *path operation* рджреНрд╡рд╛рд░рд╛ process рдХрд┐рдпрд╛ рдЬрд╛рдПред рдФрд░ рд╣рд░ **response** рдХреЗ рд╕рд╛рде рднреА, рдЙрд╕реЗ рд▓реМрдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред
+
+* рдпрд╣ рдЖрдкрдХреЗ application рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╣рд░ **request** рд▓реЗрддрд╛ рд╣реИред
+* рдлрд┐рд░ рдпрд╣ рдЙрд╕ **request** рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ required code рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред
+* рдлрд┐рд░ рдпрд╣ **request** рдХреЛ application рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЗ рджреНрд╡рд╛рд░рд╛ process рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рднреЗрдЬрддрд╛ рд╣реИ (рдХрд┐рд╕реА *path operation* рджреНрд╡рд╛рд░рд╛)ред
+* рдлрд┐рд░ рдпрд╣ application рджреНрд╡рд╛рд░рд╛ generate рдХрд┐рдпрд╛ рдЧрдпрд╛ **response** рд▓реЗрддрд╛ рд╣реИ (рдХрд┐рд╕реА *path operation* рджреНрд╡рд╛рд░рд╛)ред
+* рдпрд╣ рдЙрд╕ **response** рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ required code рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред
+* рдлрд┐рд░ рдпрд╣ **response** рд▓реМрдЯрд╛рддрд╛ рд╣реИред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ `yield` рд╡рд╛рд▓реА dependencies рд╣реИрдВ, рддреЛ exit code middleware рдХреЗ *рдмрд╛рдж* рдЪрд▓реЗрдЧрд╛ред
+
+рдЕрдЧрд░ рдХреЛрдИ background tasks рдереЗ ([Background Tasks](background-tasks.md) section рдореЗрдВ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ), рддреЛ рд╡реЗ рд╕рднреА middleware рдХреЗ *рдмрд╛рдж* рдЪрд▓реЗрдВрдЧреЗред
+
+///
+
+## Middleware рдмрдирд╛рдПрдВ { #create-a-middleware }
+
+middleware рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА function рдХреЗ рдКрдкрд░ decorator `@app.middleware("http")` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+middleware function рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ:
+
+* `request`ред
+* рдПрдХ function `call_next` рдЬреЛ `request` рдХреЛ parameter рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
+ * рдпрд╣ function `request` рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд *path operation* рддрдХ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛ред
+ * рдлрд┐рд░ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд *path operation* рджреНрд╡рд╛рд░рд╛ generate рдХрд┐рдпрд╛ рдЧрдпрд╛ `response` рд▓реМрдЯрд╛рддрд╛ рд╣реИред
+* рдлрд┐рд░ рдЖрдк `response` рд▓реМрдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕реЗ рдФрд░ modify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/middleware/tutorial001_py310.py hl[8:9,11,14] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ custom proprietary headers рдХреЛ [`X-` prefix рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ custom headers рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк browser рдореЗрдВ client рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ CORS configurations ([CORS (Cross-Origin Resource Sharing)](cors.md)) рдореЗрдВ `expose_headers` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ [Starlette рдХреЗ CORS docs](https://www.starlette.dev/middleware/#corsmiddleware) рдореЗрдВ documented рд╣реИред
+
+///
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЖрдк `from starlette.requests import Request` рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП, developer рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ provide рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддрд╛ рд╣реИред
+
+///
+
+### `response` рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ { #before-and-after-the-response }
+
+рдЖрдк `request` рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП code рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ *path operation* рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗред
+
+рдФрд░ `response` generate рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдЙрд╕реЗ рд▓реМрдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ custom header `X-Process-Time` рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ seconds рдореЗрдВ рд╡рд╣ time рд╣реЛ рдЬреЛ request рдХреЛ process рдХрд░рдиреЗ рдФрд░ response generate рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛:
+
+{* ../../docs_src/middleware/tutorial001_py310.py hl[10,12:13] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрд╣рд╛рдБ рд╣рдо `time.time()` рдХреЗ рдмрдЬрд╛рдп [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрди use cases рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ precise рд╣реЛ рд╕рдХрддрд╛ рд╣реИред ЁЯдУ
+
+///
+
+## рдХрдИ middleware рдХрд╛ execution order { #multiple-middleware-execution-order }
+
+рдЬрдм рдЖрдк `@app.middleware()` decorator рдпрд╛ `app.add_middleware()` method рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ middleware рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рд░ рдирдпрд╛ middleware application рдХреЛ wrap рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ stack рдмрдирддрд╛ рд╣реИред рдЬреЛ middleware рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ *outermost* рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓рд╛ *innermost* рд╣реЛрддрд╛ рд╣реИред
+
+request path рдкрд░, *outermost* middleware рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИред
+
+response path рдкрд░, рдпрд╣ рдЕрдВрдд рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```Python
+app.add_middleware(MiddlewareA)
+app.add_middleware(MiddlewareB)
+```
+
+рдЗрд╕рд╕реЗ execution order рдпрд╣ рд╣реЛрддрд╛ рд╣реИ:
+
+* **Request**: MiddlewareB тЖТ MiddlewareA тЖТ route
+
+* **Response**: route тЖТ MiddlewareA тЖТ MiddlewareB
+
+рдпрд╣ stacking behavior рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ middleware рдПрдХ predictable рдФрд░ controllable order рдореЗрдВ execute рд╣реЛрдВред
+
+## рдЕрдиреНрдп middleware { #other-middlewares }
+
+рдЖрдк рдмрд╛рдж рдореЗрдВ [Advanced User Guide: Advanced Middleware](../advanced/middleware.md) рдореЗрдВ рдЕрдиреНрдп middleware рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк рдЕрдЧрд▓реЗ section рдореЗрдВ middleware рдХреЗ рд╕рд╛рде <abbr title="Cross-Origin Resource Sharing - рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ">CORS</abbr> рдХреЛ handle рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗред
--- /dev/null
+# Path Operation Configuration { #path-operation-configuration }
+
+рдХрдИ parameters рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреЗ *path operation decorator* рдХреЛ configure рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ parameters рд╕реАрдзреЗ *path operation decorator* рдХреЛ pass рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдкрдХреЗ *path operation function* рдХреЛ рдирд╣реАрдВред
+
+///
+
+## Response Status Code { #response-status-code }
+
+рдЖрдк рдЕрдкрдиреА *path operation* рдХреА response рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ (HTTP) `status_code` define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк рд╕реАрдзреЗ `int` code pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ `404`ред
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рд░ number code рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рдЖрдк `status` рдореЗрдВ shortcut constants рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_operation_configuration/tutorial001_py310.py hl[1,15] *}
+
+рд╡рд╣ status code response рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ OpenAPI schema рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЖрдк `from starlette import status` рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, developer рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╣реА `starlette.status` `fastapi.status` рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддрд╛ рд╣реИред
+
+///
+
+## Tags { #tags }
+
+рдЖрдк рдЕрдкрдиреА *path operation* рдореЗрдВ tags рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, parameter `tags` рдХреЛ `str` рдХреА `list` рдХреЗ рд╕рд╛рде pass рдХрд░реЗрдВ (рдЖрдо рддреМрд░ рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ `str`):
+
+{* ../../docs_src/path_operation_configuration/tutorial002_py310.py hl[15,20,25] *}
+
+рд╡реЗ OpenAPI schema рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ automatic documentation interfaces рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:
+
+<img src="/img/tutorial/path-operation-configuration/image01.png">
+
+### Enums рдХреЗ рд╕рд╛рде Tags { #tags-with-enums }
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА application рд╣реИ, рддреЛ рдЖрдк рдЕрдВрдд рдореЗрдВ **рдХрдИ tags** рдЬрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ related *path operations* рдХреЗ рд▓рд┐рдП рдЖрдк рд╣рдореЗрд╢рд╛ **рдПрдХ рд╣реА tag** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, tags рдХреЛ рдПрдХ `Enum` рдореЗрдВ store рдХрд░рдирд╛ рд╕рдордЭрджрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред
+
+**FastAPI** рдЗрд╕реЗ plain strings рдХреА рддрд░рд╣ рд╣реА support рдХрд░рддрд╛ рд╣реИ:
+
+{* ../../docs_src/path_operation_configuration/tutorial002b_py310.py hl[1,8:10,13,18] *}
+
+## Summary рдФрд░ description { #summary-and-description }
+
+рдЖрдк `summary` рдФрд░ `description` рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_operation_configuration/tutorial003_py310.py hl[17:18] *}
+
+## Docstring рд╕реЗ description { #description-from-docstring }
+
+рдХреНрдпреЛрдВрдХрд┐ descriptions рдЖрдо рддреМрд░ рдкрд░ рд▓рдВрдмреА рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдХрдИ lines рдореЗрдВ рдлреИрд▓рддреА рд╣реИрдВ, рдЖрдк *path operation* рдХреА description рдХреЛ function <dfn title="documentation рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА function рдХреЗ рдЕрдВрджрд░ рдкрд╣рд▓реА expression рдХреЗ рд░реВрдк рдореЗрдВ multi-line string (рдЬреЛ рдХрд┐рд╕реА рднреА variable рдХреЛ assign рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реЛрддреА)">docstring</dfn> рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ **FastAPI** рдЙрд╕реЗ рд╡рд╣реАрдВ рд╕реЗ рдкрдврд╝реЗрдЧрд╛ред
+
+рдЖрдк docstring рдореЗрдВ [Markdown](https://en.wikipedia.org/wiki/Markdown) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ interpret рдФрд░ display рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (docstring indentation рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП)ред
+
+{* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *}
+
+рдЗрд╕реЗ interactive docs рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
+
+<img src="/img/tutorial/path-operation-configuration/image02.png">
+
+## Response description { #response-description }
+
+рдЖрдк parameter `response_description` рдХреЗ рд╕рд╛рде response description specify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *}
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ `response_description` рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ response рдХреЛ refer рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ `description` рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ *path operation* рдХреЛ refer рдХрд░рддрд╛ рд╣реИред
+
+///
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+OpenAPI specify рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ *path operation* рдХреЛ response description required рд╣реЛрддреА рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк рдХреЛрдИ provide рдирд╣реАрдВ рдХрд░рддреЗ, рддреЛ **FastAPI** рдЕрдкрдиреЗ рдЖрдк "Successful response" generate рдХрд░ рджреЗрдЧрд╛ред
+
+///
+
+<img src="/img/tutorial/path-operation-configuration/image03.png">
+
+## рдПрдХ *path operation* рдХреЛ Deprecated рдХрд░реЗрдВ { #deprecate-a-path-operation }
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА *path operation* рдХреЛ <dfn title="рдкреБрд░рд╛рдирд╛, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ">deprecated</dfn> рдХреЗ рд░реВрдк рдореЗрдВ mark рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рд╣рдЯрд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ parameter `deprecated` pass рдХрд░реЗрдВ:
+
+{* ../../docs_src/path_operation_configuration/tutorial006_py310.py hl[16] *}
+
+рдЗрд╕реЗ interactive docs рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ deprecated рдХреЗ рд░реВрдк рдореЗрдВ mark рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
+
+<img src="/img/tutorial/path-operation-configuration/image04.png">
+
+рджреЗрдЦреЗрдВ рдХрд┐ deprecated рдФрд░ non-deprecated *path operations* рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ:
+
+<img src="/img/tutorial/path-operation-configuration/image05.png">
+
+## Recap { #recap }
+
+рдЖрдк *path operation decorators* рдХреЛ parameters pass рдХрд░рдХреЗ рдЕрдкрдиреА *path operations* рдХреЗ рд▓рд┐рдП metadata рдЖрд╕рд╛рдиреА рд╕реЗ configure рдФрд░ add рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
--- /dev/null
+# Path Parameters рдФрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ Validations { #path-parameters-and-numeric-validations }
+
+рдЬрд┐рд╕ рддрд░рд╣ рдЖрдк `Query` рдХреЗ рд╕рд╛рде query parameters рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ validations рдФрд░ metadata рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реА рддрд░рд╣ рдЖрдк `Path` рдХреЗ рд╕рд╛рде path parameters рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА validations рдФрд░ metadata рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+## `Path` import рдХрд░реЗрдВ { #import-path }
+
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, `fastapi` рд╕реЗ `Path` import рдХрд░реЗрдВ, рдФрд░ `Annotated` import рдХрд░реЗрдВ:
+
+{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *}
+
+/// note | рдиреЛрдЯ
+
+FastAPI рдиреЗ version 0.95.0 рдореЗрдВ `Annotated` рдХреЗ рд▓рд┐рдП support рдЬреЛрдбрд╝рд╛ рдерд╛ (рдФрд░ рдЗрд╕рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛)ред
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреБрд░рд╛рдирд╛ version рд╣реИ, рддреЛ `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ errors рдорд┐рд▓реЗрдВрдЧреЗред
+
+`Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк [FastAPI version рдХреЛ Upgrade рдХрд░реЗрдВ](../deployment/versions.md#upgrading-the-fastapi-versions) рдХрдо рд╕реЗ рдХрдо 0.95.1 рддрдХред
+
+///
+
+## Metadata рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ { #declare-metadata }
+
+рдЖрдк `Query` рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ рд╕рднреА parameters рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡реИрд╕реЗ рд╣реА рдпрд╣рд╛рдБ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, path parameter `item_id` рдХреЗ рд▓рд┐рдП `title` metadata value рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[10] *}
+
+/// note | рдиреЛрдЯ
+
+рдПрдХ path parameter рд╣рдореЗрд╢рд╛ required рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реЗ path рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рд╣реЛрддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЖрдкрдиреЗ рдЗрд╕реЗ `None` рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реЛ рдпрд╛ рдХреЛрдИ default value рд╕реЗрдЯ рдХреА рд╣реЛ, рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рдлрд┐рд░ рднреА рд╣рдореЗрд╢рд╛ required рд░рд╣реЗрдЧрд╛ред
+
+///
+
+## Parameters рдХреЛ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдо рджреЗрдВ { #order-the-parameters-as-you-need }
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрджрд┐ рдЖрдк `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╢рд╛рдпрдж рдЙрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИред
+
+///
+
+рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк query parameter `q` рдХреЛ required `str` рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдФрд░ рдЖрдкрдХреЛ рдЙрд╕ parameter рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ `Query` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдлрд┐рд░ рднреА `item_id` path parameter рдХреЗ рд▓рд┐рдП `Path` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗред
+
+рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ value рдХреЛ, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ "default" рд╣реИ, рдРрд╕реЗ value рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ "default" рдирд╣реАрдВ рд╣реИ, рддреЛ Python рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ред
+
+рд▓реЗрдХрд┐рди рдЖрдк рдЙрдирдХрд╛ рдХреНрд░рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд┐рдирд╛ default рд╡рд╛рд▓реЗ value (query parameter `q`) рдХреЛ рдкрд╣рд▓реЗ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдХреЗ рд▓рд┐рдП рдЗрд╕рд╕реЗ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рдпрд╣ parameters рдХреЛ рдЙрдирдХреЗ рдирд╛рдореЛрдВ, types рдФрд░ default declarations (`Query`, `Path`, рдЖрджрд┐) рд╕реЗ рдкрд╣рдЪрд╛рди рд▓реЗрдЧрд╛, рдЗрд╕реЗ рдХреНрд░рдо рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред
+
+рддреЛ, рдЖрдк рдЕрдкрдиреА function рдЗрд╕ рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_params_numeric_validations/tutorial002_py310.py hl[7] *}
+
+рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк `Query()` рдпрд╛ `Path()` рдХреЗ рд▓рд┐рдП function parameter default values рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
+
+{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py310.py *}
+
+## Parameters рдХреЛ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдо рджреЗрдВ, tricks { #order-the-parameters-as-you-need-tricks }
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрджрд┐ рдЖрдк `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╢рд╛рдпрдж рдЙрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИред
+
+///
+
+рдпрд╣рд╛рдБ рдПрдХ **рдЫреЛрдЯреА trick** рд╣реИ рдЬреЛ рдХрд╛рдо рдЖ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЕрдХреНрд╕рд░ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рдкрдбрд╝реЗрдЧреАред
+
+рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐:
+
+* `q` query parameter рдХреЛ рдмрд┐рдирд╛ `Query` рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА default value рдХреЗ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ
+* path parameter `item_id` рдХреЛ `Path` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ
+* рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рд░рдЦреЗрдВ
+* `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ
+
+...рддреЛ Python рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╡рд┐рд╢реЗрд╖ syntax рд╣реИред
+
+function рдХреЗ рдкрд╣рд▓реЗ parameter рдХреЗ рд░реВрдк рдореЗрдВ `*` рдкрд╛рд╕ рдХрд░реЗрдВред
+
+Python рдЙрд╕ `*` рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА parameters рдХреЛ keyword arguments (key-value pairs) рдХреЗ рд░реВрдк рдореЗрдВ call рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рдиреНрд╣реЗрдВ <abbr title="From: K-ey W-ord Arg-uments - рд╕реЗ: K-ey W-ord Arg-uments"><code>kwargs</code></abbr> рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкрд╛рд╕ default value рди рд╣реЛред
+
+{* ../../docs_src/path_params_numeric_validations/tutorial003_py310.py hl[7] *}
+
+### `Annotated` рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ { #better-with-annotated }
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪреВрдБрдХрд┐ рдЖрдк function parameter default values рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рд╢рд╛рдпрдж рдЖрдкрдХреЛ `*` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рдкрдбрд╝реЗрдЧреАред
+
+{* ../../docs_src/path_params_numeric_validations/tutorial003_an_py310.py hl[10] *}
+
+## Number validations: greater than or equal { #number-validations-greater-than-or-equal }
+
+`Query` рдФрд░ `Path` (рдФрд░ рдЕрдиреНрдп рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ) рдХреЗ рд╕рд╛рде рдЖрдк number constraints рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣рд╛рдБ, `ge=1` рдХреЗ рд╕рд╛рде, `item_id` рдХреЛ `1` рд╕реЗ "`g`reater than or `e`qual" integer number рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред
+
+{* ../../docs_src/path_params_numeric_validations/tutorial004_an_py310.py hl[10] *}
+
+## Number validations: greater than рдФрд░ less than or equal { #number-validations-greater-than-and-less-than-or-equal }
+
+рдпрд╣реА рдмрд╛рдд рдЗрди рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ:
+
+* `gt`: `g`reater `t`han
+* `le`: `l`ess than or `e`qual
+
+{* ../../docs_src/path_params_numeric_validations/tutorial005_an_py310.py hl[10] *}
+
+## Number validations: floats, greater than рдФрд░ less than { #number-validations-floats-greater-than-and-less-than }
+
+Number validations `float` values рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред
+
+рдпрд╣реАрдВ рдкрд░ <abbr title="greater than - рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ"><code>gt</code></abbr> рдШреЛрд╖рд┐рдд рдХрд░ рдкрд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд┐рд░реНрдл <abbr title="greater than or equal - рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░"><code>ge</code></abbr> рдирд╣реАрдВред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ require рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ value `0` рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рд╡рд╣ `1` рд╕реЗ рдХрдо рд╣реЛред
+
+рддреЛ, `0.5` рдПрдХ valid value рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди `0.0` рдпрд╛ `0` рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
+
+рдФрд░ рдпрд╣реА рдмрд╛рдд <abbr title="less than - рдЗрд╕рд╕реЗ рдХрдо"><code>lt</code></abbr> рдХреЗ рд▓рд┐рдП рднреА рд╣реИред
+
+{* ../../docs_src/path_params_numeric_validations/tutorial006_an_py310.py hl[13] *}
+
+## Recap { #recap }
+
+`Query`, `Path` (рдФрд░ рдЕрдиреНрдп рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдЖрдк metadata рдФрд░ string validations рдЙрд╕реА рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ [Query Parameters рдФрд░ String Validations](query-params-str-validations.md) рдХреЗ рд╕рд╛рдеред
+
+рдФрд░ рдЖрдк numeric validations рднреА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* `gt`: `g`reater `t`han
+* `ge`: `g`reater than or `e`qual
+* `lt`: `l`ess `t`han
+* `le`: `l`ess than or `e`qual
+
+/// note | рдиреЛрдЯ
+
+`Query`, `Path`, рдФрд░ рдЕрдиреНрдп classes рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдПрдХ common `Param` class рдХреА subclasses рд╣реИрдВред
+
+рд╡реЗ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд validation рдФрд░ metadata рдХреЗ рд▓рд┐рдП рд╡рд╣реА parameters рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИред
+
+///
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЬрдм рдЖрдк `fastapi` рд╕реЗ `Query`, `Path` рдФрд░ рдЕрдиреНрдп import рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ functions рд╣реЛрддреЗ рд╣реИрдВред
+
+рдЬрдм рдЙрдиреНрд╣реЗрдВ call рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЙрд╕реА рдирд╛рдо рдХреА classes рдХреЗ instances return рдХрд░рддреЗ рд╣реИрдВред
+
+рддреЛ, рдЖрдк `Query` import рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ function рд╣реИред рдФрд░ рдЬрдм рдЖрдк рдЗрд╕реЗ call рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ `Query` рдирд╛рдо рдХреА class рдХрд╛ рдПрдХ instance return рдХрд░рддрд╛ рд╣реИред
+
+рдпреЗ functions рдЗрд╕рд▓рд┐рдП рд╣реИрдВ (classes рдХреЛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп) рддрд╛рдХрд┐ рдЖрдкрдХрд╛ editor рдЙрдирдХреЗ types рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ errors mark рди рдХрд░реЗред
+
+рдЗрд╕ рддрд░рд╣ рдЖрдк рдЙрди errors рдХреЛ ignore рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП custom configurations рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп editor рдФрд░ coding tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
--- /dev/null
+# Path Parameters { #path-parameters }
+
+рдЖрдк Python format strings рджреНрд╡рд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рди syntax рдХреЗ рд╕рд╛рде path "parameters" рдпрд╛ "variables" declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_params/tutorial001_py310.py hl[6:7] *}
+
+path parameter `item_id` рдХреА value рдЖрдкрдХреЗ function рдХреЛ argument `item_id` рдХреЗ рд░реВрдк рдореЗрдВ pass рдХреА рдЬрд╛рдПрдЧреАред
+
+рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк рдпрд╣ example run рдХрд░рддреЗ рд╣реИрдВ рдФрд░ [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ response рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
+
+```JSON
+{"item_id":"foo"}
+```
+
+## Types рдХреЗ рд╕рд╛рде Path parameters { #path-parameters-with-types }
+
+рдЖрдк standard Python type annotations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ function рдореЗрдВ рдХрд┐рд╕реА path parameter рдХрд╛ type declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_params/tutorial002_py310.py hl[7] *}
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, `item_id` рдХреЛ `int` declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ function рдХреЗ рдЕрдВрджрд░ editor support рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ error checks, completion рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
+
+///
+
+## Data <dfn title="рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: serialization, parsing, marshalling">conversion</dfn> { #data-conversion }
+
+рдЕрдЧрд░ рдЖрдк рдпрд╣ example run рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ browser рдореЗрдВ [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3) рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ response рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
+
+```JSON
+{"item_id":3}
+```
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЗ function рдиреЗ рдЬреЛ value рдкреНрд░рд╛рдкреНрдд рдХреА (рдФрд░ return рдХреА) рд╡рд╣ `3` рд╣реИ, Python `int` рдХреЗ рд░реВрдк рдореЗрдВ, рди рдХрд┐ string `"3"`ред
+
+рддреЛ, рдЙрд╕ type declaration рдХреЗ рд╕рд╛рде, **FastAPI** рдЖрдкрдХреЛ automatic request <dfn title="HTTP request рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА string рдХреЛ Python data рдореЗрдВ рдмрджрд▓рдирд╛">"parsing"</dfn> рджреЗрддрд╛ рд╣реИред
+
+///
+
+## Data validation { #data-validation }
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк browser рдореЗрдВ [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдЕрдЪреНрдЫрд╛ HTTP error рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
+
+```JSON
+{
+ "detail": [
+ {
+ "type": "int_parsing",
+ "loc": [
+ "path",
+ "item_id"
+ ],
+ "msg": "Input should be a valid integer, unable to parse string as an integer",
+ "input": "foo"
+ }
+ ]
+}
+```
+
+рдХреНрдпреЛрдВрдХрд┐ path parameter `item_id` рдХреА value `"foo"` рдереА, рдЬреЛ рдХрд┐ `int` рдирд╣реАрдВ рд╣реИред
+
+рдЕрдЧрд░ рдЖрдкрдиреЗ `int` рдХреЗ рдмрдЬрд╛рдп `float` рджрд┐рдпрд╛, рддреЛ рднреА рд╡рд╣реА error рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬреИрд╕реЗ: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рддреЛ, рдЙрд╕реА Python type declaration рдХреЗ рд╕рд╛рде, **FastAPI** рдЖрдкрдХреЛ data validation рджреЗрддрд╛ рд╣реИред
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ error рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ validation рдХрд┐рд╕ рдЬрдЧрд╣ pass рдирд╣реАрдВ рд╣реБрдЖред
+
+рдпрд╣ рдЖрдкрдХреЗ API рдХреЗ рд╕рд╛рде interact рдХрд░рдиреЗ рд╡рд╛рд▓реЗ code рдХреЛ develop рдФрд░ debug рдХрд░рддреЗ рд╕рдордп рдмреЗрд╣рдж рдорджрджрдЧрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
+
+///
+
+## Documentation { #documentation }
+
+рдФрд░ рдЬрдм рдЖрдк рдЕрдкрдиреЗ browser рдореЗрдВ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ automatic, interactive, API documentation рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
+
+<img src="/img/tutorial/path-params/image01.png">
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдлрд┐рд░ рд╕реЗ, рдмрд╕ рдЙрд╕реА Python type declaration рдХреЗ рд╕рд╛рде, **FastAPI** рдЖрдкрдХреЛ automatic, interactive documentation рджреЗрддрд╛ рд╣реИ (Swagger UI рдХреЛ integrate рдХрд░рддреЗ рд╣реБрдП)ред
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ path parameter рдХреЛ integer рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+///
+
+## Standard-рдЖрдзрд╛рд░рд┐рдд рд▓рд╛рдн, рд╡реИрдХрд▓реНрдкрд┐рдХ documentation { #standards-based-benefits-alternative-documentation }
+
+рдФрд░ рдХреНрдпреЛрдВрдХрд┐ generate рдХрд┐рдпрд╛ рдЧрдпрд╛ schema [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) standard рд╕реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдИ compatible tools рд╣реИрдВред
+
+рдЗрд╕реА рд╡рдЬрд╣ рд╕реЗ, **FastAPI** рд╕реНрд╡рдпрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ API documentation рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (ReDoc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП), рдЬрд┐рд╕реЗ рдЖрдк [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) рдкрд░ access рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<img src="/img/tutorial/path-params/image02.png">
+
+рдЗрд╕реА рддрд░рд╣, рдХрдИ compatible tools рд╣реИрдВред рдЗрдирдореЗрдВ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП code generation tools рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
+
+## Pydantic { #pydantic }
+
+рд╕рд╛рд░рд╛ data validation рдЕрдВрджрд░реВрдиреА рддреМрд░ рдкрд░ [Pydantic](https://docs.pydantic.dev/) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рднреА рд▓рд╛рдн рдорд┐рд▓рддреЗ рд╣реИрдВред рдФрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЕрдЪреНрдЫреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рд╣реИрдВред
+
+рдЖрдк `str`, `float`, `bool` рдФрд░ рдХрдИ рдЕрдиреНрдп рдЬрдЯрд┐рд▓ data types рдХреЗ рд╕рд╛рде рд╡рд╣реА type declarations рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ tutorial рдХреЗ рдЕрдЧрд▓реЗ chapters рдореЗрдВ explore рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+## рдХреНрд░рдо рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ { #order-matters }
+
+*path operations* рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ fixed path рд╣реЛред
+
+рдЬреИрд╕реЗ `/users/me`, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ current user рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ data рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
+
+рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ `/users/{user_id}` path рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА specific user рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА user ID рд╕реЗ data рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
+
+рдХреНрдпреЛрдВрдХрд┐ *path operations* рдХрд╛ evaluation рдХреНрд░рдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ `/users/me` рдХреЗ рд▓рд┐рдП path, `/users/{user_id}` рд╡рд╛рд▓реЗ path рд╕реЗ рдкрд╣рд▓реЗ declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ:
+
+{* ../../docs_src/path_params/tutorial003_py310.py hl[6,11] *}
+
+рдЕрдиреНрдпрдерд╛, `/users/{user_id}` рдХреЗ рд▓рд┐рдП path `/users/me` рд╕реЗ рднреА match рдХрд░реЗрдЧрд╛, рдпрд╣ "рд╕реЛрдЪрддреЗ рд╣реБрдП" рдХрд┐ рдЙрд╕реЗ `user_id` parameter рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХреА value `"me"` рд╣реИред
+
+рдЗрд╕реА рддрд░рд╣, рдЖрдк рдХрд┐рд╕реА path operation рдХреЛ рдлрд┐рд░ рд╕реЗ define рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ:
+
+{* ../../docs_src/path_params/tutorial003b_py310.py hl[6,11] *}
+
+рдкрд╣рд▓рд╛ рд╡рд╛рд▓рд╛ рд╣рдореЗрд╢рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ path рдкрд╣рд▓реЗ match рдХрд░рддрд╛ рд╣реИред
+
+## рдкрд╣рд▓реЗ рд╕реЗ рддрдп values { #predefined-values }
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ *path operation* рд╣реИ рдЬреЛ рдПрдХ *path parameter* рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрднрд╡ valid *path parameter* values рдкрд╣рд▓реЗ рд╕реЗ рддрдп рд╣реЛрдВ, рддреЛ рдЖрдк standard Python <abbr title="Enumeration">`Enum`</abbr> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+### рдПрдХ `Enum` class рдмрдирд╛рдПрдВ { #create-an-enum-class }
+
+`Enum` import рдХрд░реЗрдВ рдФрд░ рдПрдХ sub-class рдмрдирд╛рдПрдВ рдЬреЛ `str` рдФрд░ `Enum` рд╕реЗ inherit рдХрд░рддреА рд╣реЛред
+
+`str` рд╕реЗ inherit рдХрд░рдиреЗ рдкрд░ API docs рдпрд╣ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдХрд┐ values рдХрд╛ type `string` рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░рд╣ рд╕реЗ render рдХрд░ рдкрд╛рдПрдВрдЧреЗред
+
+рдлрд┐рд░ fixed values рдХреЗ рд╕рд╛рде class attributes рдмрдирд╛рдПрдВ, рдЬреЛ рдЙрдкрд▓рдмреНрдз valid values рд╣реЛрдВрдЧреА:
+
+{* ../../docs_src/path_params/tutorial005_py310.py hl[1,6:9] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд░ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, "AlexNet", "ResNet", рдФрд░ "LeNet" рдмрд╕ Machine Learning <dfn title="рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, Deep Learning model architectures">models</dfn> рдХреЗ рдирд╛рдо рд╣реИрдВред
+
+///
+
+### рдПрдХ *path parameter* declare рдХрд░реЗрдВ { #declare-a-path-parameter }
+
+рдлрд┐рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ enum class (`ModelName`) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ type annotation рдХреЗ рд╕рд╛рде рдПрдХ *path parameter* рдмрдирд╛рдПрдВ:
+
+{* ../../docs_src/path_params/tutorial005_py310.py hl[16] *}
+
+### Docs рджреЗрдЦреЗрдВ { #check-the-docs }
+
+рдХреНрдпреЛрдВрдХрд┐ *path parameter* рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз values рдкрд╣рд▓реЗ рд╕реЗ рддрдп рд╣реИрдВ, interactive docs рдЙрдиреНрд╣реЗрдВ рдЕрдЪреНрдЫреЗ рд╕реЗ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<img src="/img/tutorial/path-params/image03.png">
+
+### Python *enumerations* рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ { #working-with-python-enumerations }
+
+*path parameter* рдХреА value рдПрдХ *enumeration member* рд╣реЛрдЧреАред
+
+#### *Enumeration members* рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ { #compare-enumeration-members }
+
+рдЖрдк рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдЕрдкрдиреЗ рдмрдирд╛рдП рд╣реБрдП enum `ModelName` рдореЗрдВ рдореМрдЬреВрдж *enumeration member* рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_params/tutorial005_py310.py hl[17] *}
+
+#### *Enumeration value* рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ { #get-the-enumeration-value }
+
+рдЖрдк `model_name.value` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ actual value (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ `str`) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, `your_enum_member.value`:
+
+{* ../../docs_src/path_params/tutorial005_py310.py hl[20] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЖрдк `ModelName.lenet.value` рдХреЗ рд╕рд╛рде value `"lenet"` рднреА access рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+#### *Enumeration members* return рдХрд░реЗрдВ { #return-enumeration-members }
+
+рдЖрдк рдЕрдкрдиреЗ *path operation* рд╕реЗ *enum members* return рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рддрдХ рдХрд┐ JSON body рдореЗрдВ nested рднреА (рдЬреИрд╕реЗ рдПрдХ `dict`)ред
+
+Client рдХреЛ return рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдЙрдирдХреА рд╕рдВрдмрдВрдзрд┐рдд values (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ strings) рдореЗрдВ convert рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
+
+{* ../../docs_src/path_params/tutorial005_py310.py hl[18,21,23] *}
+
+рдЕрдкрдиреЗ client рдореЗрдВ рдЖрдкрдХреЛ рдРрд╕рд╛ JSON response рдорд┐рд▓реЗрдЧрд╛:
+
+```JSON
+{
+ "model_name": "alexnet",
+ "message": "Deep Learning FTW!"
+}
+```
+
+## Paths рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ Path parameters { #path-parameters-containing-paths }
+
+рдорд╛рди рд▓реЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ path `/files/{file_path}` рдХреЗ рд╕рд╛рде рдПрдХ *path operation* рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ `file_path` рдореЗрдВ рд╕реНрд╡рдпрдВ рдПрдХ *path* рд░рдЦрдирд╛ рд╣реИ, рдЬреИрд╕реЗ `home/johndoe/myfile.txt`ред
+
+рддреЛ, рдЙрд╕ file рдХреЗ рд▓рд┐рдП URL рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛: `/files/home/johndoe/myfile.txt`ред
+
+### OpenAPI support { #openapi-support }
+
+OpenAPI рдХрд┐рд╕реА *path parameter* рдХреЛ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ *path* рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП declare рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ support рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдРрд╕реЗ scenarios рдмрди рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ test рдФрд░ define рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛред
+
+рдлрд┐рд░ рднреА, рдЖрдк **FastAPI** рдореЗрдВ Starlette рдХреЗ internal tools рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдФрд░ docs рдлрд┐рд░ рднреА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдХреЛрдИ documentation рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рдмрддрд╛рдП рдХрд┐ parameter рдореЗрдВ path рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+### Path convertor { #path-convertor }
+
+Starlette рд╕реЗ рд╕реАрдзреЗ рдПрдХ option рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ *path* рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ *path parameter* declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```
+/files/{file_path:path}
+```
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, parameter рдХрд╛ рдирд╛рдо `file_path` рд╣реИ, рдФрд░ рдЖрдЦрд┐рд░реА рд╣рд┐рд╕реНрд╕рд╛, `:path`, рдЗрд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ parameter рдХрд┐рд╕реА рднреА *path* рд╕реЗ match рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+рддреЛ, рдЖрдк рдЗрд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/path_params/tutorial004_py310.py hl[6] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЖрдкрдХреЛ parameter рдореЗрдВ `/home/johndoe/myfile.txt` рд░рдЦрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, leading slash (`/`) рдХреЗ рд╕рд╛рдеред
+
+рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, URL рд╣реЛрдЧрд╛: `/files//home/johndoe/myfile.txt`, `files` рдФрд░ `home` рдХреЗ рдмреАрдЪ double slash (`//`) рдХреЗ рд╕рд╛рдеред
+
+///
+
+## Recap { #recap }
+
+**FastAPI** рдХреЗ рд╕рд╛рде, рдЫреЛрдЯреЗ, рд╕рд╣рдЬ рдФрд░ standard Python type declarations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ:
+
+* Editor support: error checks, autocompletion рдЖрджрд┐ред
+* Data "<dfn title="HTTP request рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА string рдХреЛ Python data рдореЗрдВ рдмрджрд▓рдирд╛">parsing</dfn>"
+* Data validation
+* API annotation рдФрд░ automatic documentation
+
+рдФрд░ рдЖрдкрдХреЛ рдЗрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ declare рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред
+
+рд╡реИрдХрд▓реНрдкрд┐рдХ frameworks рдХреА рддреБрд▓рдирд╛ рдореЗрдВ **FastAPI** рдХрд╛ рд╢рд╛рдпрдж рдпрд╣реА рдореБрдЦреНрдп рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд▓рд╛рдн рд╣реИ (raw performance рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред
--- /dev/null
+# Query Parameter Models { #query-parameter-models }
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрдмрдВрдзрд┐рдд **query parameters** рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ **Pydantic model** рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕рд╕реЗ рдЖрдк **model рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ** рдХрд░ рдкрд╛рдПрдБрдЧреЗ, **рдХрдИ рдЬрдЧрд╣реЛрдВ** рдкрд░, рдФрд░ рд╕рд╛рде рд╣реА рд╕рднреА parameters рдХреЗ рд▓рд┐рдП validations рдФрд░ metadata рдПрдХ рд╕рд╛рде declare рдХрд░ рдкрд╛рдПрдБрдЧреЗред ЁЯШО
+
+/// note | рдиреЛрдЯ
+
+рдпрд╣ FastAPI version `0.115.0` рд╕реЗ supported рд╣реИред ЁЯдУ
+
+///
+
+## Pydantic Model рдХреЗ рд╕рд╛рде Query Parameters { #query-parameters-with-a-pydantic-model }
+
+рдЬрд┐рди **query parameters** рдХреА рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИ рдЙрдиреНрд╣реЗрдВ рдПрдХ **Pydantic model** рдореЗрдВ declare рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ parameter рдХреЛ `Query` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░реЗрдВ:
+
+{* ../../docs_src/query_param_models/tutorial001_an_py310.py hl[9:13,17] *}
+
+**FastAPI** request рдореЗрдВ рдореМрдЬреВрдж **query parameters** рд╕реЗ **рд╣рд░ field** рдХреЗ рд▓рд┐рдП data **extract** рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рд╡рд╣ Pydantic model рджреЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ define рдХрд┐рдпрд╛ рд╣реИред
+
+## Docs рджреЗрдЦреЗрдВ { #check-the-docs }
+
+рдЖрдк `/docs` рдкрд░ docs UI рдореЗрдВ query parameters рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<div class="screenshot">
+<img src="/img/tutorial/query-param-models/image01.png">
+</div>
+
+## Extra Query Parameters рдХреЛ Forbid рдХрд░реЗрдВ { #forbid-extra-query-parameters }
+
+рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ use cases рдореЗрдВ (рд╢рд╛рдпрдж рдмрд╣реБрдд рдЖрдо рдирд╣реАрдВ), рдЖрдк рдЙрди query parameters рдХреЛ **restrict** рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк receive рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдЖрдк рдХрд┐рд╕реА рднреА `extra` fields рдХреЛ `forbid` рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Pydantic рдХреА model configuration рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_param_models/tutorial002_an_py310.py hl[10] *}
+
+рдЕрдЧрд░ рдХреЛрдИ client **query parameters** рдореЗрдВ рдХреБрдЫ **extra** data рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдПрдХ **error** response рдорд┐рд▓реЗрдЧрд╛ред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ client `plumbus` value рдХреЗ рд╕рд╛рде `tool` query parameter рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
+
+```http
+https://example.com/items/?limit=10&tool=plumbus
+```
+
+рдЙрд╕реЗ рдПрдХ **error** response рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ query parameter `tool` allowed рдирд╣реАрдВ рд╣реИ:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["query", "tool"],
+ "msg": "Extra inputs are not permitted",
+ "input": "plumbus"
+ }
+ ]
+}
+```
+
+## рд╕рд╛рд░рд╛рдВрд╢ { #summary }
+
+рдЖрдк **FastAPI** рдореЗрдВ **query parameters** declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **Pydantic models** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ЁЯШО
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+Spoiler alert: рдЖрдк cookies рдФрд░ headers declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА Pydantic models рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ tutorial рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗред ЁЯдл
+
+///
--- /dev/null
+# Query Parameters рдФрд░ String Validations { #query-parameters-and-string-validations }
+
+**FastAPI** рдЖрдкрдХреЛ рдЕрдкрдиреЗ parameters рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдФрд░ validation declare рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
+
+рдЗрд╕ application рдХреЛ example рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial001_py310.py hl[7] *}
+
+query parameter `q` рдХрд╛ type `str | None` рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ type `str` рдХрд╛ рд╣реИ рд▓реЗрдХрд┐рди `None` рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, default value `None` рд╣реИ, рдЗрд╕рд▓рд┐рдП FastAPI рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ required рдирд╣реАрдВ рд╣реИред
+
+/// note | рдиреЛрдЯ
+
+FastAPI рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ `q` рдХреА value required рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ default value `= None` рд╣реИред
+
+`str | None` рд╣реЛрдиреЗ рд╕реЗ рдЖрдкрдХрд╛ editor рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ support рджреЗ рдкрд╛рдПрдЧрд╛ рдФрд░ errors detect рдХрд░ рдкрд╛рдПрдЧрд╛ред
+
+///
+
+## рдЕрддрд┐рд░рд┐рдХреНрдд validation { #additional-validation }
+
+рд╣рдо рдпрд╣ enforce рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рднрд▓реЗ рд╣реА `q` optional рд╣реЛ, рдЬрдм рднреА рдпрд╣ provide рдХрд┐рдпрд╛ рдЬрд╛рдП, **рдЗрд╕рдХреА length 50 characters рд╕реЗ рдЕрдзрд┐рдХ рди рд╣реЛ**ред
+
+### `Query` рдФрд░ `Annotated` import рдХрд░реЗрдВ { #import-query-and-annotated }
+
+рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ import рдХрд░реЗрдВ:
+
+* `fastapi` рд╕реЗ `Query`
+* `typing` рд╕реЗ `Annotated`
+
+{* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *}
+
+/// note | рдиреЛрдЯ
+
+FastAPI рдиреЗ version 0.95.0 рдореЗрдВ `Annotated` рдХреЗ рд▓рд┐рдП support рдЬреЛрдбрд╝рд╛ (рдФрд░ рдЗрд╕рдХреА recommendation рд╢реБрд░реВ рдХреА)ред
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреБрд░рд╛рдирд╛ version рд╣реИ, рддреЛ `Annotated` use рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ errors рдорд┐рд▓реЗрдВрдЧреЗред
+
+`Annotated` use рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк [FastAPI version Upgrade рдХрд░реЗрдВ](../deployment/versions.md#upgrading-the-fastapi-versions) рдХрдо рд╕реЗ рдХрдо 0.95.1 рддрдХред
+
+///
+
+## `q` parameter рдХреЗ type рдореЗрдВ `Annotated` use рдХрд░реЗрдВ { #use-annotated-in-the-type-for-the-q-parameter }
+
+рдпрд╛рдж рд╣реИ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдмрддрд╛рдпрд╛ рдерд╛ рдХрд┐ [Python Types Intro](../python-types.md#type-hints-with-metadata-annotations) рдореЗрдВ `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ parameters рдореЗрдВ metadata рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
+
+рдЕрдм рдЗрд╕реЗ FastAPI рдХреЗ рд╕рд╛рде use рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред ЁЯЪА
+
+рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ type annotation рдерд╛:
+
+```Python
+q: str | None = None
+```
+
+рд╣рдо рдЗрд╕реЗ `Annotated` рдХреЗ рд╕рд╛рде wrap рдХрд░реЗрдВрдЧреЗ, рддреЛ рдпрд╣ рдмрди рдЬрд╛рддрд╛ рд╣реИ:
+
+```Python
+q: Annotated[str | None] = None
+```
+
+рдЗрди рджреЛрдиреЛрдВ versions рдХрд╛ рдорддрд▓рдм рдПрдХ рд╣реА рд╣реИ, `q` рдПрдХ parameter рд╣реИ рдЬреЛ `str` рдпрд╛ `None` рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ default рд░реВрдк рд╕реЗ, рдпрд╣ `None` рд╣реИред
+
+рдЕрдм рдордЬрд╝реЗрджрд╛рд░ рдЪреАрдЬрд╝реЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред ЁЯОЙ
+
+## `q` parameter рдореЗрдВ `Annotated` рдореЗрдВ `Query` рдЬреЛрдбрд╝реЗрдВ { #add-query-to-annotated-in-the-q-parameter }
+
+рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ `Annotated` рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕ case рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд validation), `Annotated` рдХреЗ рдЕрдВрджрд░ `Query` рдЬреЛрдбрд╝реЗрдВ, рдФрд░ parameter `max_length` рдХреЛ `50` рдкрд░ set рдХрд░реЗрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[9] *}
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ default value рдЕрднреА рднреА `None` рд╣реИ, рдЗрд╕рд▓рд┐рдП parameter рдЕрднреА рднреА optional рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЕрдм, `Annotated` рдХреЗ рдЕрдВрджрд░ `Query(max_length=50)` рд╣реЛрдиреЗ рд╕реЗ, рд╣рдо FastAPI рдХреЛ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ value рдХреЗ рд▓рд┐рдП **рдЕрддрд┐рд░рд┐рдХреНрдд validation** рд╣реЛ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХрддрдо 50 characters рд╣реЛрдВред ЁЯШО
+
+/// tip | рдЯрд┐рдк
+
+рдпрд╣рд╛рдБ рд╣рдо `Query()` use рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ **query parameter** рд╣реИред рдмрд╛рдж рдореЗрдВ рд╣рдо `Path()`, `Body()`, `Header()`, рдФрд░ `Cookie()` рдЬреИрд╕реЗ рдЕрдиреНрдп рджреЗрдЦреЗрдВрдЧреЗ, рдЬреЛ `Query()` рдЬреИрд╕реЗ рд╣реА arguments accept рдХрд░рддреЗ рд╣реИрдВред
+
+///
+
+FastAPI рдЕрдм:
+
+* data рдХреЛ **Validate** рдХрд░реЗрдЧрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ max length 50 characters рд╣реИ
+* рдЬрдм data valid рдирд╣реАрдВ рд╣реЛрдЧрд╛ рддреЛ client рдХреЗ рд▓рд┐рдП **clear error** рджрд┐рдЦрд╛рдПрдЧрд╛
+* OpenAPI schema *path operation* рдореЗрдВ parameter рдХреЛ **Document** рдХрд░реЗрдЧрд╛ (рддрд╛рдХрд┐ рдпрд╣ **automatic docs UI** рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ)
+
+## Alternative (рдкреБрд░рд╛рдирд╛): default value рдХреЗ рд░реВрдк рдореЗрдВ `Query` { #alternative-old-query-as-the-default-value }
+
+FastAPI рдХреЗ рдкрд┐рдЫрд▓реЗ versions (<dfn title="2023-03 рд╕реЗ рдкрд╣рд▓реЗ">0.95.0</dfn> рд╕реЗ рдкрд╣рд▓реЗ) рдореЗрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ parameter рдХреА default value рдХреЗ рд░реВрдк рдореЗрдВ `Query` use рдХрд░рдирд╛ required рдерд╛, рдмрдЬрд╛рдп рдЗрд╕реЗ `Annotated` рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ, рдЗрд╕рдХреА рдЕрдЪреНрдЫреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЖрд╕рдкрд╛рд╕ рдРрд╕рд╛ code рджрд┐рдЦреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред
+
+/// tip | рдЯрд┐рдк
+
+рдирдП code рдХреЗ рд▓рд┐рдП рдФрд░ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ, рдКрдкрд░ рд╕рдордЭрд╛рдП рдЕрдиреБрд╕рд╛рд░ `Annotated` use рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ (рдиреАрдЪреЗ рд╕рдордЭрд╛рдП рдЧрдП рд╣реИрдВ) рдФрд░ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВред ЁЯН░
+
+///
+
+рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрдкрдиреЗ function parameter рдХреА default value рдХреЗ рд░реВрдк рдореЗрдВ `Query()` use рдХрд░реЗрдВрдЧреЗ, parameter `max_length` рдХреЛ 50 рдкрд░ set рдХрд░рддреЗ рд╣реБрдП:
+
+{* ../../docs_src/query_params_str_validations/tutorial002_py310.py hl[7] *}
+
+рдЪреВрдБрдХрд┐ рдЗрд╕ case рдореЗрдВ (`Annotated` use рдХрд┐рдП рдмрд┐рдирд╛) рд╣рдореЗрдВ function рдореЗрдВ default value `None` рдХреЛ `Query()` рд╕реЗ replace рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдЕрдм рд╣рдореЗрдВ parameter `Query(default=None)` рдХреЗ рд╕рд╛рде default value set рдХрд░рдиреА рд╣реЛрдЧреА, рдпрд╣ рдЙрд╕ default value рдХреЛ define рдХрд░рдиреЗ рдХрд╛ рд╡рд╣реА рдЙрджреНрджреЗрд╢реНрдп рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо FastAPI рдХреЗ рд▓рд┐рдП)ред
+
+рддреЛ:
+
+```Python
+q: str | None = Query(default=None)
+```
+
+...parameter рдХреЛ optional рдмрдирд╛рддрд╛ рд╣реИ, `None` рдХреА default value рдХреЗ рд╕рд╛рде, рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕рдХреЗ рд╕рдорд╛рди:
+
+
+```Python
+q: str | None = None
+```
+
+рд▓реЗрдХрд┐рди `Query` version рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ query parameter рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░рддрд╛ рд╣реИред
+
+рдлрд┐рд░, рд╣рдо `Query` рдХреЛ рдФрд░ parameters pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ case рдореЗрдВ, `max_length` parameter рдЬреЛ strings рдкрд░ apply рд╣реЛрддрд╛ рд╣реИ:
+
+```Python
+q: str | None = Query(default=None, max_length=50)
+```
+
+рдпрд╣ data рдХреЛ validate рдХрд░реЗрдЧрд╛, data valid рди рд╣реЛрдиреЗ рдкрд░ clear error рджрд┐рдЦрд╛рдПрдЧрд╛, рдФрд░ OpenAPI schema *path operation* рдореЗрдВ parameter рдХреЛ document рдХрд░реЗрдЧрд╛ред
+
+### default value рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ `Annotated` рдореЗрдВ `Query` { #query-as-the-default-value-or-in-annotated }
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ `Annotated` рдХреЗ рдЕрдВрджрд░ `Query` use рдХрд░рддреЗ рд╕рдордп рдЖрдк `Query` рдХреЗ рд▓рд┐рдП `default` parameter use рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
+
+рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, function parameter рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ default value use рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдпрд╣ inconsistent рд╣реЛрдЧрд╛ред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ:
+
+```Python
+q: Annotated[str, Query(default="rick")] = "morty"
+```
+
+...рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ clear рдирд╣реАрдВ рд╣реИ рдХрд┐ default value `"rick"` рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ `"morty"`ред
+
+рддреЛ, рдЖрдк use рдХрд░реЗрдВрдЧреЗ (preferably):
+
+```Python
+q: Annotated[str, Query()] = "rick"
+```
+
+...рдпрд╛ рдкреБрд░рд╛рдиреЗ code bases рдореЗрдВ рдЖрдкрдХреЛ рдорд┐рд▓реЗрдЧрд╛:
+
+```Python
+q: str = Query(default="rick")
+```
+
+### `Annotated` рдХреЗ рдлрд╛рдпрджреЗ { #advantages-of-annotated }
+
+function parameters рдореЗрдВ default value рдХреЗ рдмрдЬрд╛рдп **`Annotated` use рдХрд░рдиреЗ рдХреА recommendation рд╣реИ**, рдпрд╣ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ **рдмреЗрд╣рддрд░** рд╣реИред ЁЯдУ
+
+**function parameter** рдХреА **default** value рд╣реА **рд╡рд╛рд╕реНрддрд╡рд┐рдХ default** value рд╣реИ, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ Python рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ intuitive рд╣реИред ЁЯШМ
+
+рдЖрдк рдЙрд╕реА function рдХреЛ FastAPI рдХреЗ рдмрд┐рдирд╛ **рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ** рдкрд░ **call** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ **рдЙрдореНрдореАрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо** рдХрд░реЗрдЧрд╛ред рдЕрдЧрд░ рдХреЛрдИ **required** parameter рд╣реИ (рдмрд┐рдирд╛ default value рдХреЗ), рддреЛ рдЖрдкрдХрд╛ **editor** рдЖрдкрдХреЛ error рдХреЗ рд╕рд╛рде рдмрддрд╛ рджреЗрдЧрд╛, **Python** рднреА required parameter pass рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ run рдХрд░рдиреЗ рдкрд░ complain рдХрд░реЗрдЧрд╛ред
+
+рдЬрдм рдЖрдк `Annotated` use рдирд╣реАрдВ рдХрд░рддреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп **(рдкреБрд░рд╛рдирд╛) default value style** use рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдЖрдк рдЙрд╕ function рдХреЛ FastAPI рдХреЗ рдмрд┐рдирд╛ **рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ** рдкрд░ call рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ function рдХреЛ рд╕рд╣реА рд╕реЗ рдХрд╛рдо рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП arguments pass рдХрд░рдирд╛ **рдпрд╛рдж рд░рдЦрдирд╛** рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ values рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдВрдЧреА (рдЬреИрд╕реЗ `str` рдХреЗ рдмрдЬрд╛рдп `QueryInfo` рдпрд╛ рдХреБрдЫ similar)ред рдФрд░ рдЖрдкрдХрд╛ editor complain рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ Python рднреА рдЙрд╕ function рдХреЛ run рдХрд░рддреЗ рд╕рдордп complain рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреЗрд╡рд▓ рддрдм рдЬрдм рдЕрдВрджрд░ рдХреЗ operations error рджреЗрдВред
+
+рдХреНрдпреЛрдВрдХрд┐ `Annotated` рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ metadata annotation рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рдЖрдк рдЙрд╕реА function рдХреЛ рдЕрдиреНрдп tools рдХреЗ рд╕рд╛рде рднреА use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ [Typer](https://typer.tiangolo.com/)ред ЁЯЪА
+
+## рдФрд░ validations рдЬреЛрдбрд╝реЗрдВ { #add-more-validations }
+
+рдЖрдк parameter `min_length` рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial003_an_py310.py hl[10] *}
+
+## regular expressions рдЬреЛрдбрд╝реЗрдВ { #add-regular-expressions }
+
+рдЖрдк рдПрдХ <dfn title="рдПрдХ regular expression, regex рдпрд╛ regexp characters рдХрд╛ рдРрд╕рд╛ sequence рд╣реИ рдЬреЛ strings рдХреЗ рд▓рд┐рдП search pattern define рдХрд░рддрд╛ рд╣реИред">regular expression</dfn> `pattern` define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ parameter match рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
+
+{* ../../docs_src/query_params_str_validations/tutorial004_an_py310.py hl[11] *}
+
+рдпрд╣ specific regular expression pattern check рдХрд░рддрд╛ рд╣реИ рдХрд┐ received parameter value:
+
+* `^`: рдирд┐рдореНрди characters рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдкрд╣рд▓реЗ рдХреЛрдИ characters рдирд╣реАрдВ рд╣реИрдВред
+* `fixedquery`: exact value `fixedquery` рд░рдЦрддреА рд╣реИред
+* `$`: рд╡рд╣реАрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, `fixedquery` рдХреЗ рдмрд╛рдж рдХреЛрдИ рдФрд░ characters рдирд╣реАрдВ рд╣реИрдВред
+
+рдЕрдЧрд░ рдЖрдк рдЗрди рд╕рднреА **"regular expression"** ideas рд╕реЗ рдЦреЛрдпрд╛ рд╣реБрдЖ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдпрд╣ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдард┐рди topic рд╣реИред рдЖрдк рдЕрднреА regular expressions рдХреА рдЬрд░реВрд░рдд рдХреЗ рдмрд┐рдирд╛ рднреА рдмрд╣реБрдд рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рднреА рдЖрдкрдХреЛ рдЗрдирдХреА рдЬрд░реВрд░рдд рд╣реЛ, рдЖрдк рдЗрдиреНрд╣реЗрдВ **FastAPI** рдореЗрдВ use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+## Default values { #default-values }
+
+рдмреЗрд╢рдХ, рдЖрдк `None` рдХреЗ рдЕрд▓рд╛рд╡рд╛ default values use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк `q` query parameter рдХреЛ `3` рдХреА `min_length` рдФрд░ `"fixedquery"` рдХреА default value рдХреЗ рд╕рд╛рде declare рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial005_an_py310.py hl[9] *}
+
+/// note | рдиреЛрдЯ
+
+`None` рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА type рдХреА default value рд╣реЛрдирд╛ parameter рдХреЛ optional (not required) рдмрдирд╛рддрд╛ рд╣реИред
+
+///
+
+## Required parameters { #required-parameters }
+
+рдЬрдм рд╣рдореЗрдВ рдЕрдзрд┐рдХ validations рдпрд╛ metadata declare рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА, рддреЛ рд╣рдо default value declare рди рдХрд░рдХреЗ рд╣реА `q` query parameter рдХреЛ required рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
+
+```Python
+q: str
+```
+
+рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
+
+```Python
+q: str | None = None
+```
+
+рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЗрд╕реЗ `Query` рдХреЗ рд╕рд╛рде declare рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдРрд╕реЗ:
+
+```Python
+q: Annotated[str | None, Query(min_length=3)] = None
+```
+
+рддреЛ, рдЬрдм рдЖрдкрдХреЛ `Query` use рдХрд░рддреЗ рд╣реБрдП рдХрд┐рд╕реА value рдХреЛ required рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░рдирд╛ рд╣реЛ, рддреЛ рдЖрдк рдмрд╕ default value declare рди рдХрд░реЗрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial006_an_py310.py hl[9] *}
+
+### Required, `None` рд╣реЛ рд╕рдХрддрд╛ рд╣реИ { #required-can-be-none }
+
+рдЖрдк declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ parameter `None` accept рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ required рд╣реИред рдпрд╣ clients рдХреЛ value рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛, рднрд▓реЗ рд╣реА value `None` рд╣реЛред
+
+рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ `None` рдПрдХ valid type рд╣реИ рд▓реЗрдХрд┐рди рдмрд╕ default value declare рди рдХрд░реЗрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial006c_an_py310.py hl[9] *}
+
+## Query parameter list / multiple values { #query-parameter-list-multiple-values }
+
+рдЬрдм рдЖрдк query parameter рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ `Query` рдХреЗ рд╕рд╛рде define рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ values рдХреА list receive рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, multiple values receive рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, query parameter `q` declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ URL рдореЗрдВ рдХрдИ рдмрд╛рд░ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial011_an_py310.py hl[9] *}
+
+рдлрд┐рд░, рдРрд╕реЗ URL рдХреЗ рд╕рд╛рде:
+
+```
+http://localhost:8000/items/?q=foo&q=bar
+```
+
+рдЖрдк multiple `q` *query parameters* рдХреА values (`foo` рдФрд░ `bar`) рдХреЛ рдЕрдкрдиреЗ *path operation function* рдХреЗ рдЕрдВрджрд░ Python `list` рдореЗрдВ, *function parameter* `q` рдореЗрдВ receive рдХрд░реЗрдВрдЧреЗред
+
+рддреЛ, рдЙрд╕ URL рдХрд╛ response рд╣реЛрдЧрд╛:
+
+```JSON
+{
+ "q": [
+ "foo",
+ "bar"
+ ]
+}
+```
+
+/// tip | рдЯрд┐рдк
+
+рдКрдкрд░ рдХреЗ example рдХреА рддрд░рд╣, `list` type рд╡рд╛рд▓рд╛ query parameter declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ `Query` use рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ request body рдХреЗ рд░реВрдк рдореЗрдВ interpret рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+///
+
+interactive API docs accordingly update рд╣реЛрдВрдЧреЗ, рддрд╛рдХрд┐ multiple values allow рд╣реЛ рд╕рдХреЗрдВ:
+
+<img src="/img/tutorial/query-params-str-validations/image02.png">
+
+### Defaults рдХреЗ рд╕рд╛рде Query parameter list / multiple values { #query-parameter-list-multiple-values-with-defaults }
+
+рдЕрдЧрд░ рдХреЛрдИ values provide рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИрдВ, рддреЛ рдЖрдк values рдХреА default `list` рднреА define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial012_an_py310.py hl[9] *}
+
+рдЕрдЧрд░ рдЖрдк рдпрд╣рд╛рдБ рдЬрд╛рддреЗ рд╣реИрдВ:
+
+```
+http://localhost:8000/items/
+```
+
+`q` рдХрд╛ default рд╣реЛрдЧрд╛: `["foo", "bar"]` рдФрд░ рдЖрдкрдХрд╛ response рд╣реЛрдЧрд╛:
+
+```JSON
+{
+ "q": [
+ "foo",
+ "bar"
+ ]
+}
+```
+
+#### рдХреЗрд╡рд▓ `list` use рдХрд░рдирд╛ { #using-just-list }
+
+рдЖрдк `list[str]` рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ `list` рднреА use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial013_an_py310.py hl[9] *}
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ case рдореЗрдВ, FastAPI list рдХреА contents check рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `list[int]` check (рдФрд░ document) рдХрд░реЗрдЧрд╛ рдХрд┐ list рдХреА contents integers рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ `list` рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
+
+///
+
+## рдЕрдзрд┐рдХ metadata declare рдХрд░реЗрдВ { #declare-more-metadata }
+
+рдЖрдк parameter рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА generated OpenAPI рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА рдФрд░ documentation user interfaces рдФрд░ external tools рджреНрд╡рд╛рд░рд╛ use рдХреА рдЬрд╛рдПрдЧреАред
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ tools рдореЗрдВ OpenAPI support рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ levels рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрднреА declare рдХреА рдЧрдИ рд╕рд╛рд░реА extra information рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдзрд┐рдХрддрд░ cases рдореЗрдВ, missing feature рдкрд╣рд▓реЗ рд╕реЗ рд╣реА development рдХреЗ рд▓рд┐рдП planned рд╣реИред
+
+///
+
+рдЖрдк рдПрдХ `title` рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial007_an_py310.py hl[10] *}
+
+рдФрд░ рдПрдХ `description`:
+
+{* ../../docs_src/query_params_str_validations/tutorial008_an_py310.py hl[14] *}
+
+## Alias parameters { #alias-parameters }
+
+рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк parameter рдХреЛ `item-query` рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдЬреИрд╕реЗ:
+
+```
+http://127.0.0.1:8000/items/?item-query=foobaritems
+```
+
+рд▓реЗрдХрд┐рди `item-query` valid Python variable name рдирд╣реАрдВ рд╣реИред
+
+рд╕рдмрд╕реЗ рдирд┐рдХрдЯрддрдо `item_query` рд╣реЛрдЧрд╛ред
+
+рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА рдпрд╣ exactly `item-query` рд╣реА рдЪрд╛рд╣рд┐рдП...
+
+рддрдм рдЖрдк рдПрдХ `alias` declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣реА alias parameter value рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП use рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
+
+{* ../../docs_src/query_params_str_validations/tutorial009_an_py310.py hl[9] *}
+
+## Parameters рдХреЛ deprecate рдХрд░рдирд╛ { #deprecating-parameters }
+
+рдЕрдм рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ parameter рдЕрдм рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред
+
+рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд╣реАрдВ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ clients рдЗрд╕реЗ use рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ docs рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ <dfn title="obsolete, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреА recommendation рд╣реИ">deprecated</dfn> рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдПрдБред
+
+рдлрд┐рд░ parameter `deprecated=True` рдХреЛ `Query` рдореЗрдВ pass рдХрд░реЗрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial010_an_py310.py hl[19] *}
+
+docs рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдПрдБрдЧреЗ:
+
+<img src="/img/tutorial/query-params-str-validations/image01.png">
+
+## OpenAPI рд╕реЗ parameters exclude рдХрд░реЗрдВ { #exclude-parameters-from-openapi }
+
+generated OpenAPI schema рд╕реЗ query parameter exclude рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░, automatic documentation systems рд╕реЗ), `Query` рдХреЗ parameter `include_in_schema` рдХреЛ `False` рдкрд░ set рдХрд░реЗрдВ:
+
+{* ../../docs_src/query_params_str_validations/tutorial014_an_py310.py hl[10] *}
+
+## Custom Validation { #custom-validation }
+
+рдРрд╕реЗ cases рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЛ рдХреБрдЫ **custom validation** рдХрд░рдирд╛ рдкрдбрд╝реЗ рдЬреЛ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП parameters рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред
+
+рдРрд╕реЗ cases рдореЗрдВ, рдЖрдк рдПрдХ **custom validator function** use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ normal validation рдХреЗ рдмрд╛рдж apply рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ value рдХреЗ `str` рд╣реЛрдиреЗ рдХреА validation рдХреЗ рдмрд╛рдж)ред
+
+рдЖрдк рдЗрд╕реЗ `Annotated` рдХреЗ рдЕрдВрджрд░ [Pydantic рдХреЗ `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// tip | рдЯрд┐рдк
+
+Pydantic рдореЗрдВ [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) рдФрд░ рдЕрдиреНрдп рднреА рд╣реИрдВред ЁЯдУ
+
+///
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ custom validator check рдХрд░рддрд╛ рд╣реИ рдХрд┐ item ID рдХрд┐рд╕реА <abbr title="International Standard Book Number - рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдорд╛рдирдХ рдкреБрд╕реНрддрдХ рд╕рдВрдЦреНрдпрд╛">ISBN</abbr> book number рдХреЗ рд▓рд┐рдП `isbn-` рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдпрд╛ рдХрд┐рд╕реА <abbr title="Internet Movie Database - рдЗрдВрдЯрд░рдиреЗрдЯ рдореВрд╡реА рдбреЗрдЯрд╛рдмреЗрд╕: рдлрд┐рд▓реНрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реА рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ">IMDB</abbr> movie URL ID рдХреЗ рд▓рд┐рдП `imdb-` рд╕реЗ:
+
+{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
+
+/// note | рдиреЛрдЯ
+
+рдпрд╣ Pydantic version 2 рдпрд╛ рдЙрд╕рд╕реЗ рдКрдкрд░ рдХреЗ рд╕рд╛рде available рд╣реИред ЁЯШО
+
+///
+
+/// tip | рдЯрд┐рдк
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА validation рдХрд░рдиреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА **external component** рд╕реЗ communicate рдХрд░рдирд╛ required рд╣реИ, рдЬреИрд╕реЗ database рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп API, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп **FastAPI Dependencies** use рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЖрдк рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рд╕реАрдЦреЗрдВрдЧреЗред
+
+рдпреЗ custom validators рдЙрди рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ request рдореЗрдВ provide рдХрд┐рдП рдЧрдП **рд╕рд┐рд░реНрдл** **рдЙрд╕реА data** рд╕реЗ check рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+
+///
+
+### рдЙрд╕ Code рдХреЛ рд╕рдордЭреЗрдВ { #understand-that-code }
+
+рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдмрд╕ **`Annotated` рдХреЗ рдЕрдВрджрд░ рдПрдХ function рдХреЗ рд╕рд╛рде `AfterValidator` use рдХрд░рдирд╛** рд╣реИред рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕ part рдХреЛ skip рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ЁЯд╕
+
+---
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕ specific code example рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ curious рд╣реИрдВ рдФрд░ рдЕрднреА рднреА entertained рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдБ рдХреБрдЫ extra details рд╣реИрдВред
+
+#### `value.startswith()` рдХреЗ рд╕рд╛рде String { #string-with-value-startswith }
+
+рдХреНрдпрд╛ рдЖрдкрдиреЗ рдзреНрдпрд╛рди рджрд┐рдпрд╛? `value.startswith()` use рдХрд░рдиреЗ рд╡рд╛рд▓реА string tuple рд▓реЗ рд╕рдХрддреА рд╣реИ, рдФрд░ рдпрд╣ tuple рдХреА рд╣рд░ value check рдХрд░реЗрдЧреА:
+
+{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py ln[16:19] hl[17] *}
+
+#### рдПрдХ Random Item { #a-random-item }
+
+`data.items()` рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ tuples рд╡рд╛рд▓рд╛ рдПрдХ <dfn title="рдРрд╕реА рдЪреАрдЬрд╝ рдЬрд┐рд╕ рдкрд░ рд╣рдо for loop рд╕реЗ iterate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ list, set, рдЖрджрд┐ред">iterable object</dfn> рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рд░ dictionary item рдХреЗ рд▓рд┐рдП key рдФрд░ value рд╣реЛрддреА рд╣реИред
+
+рд╣рдо рдЗрд╕ iterable object рдХреЛ `list(data.items())` рдХреЗ рд╕рд╛рде proper `list` рдореЗрдВ convert рдХрд░рддреЗ рд╣реИрдВред
+
+рдлрд┐рд░ `random.choice()` рдХреЗ рд╕рд╛рде рд╣рдо list рд╕реЗ рдПрдХ **random value** рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ `(id, name)` рд╡рд╛рд▓рд╛ tuple рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛ `("imdb-tt0371724", "The Hitchhiker's Guide to the Galaxy")`ред
+
+рдлрд┐рд░ рд╣рдо tuple рдХреА **рдЙрди рджреЛ values рдХреЛ assign** рдХрд░рддреЗ рд╣реИрдВ variables `id` рдФрд░ `name` рдХреЛред
+
+рддреЛ, рдЕрдЧрд░ user рдиреЗ item ID provide рдирд╣реАрдВ рдХреА, рддрдм рднреА рдЙрдиреНрд╣реЗрдВ рдПрдХ random suggestion receive рд╣реЛрдЧрд╛ред
+
+...рд╣рдо рдпрд╣ рд╕рдм **рдПрдХ single simple line** рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред ЁЯдп рдХреНрдпрд╛ рдЖрдкрдХреЛ Python рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ? ЁЯРН
+
+{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py ln[22:30] hl[29] *}
+
+## Recap { #recap }
+
+рдЖрдк рдЕрдкрдиреЗ parameters рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд validations рдФрд░ metadata declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+Generic validations рдФрд░ metadata:
+
+* `alias`
+* `title`
+* `description`
+* `deprecated`
+
+Strings рдХреЗ рд▓рд┐рдП specific validations:
+
+* `min_length`
+* `max_length`
+* `pattern`
+
+`AfterValidator` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ custom validationsред
+
+рдЗрди examples рдореЗрдВ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ `str` values рдХреЗ рд▓рд┐рдП validations рдХреИрд╕реЗ declare рдХрд░реЗрдВред
+
+рдЕрдЧрд▓реЗ chapters рджреЗрдЦреЗрдВ рддрд╛рдХрд┐ рдЖрдк рд╕реАрдЦ рд╕рдХреЗрдВ рдХрд┐ numbers рдЬреИрд╕реЗ рдЕрдиреНрдп types рдХреЗ рд▓рд┐рдП validations рдХреИрд╕реЗ declare рдХрд░реЗрдВред
--- /dev/null
+# Query Parameters { #query-parameters }
+
+рдЬрдм рдЖрдк рдРрд╕реЗ рджреВрд╕рд░реЗ function parameters declare рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ path parameters рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ-рдЖрдк "query" parameters рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+{* ../../docs_src/query_params/tutorial001_py310.py hl[9] *}
+
+query рдЙрди key-value pairs рдХрд╛ рд╕реЗрдЯ рд╣реИ рдЬреЛ URL рдореЗрдВ `?` рдХреЗ рдмрд╛рдж рдЖрддреЗ рд╣реИрдВ, рдФрд░ `&` characters рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ URL рдореЗрдВ:
+
+```
+http://127.0.0.1:8000/items/?skip=0&limit=10
+```
+
+...query parameters рд╣реИрдВ:
+
+* `skip`: `0` value рдХреЗ рд╕рд╛рде
+* `limit`: `10` value рдХреЗ рд╕рд╛рде
+
+рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ URL рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рд╡реЗ "рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ" strings рд╣реЛрддреЗ рд╣реИрдВред
+
+рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ Python types рдХреЗ рд╕рд╛рде declare рдХрд░рддреЗ рд╣реИрдВ (рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, `int` рдХреЗ рд░реВрдк рдореЗрдВ), рддреЛ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ type рдореЗрдВ convert рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ validate рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+path parameters рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╡рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ query parameters рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ:
+
+* Editor support (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ)
+* Data <dfn title="HTTP request рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА string рдХреЛ Python data рдореЗрдВ рдмрджрд▓рдирд╛">"parsing"</dfn>
+* Data validation
+* Automatic documentation
+
+## Defaults { #defaults }
+
+рдХреНрдпреЛрдВрдХрд┐ query parameters рдХрд┐рд╕реА path рдХрд╛ fixed рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддреЗ, рд╡реЗ optional рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ default values рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдирдХреЗ default values `skip=0` рдФрд░ `limit=10` рд╣реИрдВред
+
+рддреЛ, рдЗрд╕ URL рдкрд░ рдЬрд╛рдирд╛:
+
+```
+http://127.0.0.1:8000/items/
+```
+
+рдЗрд╕ рдкрд░ рдЬрд╛рдиреЗ рдЬреИрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛:
+
+```
+http://127.0.0.1:8000/items/?skip=0&limit=10
+```
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ:
+
+```
+http://127.0.0.1:8000/items/?skip=20
+```
+
+рддреЛ рдЖрдкрдХреЗ function рдореЗрдВ parameter values рд╣реЛрдВрдЧреА:
+
+* `skip=20`: рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ URL рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ
+* `limit=10`: рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ default value рдерд╛
+
+## Optional parameters { #optional-parameters }
+
+рдЙрд╕реА рддрд░рд╣, рдЖрдк optional query parameters declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХрд╛ default `None` рд╕реЗрдЯ рдХрд░рдХреЗ:
+
+{* ../../docs_src/query_params/tutorial002_py310.py hl[7] *}
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, function parameter `q` optional рд╣реЛрдЧрд╛, рдФрд░ default рд░реВрдк рд╕реЗ `None` рд╣реЛрдЧрд╛ред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **FastAPI** рдЗрддрдирд╛ smart рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рдЪрд╛рди рд▓реЗрддрд╛ рд╣реИ рдХрд┐ path parameter `item_id` рдПрдХ path parameter рд╣реИ рдФрд░ `q` рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдПрдХ query parameter рд╣реИред
+
+///
+
+## Query parameter type conversion { #query-parameter-type-conversion }
+
+рдЖрдк `bool` types рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ convert рд╣реЛ рдЬрд╛рдПрдБрдЧреЗ:
+
+{* ../../docs_src/query_params/tutorial003_py310.py hl[7] *}
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЧрд░ рдЖрдк рдЗрд╕ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ:
+
+```
+http://127.0.0.1:8000/items/foo?short=1
+```
+
+рдпрд╛
+
+```
+http://127.0.0.1:8000/items/foo?short=True
+```
+
+рдпрд╛
+
+```
+http://127.0.0.1:8000/items/foo?short=true
+```
+
+рдпрд╛
+
+```
+http://127.0.0.1:8000/items/foo?short=on
+```
+
+рдпрд╛
+
+```
+http://127.0.0.1:8000/items/foo?short=yes
+```
+
+рдпрд╛ рдХреЛрдИ рднреА рджреВрд╕рд░реА case variation (uppercase, рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рдХреЛ uppercase, рдЖрджрд┐), рдЖрдкрдХрд╛ function parameter `short` рдХреЛ `True` рдХреЗ `bool` value рдХреЗ рд╕рд╛рде рджреЗрдЦреЗрдЧрд╛ред рдЕрдиреНрдпрдерд╛ `False` рдХреЗ рд░реВрдк рдореЗрдВред
+
+
+## рдХрдИ path рдФрд░ query parameters { #multiple-path-and-query-parameters }
+
+рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ path parameters рдФрд░ query parameters declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, **FastAPI** рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдХреМрди рд╣реИред
+
+рдФрд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ order рдореЗрдВ declare рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
+
+рдЙрдиреНрд╣реЗрдВ рдирд╛рдо рд╕реЗ detect рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
+
+{* ../../docs_src/query_params/tutorial004_py310.py hl[6,8] *}
+
+## Required query parameters { #required-query-parameters }
+
+рдЬрдм рдЖрдк non-path parameters рдХреЗ рд▓рд┐рдП default value declare рдХрд░рддреЗ рд╣реИрдВ (рдЕрднреА рддрдХ, рд╣рдордиреЗ рдХреЗрд╡рд▓ query parameters рджреЗрдЦреЗ рд╣реИрдВ), рддреЛ рд╡рд╣ required рдирд╣реАрдВ рд╣реЛрддрд╛ред
+
+рдЕрдЧрд░ рдЖрдк рдХреЛрдИ specific value рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд▓реЗрдХрд┐рди рдмрд╕ рдЙрд╕реЗ optional рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ default рдХреЛ `None` рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
+
+рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХрд┐рд╕реА query parameter рдХреЛ required рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╕ рдХреЛрдИ default value declare рди рдХрд░реЗрдВ:
+
+{* ../../docs_src/query_params/tutorial005_py310.py hl[6:7] *}
+
+рдпрд╣рд╛рдБ query parameter `needy` type `str` рдХрд╛ рдПрдХ required query parameter рд╣реИред
+
+рдЕрдЧрд░ рдЖрдк рдЕрдкрдиреЗ browser рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ URL рдЦреЛрд▓рддреЗ рд╣реИрдВ:
+
+```
+http://127.0.0.1:8000/items/foo-item
+```
+
+...required parameter `needy` рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА error рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
+
+```JSON
+{
+ "detail": [
+ {
+ "type": "missing",
+ "loc": [
+ "query",
+ "needy"
+ ],
+ "msg": "Field required",
+ "input": null
+ }
+ ]
+}
+```
+
+рдХреНрдпреЛрдВрдХрд┐ `needy` рдПрдХ required parameter рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ URL рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
+
+```
+http://127.0.0.1:8000/items/foo-item?needy=sooooneedy
+```
+
+...рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
+
+```JSON
+{
+ "item_id": "foo-item",
+ "needy": "sooooneedy"
+}
+```
+
+рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдХреБрдЫ parameters рдХреЛ required, рдХреБрдЫ рдХреЛ default value рд╡рд╛рд▓рд╛, рдФрд░ рдХреБрдЫ рдХреЛ рдкреВрд░реА рддрд░рд╣ optional define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/query_params/tutorial006_py310.py hl[8] *}
+
+рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 3 query parameters рд╣реИрдВ:
+
+* `needy`, рдПрдХ required `str`.
+* `skip`, default value `0` рдХреЗ рд╕рд╛рде рдПрдХ `int`.
+* `limit`, рдПрдХ optional `int`.
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЖрдк `Enum`s рдХреЛ рднреА рдЙрд╕реА рддрд░рд╣ use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ [Path Parameters](path-params.md#predefined-values) рдХреЗ рд╕рд╛рдеред
+
+///
--- /dev/null
+# Request Files { #request-files }
+
+рдЖрдк client рджреНрд╡рд╛рд░рд╛ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА files рдХреЛ `File` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ files рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ [`python-multipart`](https://github.com/Kludex/python-multipart) install рдХрд░реЗрдВред
+
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ [virtual environment](../virtual-environments.md) рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ activate рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ install рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```console
+$ pip install python-multipart
+```
+
+рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ files "form data" рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИрдВред
+
+///
+
+## `File` Import рдХрд░реЗрдВ { #import-file }
+
+`fastapi` рд╕реЗ `File` рдФрд░ `UploadFile` import рдХрд░реЗрдВ:
+
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[3] *}
+
+## `File` Parameters рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ { #define-file-parameters }
+
+file parameters рдЙрд╕реА рддрд░рд╣ рдмрдирд╛рдПрдВ рдЬреИрд╕реЗ рдЖрдк `Body` рдпрд╛ `Form` рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *}
+
+/// note | рдиреЛрдЯ
+
+`File` рдПрдХ class рд╣реИ рдЬреЛ рд╕реАрдзреЗ `Form` рд╕реЗ inherit рдХрд░рддреА рд╣реИред
+
+рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЬрдм рдЖрдк `fastapi` рд╕реЗ `Query`, `Path`, `File` рдФрд░ рдЕрдиреНрдп import рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ functions рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ classes return рдХрд░рддреЗ рд╣реИрдВред
+
+///
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+File bodies рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ `File` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ parameters рдХреЛ query parameters рдпрд╛ body (JSON) parameters рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+///
+
+files "form data" рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рдПрдВрдЧреАред
+
+рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ *path operation function* parameter рдХрд╛ type `bytes` рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ **FastAPI** рдЖрдкрдХреЗ рд▓рд┐рдП file рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рд╕рд╛рдордЧреНрд░реА `bytes` рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред
+
+рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреВрд░реА рд╕рд╛рдордЧреНрд░реА memory рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдЧреАред рдпрд╣ рдЫреЛрдЯреА files рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
+
+рд▓реЗрдХрд┐рди рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ `UploadFile` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд▓рд╛рдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+## `UploadFile` рдХреЗ рд╕рд╛рде File Parameters { #file-parameters-with-uploadfile }
+
+`UploadFile` type рдХреЗ рд╕рд╛рде file parameter рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
+
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[14] *}
+
+`bytes` рдХреА рддреБрд▓рдирд╛ рдореЗрдВ `UploadFile` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ:
+
+* рдЖрдкрдХреЛ parameter рдХреЗ default value рдореЗрдВ `File()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ред
+* рдпрд╣ рдПрдХ "spooled" file рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
+ * рдПрдХ file рдЬреЛ рдЕрдзрд┐рдХрддрдо size limit рддрдХ memory рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕ limit рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж disk рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред
+* рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ images, videos, рдмрдбрд╝реЗ binaries рдЖрджрд┐ рдЬреИрд╕реА рдмрдбрд╝реА files рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реА memory рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
+* рдЖрдк рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ file рд╕реЗ metadata рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+* рдЗрд╕рдореЗрдВ [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) `async` interface рд╣реИред
+* рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Python [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) object expose рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕реАрдзреЗ рдЕрдиреНрдп libraries рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ file-like object рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИрдВред
+
+### `UploadFile` { #uploadfile }
+
+`UploadFile` рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд attributes рд╣реЛрддреЗ рд╣реИрдВ:
+
+* `filename`: рдореВрд▓ file name рдХреЗ рд╕рд╛рде рдПрдХ `str` рдЬреЛ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬреИрд╕реЗ `myimage.jpg`)ред
+* `content_type`: content type (MIME type / media type) рдХреЗ рд╕рд╛рде рдПрдХ `str` (рдЬреИрд╕реЗ `image/jpeg`)ред
+* `file`: рдПрдХ [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) (рдПрдХ [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) object)ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Python file object рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕реАрдзреЗ рдЕрдиреНрдп functions рдпрд╛ libraries рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ "file-like" object рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИрдВред
+
+`UploadFile` рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд `async` methods рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рд╕рднреА рдЕрдВрджрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд file methods рдХреЛ call рдХрд░рддреЗ рд╣реИрдВ (internal `SpooledTemporaryFile` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
+
+* `write(data)`: `data` (`str` рдпрд╛ `bytes`) рдХреЛ file рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред
+* `read(size)`: file рдХреЗ `size` (`int`) bytes/characters рдкрдврд╝рддрд╛ рд╣реИред
+* `seek(offset)`: file рдореЗрдВ byte position `offset` (`int`) рдкрд░ рдЬрд╛рддрд╛ рд╣реИред
+ * рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `await myfile.seek(0)` file рдХреА рд╢реБрд░реБрдЖрдд рдкрд░ рдЬрд╛рдПрдЧрд╛ред
+ * рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдмрд╛рд░ `await myfile.read()` рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЛрдмрд╛рд░рд╛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
+* `close()`: file рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИред
+
+рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╕рднреА methods `async` methods рд╣реИрдВ, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ "await" рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ `async` *path operation function* рдХреЗ рдЕрдВрджрд░ рдЖрдк рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+```Python
+contents = await myfile.read()
+```
+
+рдпрджрд┐ рдЖрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдп `def` *path operation function* рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реАрдзреЗ `UploadFile.file` access рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```Python
+contents = myfile.file.read()
+```
+
+/// note | `async` рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЬрдм рдЖрдк `async` methods рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ **FastAPI** file methods рдХреЛ threadpool рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП await рдХрд░рддрд╛ рд╣реИред
+
+///
+
+/// note | Starlette рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+**FastAPI** рдХрд╛ `UploadFile` рд╕реАрдзреЗ **Starlette** рдХреЗ `UploadFile` рд╕реЗ inherit рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди **Pydantic** рдФрд░ FastAPI рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ compatible рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рд╣рд┐рд╕реНрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
+
+///
+
+## "Form Data" рдХреНрдпрд╛ рд╣реИ { #what-is-form-data }
+
+HTML forms (`<form></form>`) рд╕рд╛рдорд╛рдиреНрдпрддрдГ data рдХреЛ server рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ data рдХреЗ рд▓рд┐рдП рдПрдХ "special" encoding рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ JSON рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред
+
+**FastAPI** рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрд╕ data рдХреЛ JSON рдХреЗ рдмрдЬрд╛рдп рд╕рд╣реА рдЬрдЧрд╣ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдПред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+forms рд╕реЗ data рд╕рд╛рдорд╛рдиреНрдпрддрдГ "media type" `application/x-www-form-urlencoded` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ encoded рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдореЗрдВ files рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреАрдВред
+
+рд▓реЗрдХрд┐рди рдЬрдм form рдореЗрдВ files рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдпрд╣ `multipart/form-data` рдХреЗ рд░реВрдк рдореЗрдВ encoded рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк `File` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ **FastAPI** рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЙрд╕реЗ body рдХреЗ рд╕рд╣реА рднрд╛рдЧ рд╕реЗ files рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реИрдВред
+
+рдпрджрд┐ рдЖрдк рдЗрди encodings рдФрд░ form fields рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ [`POST` рдХреЗ рд▓рд┐рдП <abbr title="Mozilla Developer Network - рдореЛрдЬрд╝рд┐рд▓рд╛ рдбреЗрд╡рд▓рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ">MDN</abbr> web docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) рдкрд░ рдЬрд╛рдПрдВред
+
+///
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+рдЖрдк рдПрдХ *path operation* рдореЗрдВ рдХрдИ `File` рдФрд░ `Form` parameters рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдРрд╕реЗ `Body` fields рднреА рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ request рдореЗрдВ body `application/json` рдХреЗ рдмрдЬрд╛рдп `multipart/form-data` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ encoded рд╣реЛрдЧреАред
+
+рдпрд╣ **FastAPI** рдХреА limitation рдирд╣реАрдВ рд╣реИ, рдпрд╣ HTTP protocol рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
+
+///
+
+## Optional File Upload { #optional-file-upload }
+
+рдЖрдк standard type annotations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ default value `None` set рдХрд░рдХреЗ file рдХреЛ optional рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/request_files/tutorial001_02_an_py310.py hl[9,17] *}
+
+## рдЕрддрд┐рд░рд┐рдХреНрдд Metadata рдХреЗ рд╕рд╛рде `UploadFile` { #uploadfile-with-additional-metadata }
+
+рдЖрдк `UploadFile` рдХреЗ рд╕рд╛рде `File()` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд metadata set рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
+
+{* ../../docs_src/request_files/tutorial001_03_an_py310.py hl[9,15] *}
+
+## Multiple File Uploads { #multiple-file-uploads }
+
+рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ files рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
+
+рд╡реЗ "form data" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬреЗ рдЧрдП рдЙрд╕реА "form field" рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВрдЧреАред
+
+рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `bytes` рдпрд╛ `UploadFile` рдХреА list рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
+
+{* ../../docs_src/request_files/tutorial002_an_py310.py hl[10,15] *}
+
+рдЖрдкрдХреЛ, рдЬреИрд╕рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, `bytes` рдпрд╛ `UploadFile`s рдХреА рдПрдХ `list` рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЖрдк `from starlette.responses import HTMLResponse` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, developer рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╣реА `starlette.responses` рдХреЛ `fastapi.responses` рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдкрд▓рдмреНрдз рдЕрдзрд┐рдХрд╛рдВрд╢ responses рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддреЗ рд╣реИрдВред
+
+///
+
+### рдЕрддрд┐рд░рд┐рдХреНрдд Metadata рдХреЗ рд╕рд╛рде Multiple File Uploads { #multiple-file-uploads-with-additional-metadata }
+
+рдФрд░ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд parameters set рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `File()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ рдХрд┐ `UploadFile` рдХреЗ рд▓рд┐рдП рднреА:
+
+{* ../../docs_src/request_files/tutorial003_an_py310.py hl[11,18:20] *}
+
+## Recap { #recap }
+
+request рдореЗрдВ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА files рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `File`, `bytes`, рдФрд░ `UploadFile` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ form data рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
--- /dev/null
+# Form Models { #form-models }
+
+рдЖрдк FastAPI рдореЗрдВ **form fields** declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **Pydantic models** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+forms рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ [`python-multipart`](https://github.com/Kludex/python-multipart) install рдХрд░реЗрдВред
+
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ [virtual environment](../virtual-environments.md) рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ activate рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ install рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```console
+$ pip install python-multipart
+```
+
+///
+
+/// note | рдиреЛрдЯ
+
+рдпрд╣ FastAPI version `0.113.0` рд╕реЗ supported рд╣реИред ЁЯдУ
+
+///
+
+## Forms рдХреЗ рд▓рд┐рдП Pydantic Models { #pydantic-models-for-forms }
+
+рдЖрдкрдХреЛ рдмрд╕ рдЙрди fields рдХреЗ рд╕рд╛рде рдПрдХ **Pydantic model** declare рдХрд░рдирд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк **form fields** рдХреЗ рд░реВрдк рдореЗрдВ receive рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ parameter рдХреЛ `Form` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░рдирд╛ рд╣реИ:
+
+{* ../../docs_src/request_form_models/tutorial001_an_py310.py hl[9:11,15] *}
+
+**FastAPI** request рдореЗрдВ рдореМрдЬреВрдж **form data** рд╕реЗ **рд╣рд░ field** рдХреЗ рд▓рд┐рдП data **extract** рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рд╡рд╣ Pydantic model рджреЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ define рдХрд┐рдпрд╛ рд╣реИред
+
+## Docs рдЬрд╛рдБрдЪреЗрдВ { #check-the-docs }
+
+рдЖрдк рдЗрд╕реЗ `/docs` рдкрд░ docs UI рдореЗрдВ verify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<div class="screenshot">
+<img src="/img/tutorial/request-form-models/image01.png">
+</div>
+
+## Extra Form Fields рдХреЛ рдордирд╛ рдХрд░реЗрдВ { #forbid-extra-form-fields }
+
+рдХреБрдЫ рдЦрд╛рд╕ use cases рдореЗрдВ (рд╢рд╛рдпрдж рдмрд╣реБрдд рдЖрдо рдирд╣реАрдВ), рдЖрдк form fields рдХреЛ рдХреЗрд╡рд▓ рдЙрди рддрдХ **restrict** рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Pydantic model рдореЗрдВ declare рдХрд┐рдП рдЧрдП рд╣реИрдВред рдФрд░ рдХрд┐рд╕реА рднреА **extra** fields рдХреЛ **forbid** рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+рдпрд╣ FastAPI version `0.114.0` рд╕реЗ supported рд╣реИред ЁЯдУ
+
+///
+
+рдЖрдк рдХрд┐рд╕реА рднреА `extra` fields рдХреЛ `forbid` рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Pydantic рдХреА model configuration рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/request_form_models/tutorial002_an_py310.py hl[12] *}
+
+рдЕрдЧрд░ рдХреЛрдИ client рдХреБрдЫ extra data рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ **error** response рдорд┐рд▓реЗрдЧрд╛ред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ client рдпреЗ form fields рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ:
+
+* `username`: `Rick`
+* `password`: `Portal Gun`
+* `extra`: `Mr. Poopybutthole`
+
+рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ error response рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ field `extra` allowed рдирд╣реАрдВ рд╣реИ:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["body", "extra"],
+ "msg": "Extra inputs are not permitted",
+ "input": "Mr. Poopybutthole"
+ }
+ ]
+}
+```
+
+## рд╕рд╛рд░рд╛рдВрд╢ { #summary }
+
+рдЖрдк FastAPI рдореЗрдВ form fields declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Pydantic models рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ЁЯШО
--- /dev/null
+# Request Forms рдФрд░ Files { #request-forms-and-files }
+
+рдЖрдк `File` рдФрд░ `Form` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ files рдФрд░ form fields рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ files рдФрд░/рдпрд╛ form data рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ [`python-multipart`](https://github.com/Kludex/python-multipart) install рдХрд░реЗрдВред
+
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ [virtual environment](../virtual-environments.md) рдмрдирд╛рдПрдБ, рдЙрд╕реЗ activate рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ install рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```console
+$ pip install python-multipart
+```
+
+///
+
+## `File` рдФрд░ `Form` Import рдХрд░реЗрдВ { #import-file-and-form }
+
+{* ../../docs_src/request_forms_and_files/tutorial001_an_py310.py hl[3] *}
+
+## `File` рдФрд░ `Form` parameters define рдХрд░реЗрдВ { #define-file-and-form-parameters }
+
+file рдФрд░ form parameters рдЙрд╕реА рддрд░рд╣ рдмрдирд╛рдПрдБ рдЬреИрд╕реЗ рдЖрдк `Body` рдпрд╛ `Query` рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/request_forms_and_files/tutorial001_an_py310.py hl[10:12] *}
+
+files рдФрд░ form fields, form data рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЬрд╛рдПрдБрдЧреЗ рдФрд░ рдЖрдкрдХреЛ files рдФрд░ form fields рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред
+
+рдФрд░ рдЖрдк рдХреБрдЫ files рдХреЛ `bytes` рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдХреБрдЫ рдХреЛ `UploadFile` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+рдЖрдк рдПрдХ *path operation* рдореЗрдВ рдХрдИ `File` рдФрд░ `Form` parameters declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╛рде рд╣реА рдРрд╕реЗ `Body` fields declare рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ request рдореЗрдВ body `application/json` рдХреЗ рдмрдЬрд╛рдп `multipart/form-data` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ encoded рд╣реЛрдЧреАред
+
+рдпрд╣ **FastAPI** рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ HTTP protocol рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
+
+///
+
+## Recap { #recap }
+
+рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд╣реА request рдореЗрдВ data рдФрд░ files рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рддреЛ `File` рдФрд░ `Form` рдХреЛ рд╕рд╛рде рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
--- /dev/null
+# Form Data { #form-data }
+
+рдЬрдм рдЖрдкрдХреЛ JSON рдХреЗ рдмрдЬрд╛рдп form fields рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╣реЛрдВ, рддреЛ рдЖрдк `Form` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+forms рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ [`python-multipart`](https://github.com/Kludex/python-multipart) install рдХрд░реЗрдВред
+
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ [virtual environment](../virtual-environments.md) рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ activate рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ install рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```console
+$ pip install python-multipart
+```
+
+///
+
+## `Form` Import рдХрд░реЗрдВ { #import-form }
+
+`fastapi` рд╕реЗ `Form` import рдХрд░реЗрдВ:
+
+{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[3] *}
+
+## `Form` parameters рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ { #define-form-parameters }
+
+form parameters рдЙрд╕реА рддрд░рд╣ рдмрдирд╛рдПрдВ рдЬреИрд╕реЗ рдЖрдк `Body` рдпрд╛ `Query` рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреЗ:
+
+{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[9] *}
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, OAuth2 specification рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд┐рди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ (рдЬрд┐рд╕реЗ "password flow" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) `username` рдФрд░ `password` рдХреЛ form fields рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдирд╛ required рд╣реИред
+
+<dfn title="specification">spec</dfn> рдХреЗ рдЕрдиреБрд╕рд╛рд░ fields рдХреЗ рдирд╛рдо рдмрд┐рд▓реНрдХреБрд▓ `username` рдФрд░ `password` рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрдиреНрд╣реЗрдВ JSON рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ form fields рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+`Form` рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд╣реА configurations declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ `Body` (рдФрд░ `Query`, `Path`, `Cookie`) рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ validation, examples, alias (рдЬреИрд╕реЗ `username` рдХреЗ рдмрдЬрд╛рдп `user-name`), рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+`Form` рдПрдХ class рд╣реИ рдЬреЛ рд╕реАрдзреЗ `Body` рд╕реЗ inherit рдХрд░рддреА рд╣реИред
+
+///
+
+/// tip | рдЯрд┐рдк
+
+form bodies declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ `Form` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ parameters рдХреЛ query parameters рдпрд╛ body (JSON) parameters рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+///
+
+## "Form Fields" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ { #about-form-fields }
+
+HTML forms (`<form></form>`) рдЖрдорддреМрд░ рдкрд░ data рдХреЛ server рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ data рдХреЗ рд▓рд┐рдП рдПрдХ "special" encoding рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ JSON рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред
+
+**FastAPI** рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрд╕ data рдХреЛ JSON рдХреЗ рдмрдЬрд╛рдп рд╕рд╣реА рдЬрдЧрд╣ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдПред
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+forms рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ data рдЖрдорддреМрд░ рдкрд░ "media type" `application/x-www-form-urlencoded` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ encoded рд╣реЛрддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЬрдм form рдореЗрдВ files рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдЗрд╕реЗ `multipart/form-data` рдХреЗ рд░реВрдк рдореЗрдВ encoded рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред files рдХреЛ handle рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдЕрдЧрд▓реЗ chapter рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗред
+
+рдЕрдЧрд░ рдЖрдк рдЗрди encodings рдФрд░ form fields рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ [`POST` рдХреЗ рд▓рд┐рдП <abbr title="Mozilla Developer Network - рдореЛрдЬрд╝рд┐рд▓рд╛ рдбреЗрд╡рд▓рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ">MDN</abbr> web docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) рджреЗрдЦреЗрдВред
+
+///
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+рдЖрдк рдПрдХ *path operation* рдореЗрдВ рдХрдИ `Form` parameters declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╛рде рдореЗрдВ рдРрд╕реЗ `Body` fields declare рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ request рдореЗрдВ body `application/json` рдХреЗ рдмрдЬрд╛рдп `application/x-www-form-urlencoded` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ encoded рд╣реЛрдЧреАред
+
+рдпрд╣ **FastAPI** рдХреА limitation рдирд╣реАрдВ рд╣реИ, рдпрд╣ HTTP protocol рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
+
+///
+
+## Recap { #recap }
+
+form data input parameters declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `Form` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
--- /dev/null
+# Response Model - Return Type { #response-model-return-type }
+
+рдЖрдк response рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ type рдХреЛ *path operation function* рдХреЗ **return type** рдХреЛ annotate рдХрд░рдХреЗ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк **type annotations** рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк function **parameters** рдореЗрдВ input data рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк Pydantic models, lists, dictionaries, scalar values рдЬреИрд╕реЗ integers, booleans, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
+
+FastAPI рдЗрд╕ return type рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛:
+
+* рд▓реМрдЯрд╛рдП рдЧрдП data рдХреЛ **Validate** рдХрд░рдирд╛ред
+ * рдЕрдЧрд░ data invalid рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдИ field missing рд╣реИ), рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ *рдЖрдкрдХреЗ* app code рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рд╣реИ, рд╡рд╣ рд╡рд╣ data return рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдЬреЛ рдЙрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ incorrect data return рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп server error return рдХрд░реЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдЖрдк рдФрд░ рдЖрдкрдХреЗ clients рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ expected data рдФрд░ data shape рдорд┐рд▓реЗрдЧрд╛ред
+* OpenAPI *path operation* рдореЗрдВ response рдХреЗ рд▓рд┐рдП рдПрдХ **JSON Schema** рдЬреЛрдбрд╝рдирд╛ред
+ * рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ **automatic docs** рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+ * рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ automatic client code generation tools рджреНрд╡рд╛рд░рд╛ рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+* Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реМрдЯрд╛рдП рдЧрдП data рдХреЛ JSON рдореЗрдВ **Serialize** рдХрд░рдирд╛, рдЬреЛ **Rust** рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ **рдмрд╣реБрдд рддреЗрдЬрд╝** рд╣реЛрдЧрд╛ред
+
+рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг:
+
+* рдпрд╣ output data рдХреЛ return type рдореЗрдВ defined data рддрдХ **limit рдФрд░ filter** рдХрд░реЗрдЧрд╛ред
+ * рдпрд╣ **security** рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рдо рдиреАрдЪреЗ рдЗрд╕рдХрд╛ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦреЗрдВрдЧреЗред
+
+## `response_model` Parameter { #response-model-parameter }
+
+рдХреБрдЫ cases рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЛ рдРрд╕рд╛ data return рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ type рджреНрд╡рд╛рд░рд╛ declare рдХрд┐рдП рдЧрдП data рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк **dictionary return** рдХрд░рдирд╛ рдпрд╛ database object return рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди **рдЙрд╕реЗ Pydantic model рдХреЗ рд░реВрдк рдореЗрдВ declare** рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ Pydantic model рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП object (рдЬреИрд╕реЗ dictionary рдпрд╛ database object) рдХреЗ рд▓рд┐рдП рд╕рднреА data documentation, validation, рдЖрджрд┐ рдХрд░реЗрдЧрд╛ред
+
+рдЕрдЧрд░ рдЖрдкрдиреЗ return type annotation рдЬреЛрдбрд╝рд╛, рддреЛ tools рдФрд░ editors рдПрдХ (рд╕рд╣реА) error рдХреЗ рд╕рд╛рде рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХрд╛ function рдРрд╕рд╛ type (рдЬреИрд╕реЗ dict) return рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ declare рдХрд┐рдП рдЧрдП type (рдЬреИрд╕реЗ Pydantic model) рд╕реЗ рдЕрд▓рдЧ рд╣реИред
+
+рдРрд╕реЗ cases рдореЗрдВ, рдЖрдк return type рдХреЗ рдмрдЬрд╛рдп *path operation decorator* parameter `response_model` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк рдХрд┐рд╕реА рднреА *path operations* рдореЗрдВ `response_model` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* `@app.get()`
+* `@app.post()`
+* `@app.put()`
+* `@app.delete()`
+* рдЖрджрд┐ред
+
+{* ../../docs_src/response_model/tutorial001_py310.py hl[17,22,24:27] *}
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ `response_model` "decorator" method (`get`, `post`, рдЖрджрд┐) рдХрд╛ parameter рд╣реИред рдпрд╣ рдЖрдкрдХреЗ *path operation function* рдХрд╛ parameter рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рд╕рднреА parameters рдФрд░ body рд╣реЛрддреЗ рд╣реИрдВред
+
+///
+
+`response_model` рд╡рд╣реА type receive рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк Pydantic model field рдХреЗ рд▓рд┐рдП declare рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ Pydantic model рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣, рдЬреИрд╕реЗ рдХрд┐ `List[Item]` рдХреА рддрд░рд╣ Pydantic models рдХреА `list` рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+FastAPI рдЗрд╕ `response_model` рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА data documentation, validation, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ рдФрд░ output data рдХреЛ рдЗрд╕рдХреЗ type declaration рдореЗрдВ **convert рдФрд░ filter** рднреА рдХрд░реЗрдЧрд╛ред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ editor, mypy, рдЖрджрд┐ рдореЗрдВ strict type checks рд╣реИрдВ, рддреЛ рдЖрдк function return type рдХреЛ `Any` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕ рддрд░рд╣ рдЖрдк editor рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреБрдЫ рднреА return рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди FastAPI рдлрд┐рд░ рднреА `response_model` рдХреЗ рд╕рд╛рде data documentation, validation, filtering, рдЖрджрд┐ рдХрд░реЗрдЧрд╛ред
+
+///
+
+### `response_model` Priority { #response-model-priority }
+
+рдЕрдЧрд░ рдЖрдк return type рдФрд░ `response_model` рджреЛрдиреЛрдВ declare рдХрд░рддреЗ рд╣реИрдВ, рддреЛ `response_model` рдХреЛ priority рдорд┐рд▓реЗрдЧреА рдФрд░ FastAPI рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрдкрдиреЗ functions рдореЗрдВ рд╕рд╣реА type annotations рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЖрдк response model рд╕реЗ рдЕрд▓рдЧ type return рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддрд╛рдХрд┐ editor рдФрд░ mypy рдЬреИрд╕реЗ tools рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред рдФрд░ рдлрд┐рд░ рднреА FastAPI `response_model` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ data validation, documentation, рдЖрджрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+
+рдЖрдк рдЙрд╕ *path operation* рдХреЗ рд▓рд┐рдП response model рдмрдирд╛рдирд╛ disable рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `response_model=None` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдРрд╕рд╛ рддрдм рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЙрди рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП type annotations рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реЛрдВ рдЬреЛ valid Pydantic fields рдирд╣реАрдВ рд╣реИрдВ, рдЖрдк рдиреАрдЪреЗ рдХреЗ sections рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗред
+
+## рд╡рд╣реА input data return рдХрд░реЗрдВ { #return-the-same-input-data }
+
+рдпрд╣рд╛рдБ рд╣рдо рдПрдХ `UserIn` model declare рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ plaintext password рд╣реЛрдЧрд╛:
+
+{* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}
+
+/// note | рдиреЛрдЯ
+
+`EmailStr` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ [`email-validator`](https://github.com/JoshData/python-email-validator) install рдХрд░реЗрдВред
+
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ [virtual environment](../virtual-environments.md) рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ activate рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ install рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```console
+$ pip install email-validator
+```
+
+рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде:
+
+```console
+$ pip install "pydantic[email]"
+```
+
+///
+
+рдФрд░ рд╣рдо рдЗрд╕ model рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ input рдХреЛ declare рдХрд░рдиреЗ рдФрд░ рдЙрд╕реА model рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ output рдХреЛ declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
+
+{* ../../docs_src/response_model/tutorial002_py310.py hl[16] *}
+
+рдЕрдм, рдЬрдм рднреА рдХреЛрдИ browser password рдХреЗ рд╕рд╛рде user рдмрдирд╛ рд░рд╣рд╛ рд╣реЛрдЧрд╛, API response рдореЗрдВ рд╡рд╣реА password return рдХрд░реЗрдЧреАред
+
+рдЗрд╕ case рдореЗрдВ, рдпрд╣ problem рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА, рдХреНрдпреЛрдВрдХрд┐ password рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд╣реА user рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЙрд╕реА model рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдФрд░ *path operation* рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдкрдиреЗ user рдХреЗ passwords рд╣рд░ client рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// danger | рдЦрддрд░рд╛
+
+рдХрднреА рднреА рдХрд┐рд╕реА user рдХрд╛ plain password store рди рдХрд░реЗрдВ рдпрд╛ рдЙрд╕реЗ рдЗрд╕ рддрд░рд╣ response рдореЗрдВ рди рднреЗрдЬреЗрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕рднреА caveats рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
+
+///
+
+## Output model рдЬреЛрдбрд╝реЗрдВ { #add-an-output-model }
+
+рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо plaintext password рдХреЗ рд╕рд╛рде рдПрдХ input model рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдПрдХ output model рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/response_model/tutorial003_py310.py hl[9,11,16] *}
+
+рдпрд╣рд╛рдБ, рднрд▓реЗ рд╣реА рд╣рдорд╛рд░рд╛ *path operation function* рд╡рд╣реА input user return рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ password рд╢рд╛рдорд┐рд▓ рд╣реИ:
+
+{* ../../docs_src/response_model/tutorial003_py310.py hl[24] *}
+
+...рд╣рдордиреЗ `response_model` рдХреЛ рдЕрдкрдирд╛ model `UserOut` declare рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ password рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ:
+
+{* ../../docs_src/response_model/tutorial003_py310.py hl[22] *}
+
+рдЗрд╕рд▓рд┐рдП, **FastAPI** output model рдореЗрдВ declare рди рдХрд┐рдП рдЧрдП рд╕рднреА data рдХреЛ filter out рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ (Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
+
+### `response_model` рдпрд╛ Return Type { #response-model-or-return-type }
+
+рдЗрд╕ case рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ models рдЕрд▓рдЧ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдордиреЗ function return type рдХреЛ `UserOut` рдХреЗ рд░реВрдк рдореЗрдВ annotate рдХрд┐рдпрд╛, рддреЛ editor рдФрд░ tools рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдо invalid type return рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд▓рдЧ classes рд╣реИрдВред
+
+рдЗрд╕реАрд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕реЗ `response_model` parameter рдореЗрдВ declare рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
+
+...рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреИрд╕реЗ overcome рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред
+
+## Return Type рдФрд░ Data Filtering { #return-type-and-data-filtering }
+
+рдЖрдЗрдП рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рд╣рдо **function рдХреЛ рдПрдХ type рдХреЗ рд╕рд╛рде annotate** рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд╣рдо function рд╕реЗ рдРрд╕рд╛ рдХреБрдЫ return рдХрд░ рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ **рдЕрдзрд┐рдХ data** рд╢рд╛рдорд┐рд▓ рд╣реЛред
+
+рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ FastAPI response model рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ data рдХреЛ **filter** рдХрд░рддрд╛ рд░рд╣реЗред рддрд╛рдХрд┐ рднрд▓реЗ рд╣реА function рдЕрдзрд┐рдХ data return рдХрд░реЗ, response рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╣реА fields рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдЬреЛ response model рдореЗрдВ declare рдХрд┐рдП рдЧрдП рд╣реИрдВред
+
+рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ classes рдЕрд▓рдЧ рдереАрдВ, рд╣рдореЗрдВ `response_model` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ function return type check рдХрд░рдиреЗ рд╡рд╛рд▓реЗ editor рдФрд░ tools рд╕реЗ support рдирд╣реАрдВ рдорд┐рд▓рддрд╛ред
+
+рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрддрд░ cases рдореЗрдВ рдЬрд╣рд╛рдБ рд╣рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ model рдмрд╕ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рдХреБрдЫ data рдХреЛ **filter/remove** рдХрд░реЗред
+
+рдФрд░ рдЙрди cases рдореЗрдВ, рд╣рдо classes рдФрд░ inheritance рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ function **type annotations** рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ editor рдФрд░ tools рдореЗрдВ рдмреЗрд╣рддрд░ support рдорд┐рд▓реЗ, рдФрд░ рдлрд┐рд░ рднреА FastAPI **data filtering** рдорд┐рд▓ рд╕рдХреЗред
+
+{* ../../docs_src/response_model/tutorial003_01_py310.py hl[7:10,13:14,18] *}
+
+рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ editors рдФрд░ mypy рд╕реЗ tooling support рдорд┐рд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ code types рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ FastAPI рд╕реЗ data filtering рднреА рдорд┐рд▓рддреА рд╣реИред
+
+рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЖрдЗрдП рдЗрд╕реЗ рджреЗрдЦреЗрдВред ЁЯдУ
+
+### Type Annotations рдФрд░ Tooling { #type-annotations-and-tooling }
+
+рдкрд╣рд▓реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ editors, mypy рдФрд░ рдЕрдиреНрдп tools рдЗрд╕реЗ рдХреИрд╕реЗ рджреЗрдЦреЗрдВрдЧреЗред
+
+`BaseUser` рдореЗрдВ base fields рд╣реИрдВред рдлрд┐рд░ `UserIn`, `BaseUser` рд╕реЗ inherit рдХрд░рддрд╛ рд╣реИ рдФрд░ `password` field рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рджреЛрдиреЛрдВ models рдХреЗ рд╕рднреА fields рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
+
+рд╣рдо function return type рдХреЛ `BaseUser` рдХреЗ рд░реВрдк рдореЗрдВ annotate рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо `UserIn` instance return рдХрд░ рд░рд╣реЗ рд╣реИрдВред
+
+Editor, mypy, рдФрд░ рдЕрдиреНрдп tools рдЗрд╕ рдкрд░ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ typing terms рдореЗрдВ, `UserIn`, `BaseUser` рдХрд╛ subclass рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм expected рдХреБрдЫ рднреА `BaseUser` рд╣реЛ, рддреЛ рдпрд╣ рдПрдХ *valid* type рд╣реИред
+
+### FastAPI Data Filtering { #fastapi-data-filtering }
+
+рдЕрдм, FastAPI рдХреЗ рд▓рд┐рдП, рдпрд╣ return type рджреЗрдЦреЗрдЧрд╛ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдк рдЬреЛ return рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ **рдХреЗрд╡рд▓** рд╡рд╣реА fields рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдЬреЛ type рдореЗрдВ declare рдХрд┐рдП рдЧрдП рд╣реИрдВред
+
+FastAPI internally Pydantic рдХреЗ рд╕рд╛рде рдХрдИ рдЪреАрдЬрд╝реЗрдВ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ class inheritance рдХреЗ рд╡рд╣реА rules returned data filtering рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рди рдХрд┐рдП рдЬрд╛рдПрдБ, рдирд╣реАрдВ рддреЛ рдЖрдк expected рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ data return рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕ рддрд░рд╣, рдЖрдк рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛ рдХрд╛ best рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: **tooling support** рдХреЗ рд╕рд╛рде type annotations рдФрд░ **data filtering**ред
+
+## рдЗрд╕реЗ docs рдореЗрдВ рджреЗрдЦреЗрдВ { #see-it-in-the-docs }
+
+рдЬрдм рдЖрдк automatic docs рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк check рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ input model рдФрд░ output model рджреЛрдиреЛрдВ рдХрд╛ рдЕрдкрдирд╛ JSON Schema рд╣реЛрдЧрд╛:
+
+<img src="/img/tutorial/response-model/image01.png">
+
+рдФрд░ рджреЛрдиреЛрдВ models interactive API documentation рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдБрдЧреЗ:
+
+<img src="/img/tutorial/response-model/image02.png">
+
+## рдЕрдиреНрдп Return Type Annotations { #other-return-type-annotations }
+
+рдРрд╕реЗ cases рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ return рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ valid Pydantic field рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЙрд╕реЗ function рдореЗрдВ annotate рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ tooling (editor, mypy, рдЖрджрд┐) рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП support рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
+
+### рд╕реАрдзреЗ Response Return рдХрд░реЗрдВ { #return-a-response-directly }
+
+рд╕рдмрд╕реЗ common case рд╣реЛрдЧрд╛ [advanced docs рдореЗрдВ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдП рдЕрдиреБрд╕рд╛рд░ рд╕реАрдзреЗ Response return рдХрд░рдирд╛](../advanced/response-directly.md)ред
+
+{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
+
+рдпрд╣ simple case FastAPI рджреНрд╡рд╛рд░рд╛ automatically handle рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ return type annotation `Response` class (рдпрд╛ рдЙрд╕рдХрд╛ subclass) рд╣реИред
+
+рдФрд░ tools рднреА рдЦреБрд╢ рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ `RedirectResponse` рдФрд░ `JSONResponse` рджреЛрдиреЛрдВ `Response` рдХреЗ subclasses рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП type annotation рд╕рд╣реА рд╣реИред
+
+### Response Subclass Annotate рдХрд░реЗрдВ { #annotate-a-response-subclass }
+
+рдЖрдк type annotation рдореЗрдВ `Response` рдХреЗ subclass рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/response_model/tutorial003_03_py310.py hl[8:9] *}
+
+рдпрд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ `RedirectResponse`, `Response` рдХрд╛ subclass рд╣реИ, рдФрд░ FastAPI рдЗрд╕ simple case рдХреЛ automatically handle рдХрд░реЗрдЧрд╛ред
+
+### Invalid Return Type Annotations { #invalid-return-type-annotations }
+
+рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХреЛрдИ рдЕрдиреНрдп arbitrary object return рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ valid Pydantic type рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ database object) рдФрд░ рдЖрдк рдЙрд╕реЗ function рдореЗрдВ рдЙрд╕реА рддрд░рд╣ annotate рдХрд░рддреЗ рд╣реИрдВ, рддреЛ FastAPI рдЙрд╕ type annotation рд╕реЗ Pydantic response model рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, рдФрд░ fail рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
+
+рдРрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ types рдХреЗ рдмреАрдЪ <dfn title='рдХрдИ types рдХреЗ рдмреАрдЪ union рдХрд╛ рдорддрд▓рдм рд╣реИ "рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА type".'>union</dfn> рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛ рдЬрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ valid Pydantic types рдирд╣реАрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ fail рд╣реЛрдЧрд╛ ЁЯТе:
+
+{* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
+
+...рдпрд╣ fail рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ type annotation Pydantic type рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ single `Response` class рдпрд╛ subclass рднреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ `Response` рдФрд░ `dict` рдХреЗ рдмреАрдЪ union (рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА) рд╣реИред
+
+### Response Model Disable рдХрд░реЗрдВ { #disable-response-model }
+
+рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рдЖрдк рд╢рд╛рдпрдж default data validation, documentation, filtering, рдЖрджрд┐ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реЛрдВ рдЬреЛ FastAPI рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдк рд╢рд╛рдпрдж function рдореЗрдВ return type annotation рдлрд┐рд░ рднреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реЛрдВ рддрд╛рдХрд┐ editors рдФрд░ type checkers (рдЬреИрд╕реЗ mypy) рдЬреИрд╕реЗ tools рд╕реЗ support рдорд┐рд▓ рд╕рдХреЗред
+
+рдЗрд╕ case рдореЗрдВ, рдЖрдк `response_model=None` set рдХрд░рдХреЗ response model generation disable рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/response_model/tutorial003_05_py310.py hl[7] *}
+
+рдЗрд╕рд╕реЗ FastAPI response model generation skip рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХреЗ рдХрд┐рд╕реА рднреА return type annotations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рдХрд┐ рд╡рд╣ рдЖрдкрдХреА FastAPI application рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗред ЁЯдУ
+
+## Response Model encoding parameters { #response-model-encoding-parameters }
+
+рдЖрдкрдХреЗ response model рдореЗрдВ default values рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
+
+{* ../../docs_src/response_model/tutorial004_py310.py hl[9,11:12] *}
+
+* `description: Union[str, None] = None` (рдпрд╛ Python 3.10 рдореЗрдВ `str | None = None`) рдХрд╛ default `None` рд╣реИред
+* `tax: float = 10.5` рдХрд╛ default `10.5` рд╣реИред
+* `tags: List[str] = []` рдХрд╛ default рдЦрд╛рд▓реА list рд╣реИ: `[]`ред
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ store рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ result рд╕реЗ omit рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ NoSQL database рдореЗрдВ рдХрдИ optional attributes рд╡рд╛рд▓реЗ models рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк default values рд╕реЗ рднрд░реЗ рдмрд╣реБрдд рд▓рдВрдмреЗ JSON responses рдирд╣реАрдВ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗред
+
+### `response_model_exclude_unset` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-the-response-model-exclude-unset-parameter }
+
+рдЖрдк *path operation decorator* parameter `response_model_exclude_unset=True` set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/response_model/tutorial004_py310.py hl[22] *}
+
+рдФрд░ рд╡реЗ default values response рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ set рдХрд┐рдП рдЧрдП values рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
+
+рддреЛ, рдЕрдЧрд░ рдЖрдк ID `foo` рд╡рд╛рд▓реЗ item рдХреЗ рд▓рд┐рдП рдЙрд╕ *path operation* рдХреЛ request рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ response (default values рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛) рд╣реЛрдЧрд╛:
+
+```JSON
+{
+ "name": "Foo",
+ "price": 50.2
+}
+```
+
+/// note | рдиреЛрдЯ
+
+рдЖрдк рдЗрд╕рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* `response_model_exclude_defaults=True`
+* `response_model_exclude_none=True`
+
+рдЬреИрд╕рд╛ рдХрд┐ `exclude_defaults` рдФрд░ `exclude_none` рдХреЗ рд▓рд┐рдП [Pydantic docs](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict) рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+///
+
+#### Defaults рд╡рд╛рд▓реЗ fields рдХреЗ рд▓рд┐рдП values рд╡рд╛рд▓рд╛ data { #data-with-values-for-fields-with-defaults }
+
+рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ data рдореЗрдВ model рдХреЗ default values рд╡рд╛рд▓реЗ fields рдХреЗ рд▓рд┐рдП values рд╣реИрдВ, рдЬреИрд╕реЗ ID `bar` рд╡рд╛рд▓рд╛ item:
+
+```Python hl_lines="3 5"
+{
+ "name": "Bar",
+ "description": "The bartenders",
+ "price": 62,
+ "tax": 20.2
+}
+```
+
+рддреЛ рд╡реЗ response рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
+
+#### Defaults рдЬреИрд╕реЗ рд╣реА values рд╡рд╛рд▓рд╛ data { #data-with-the-same-values-as-the-defaults }
+
+рдЕрдЧрд░ data рдореЗрдВ default values рдЬреИрд╕реЗ рд╣реА values рд╣реИрдВ, рдЬреИрд╕реЗ ID `baz` рд╡рд╛рд▓рд╛ item:
+
+```Python hl_lines="3 5-6"
+{
+ "name": "Baz",
+ "description": None,
+ "price": 50.2,
+ "tax": 10.5,
+ "tags": []
+}
+```
+
+FastAPI рдЗрддрдирд╛ smart рд╣реИ (рджрд░рдЕрд╕рд▓, Pydantic рдЗрддрдирд╛ smart рд╣реИ) рдХрд┐ рдпрд╣ рд╕рдордЭ рд╕рдХреЗ рдХрд┐, рднрд▓реЗ рд╣реА `description`, `tax`, рдФрд░ `tags` рдХреЗ values defaults рдЬреИрд╕реЗ рд╣реА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ explicitly set рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (defaults рд╕реЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп)ред
+
+рдЗрд╕рд▓рд┐рдП, рд╡реЗ JSON response рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ default values рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ `None` рдирд╣реАрдВред
+
+рд╡реЗ list (`[]`), `10.5` рдХрд╛ `float`, рдЖрджрд┐ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+### `response_model_include` рдФрд░ `response_model_exclude` { #response-model-include-and-response-model-exclude }
+
+рдЖрдк *path operation decorator* parameters `response_model_include` рдФрд░ `response_model_exclude` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рд╡реЗ include рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП attributes рдХреЗ рдирд╛рдореЛрдВ рд╡рд╛рд▓рд╛ `str` рдХрд╛ `set` рд▓реЗрддреЗ рд╣реИрдВ (рдмрд╛рдХреА рдХреЛ omit рдХрд░рддреЗ рд╣реБрдП) рдпрд╛ exclude рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдмрд╛рдХреА рдХреЛ include рдХрд░рддреЗ рд╣реБрдП)ред
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ Pydantic model рд╣реИ рдФрд░ рдЖрдк output рд╕реЗ рдХреБрдЫ data remove рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ quick shortcut рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрди parameters рдХреЗ рдмрдЬрд╛рдп, multiple classes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдКрдкрд░ рджрд┐рдП рдЧрдП ideas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА recommendation рд╣реИред
+
+рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ app рдХреЗ OpenAPI (рдФрд░ docs) рдореЗрдВ generated JSON Schema рдлрд┐рд░ рднреА complete model рдХреЗ рд▓рд┐рдП рд╣реА рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдЖрдк рдХреБрдЫ attributes omit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `response_model_include` рдпрд╛ `response_model_exclude` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+рдпрд╣ `response_model_by_alias` рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
+
+///
+
+{* ../../docs_src/response_model/tutorial005_py310.py hl[29,35] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+Syntax `{"name", "description"}` рдЙрди рджреЛ values рдХреЗ рд╕рд╛рде рдПрдХ `set` рдмрдирд╛рддрд╛ рд╣реИред
+
+рдпрд╣ `set(["name", "description"])` рдХреЗ equivalent рд╣реИред
+
+///
+
+#### `set`s рдХреЗ рдмрдЬрд╛рдп `list`s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-lists-instead-of-sets }
+
+рдЕрдЧрд░ рдЖрдк `set` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп `list` рдпрд╛ `tuple` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ FastAPI рдлрд┐рд░ рднреА рдЙрд╕реЗ `set` рдореЗрдВ convert рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдпрд╣ рд╕рд╣реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
+
+{* ../../docs_src/response_model/tutorial006_py310.py hl[29,35] *}
+
+## Recap { #recap }
+
+Response models define рдХрд░рдиреЗ рдФрд░ рдЦрд╛рд╕рдХрд░ private data рдХреЛ filter out рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП *path operation decorator* рдХреЗ parameter `response_model` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+рдХреЗрд╡рд▓ explicitly set рдХрд┐рдП рдЧрдП values return рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `response_model_exclude_unset` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
--- /dev/null
+# Response Status Code { #response-status-code }
+
+рдЬрд┐рд╕ рддрд░рд╣ рдЖрдк response model specify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реА рддрд░рд╣ рдЖрдк рдХрд┐рд╕реА рднреА *path operations* рдореЗрдВ parameter `status_code` рдХреЗ рд╕рд╛рде response рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ HTTP status code рднреА declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* `@app.get()`
+* `@app.post()`
+* `@app.put()`
+* `@app.delete()`
+* рдЖрджрд┐ред
+
+{* ../../docs_src/response_status_code/tutorial001_py310.py hl[6] *}
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ `status_code`, "decorator" method (`get`, `post`, рдЖрджрд┐) рдХрд╛ parameter рд╣реИред рдпрд╣ рдЖрдкрдХреЗ *path operation function* рдХрд╛ parameter рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдмрд╛рдХреА рд╕рднреА parameters рдФрд░ body рд╣реЛрддреЗ рд╣реИрдВред
+
+///
+
+`status_code` parameter HTTP status code рд╡рд╛рд▓рд╛ рдПрдХ number receive рдХрд░рддрд╛ рд╣реИред
+
+/// note | рдиреЛрдЯ
+
+`status_code` рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ `IntEnum` рднреА receive рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ Python рдХрд╛ [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus).
+
+///
+
+рдпрд╣:
+
+* response рдореЗрдВ рд╡рд╣ status code return рдХрд░реЗрдЧрд╛ред
+* рдЙрд╕реЗ OpenAPI schema рдореЗрдВ рдЙрд╕реА рддрд░рд╣ document рдХрд░реЗрдЧрд╛ (рдФрд░ рдЗрд╕рд▓рд┐рдП, user interfaces рдореЗрдВ рднреА):
+
+<img src="/img/tutorial/response-status-code/image01.png">
+
+/// note | рдиреЛрдЯ
+
+рдХреБрдЫ response codes (рдЕрдЧрд▓рд╛ section рджреЗрдЦреЗрдВ) рдпрд╣ indicate рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ response рдореЗрдВ body рдирд╣реАрдВ рд╣реЛрддреАред
+
+FastAPI рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдРрд╕реЗ OpenAPI docs рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ response body рдирд╣реАрдВ рд╣реИред
+
+///
+
+## HTTP status codes рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ { #about-http-status-codes }
+
+/// note | рдиреЛрдЯ
+
+рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ HTTP status codes рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЕрдЧрд▓реЗ section рдкрд░ рдЬрд╛рдПрдБред
+
+///
+
+HTTP рдореЗрдВ, рдЖрдк response рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ 3 digits рдХрд╛ рдПрдХ numeric status code рднреЗрдЬрддреЗ рд╣реИрдВред
+
+рдЗрди status codes рдХреЗ рд╕рд╛рде рдПрдХ associated name рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ number рд╣реЛрддрд╛ рд╣реИред
+
+рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:
+
+* `100 - 199` "Information" рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк рдЗрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдмрд╣реБрдд рдХрдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЗрди status codes рд╡рд╛рд▓реЗ responses рдореЗрдВ body рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреАред
+* **`200 - 299`** "Successful" responses рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рд╡реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╕рдмрд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред
+ * `200` default status code рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ "OK" рдерд╛ред
+ * рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг `201`, "Created" рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдЖрдорддреМрд░ рдкрд░ database рдореЗрдВ рдирдпрд╛ record рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+ * рдПрдХ рд╡рд┐рд╢реЗрд╖ case `204`, "No Content" рд╣реИред рдпрд╣ response рддрдм рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрдм client рдХреЛ return рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ content рдирд╣реАрдВ рд╣реЛрддрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП response рдореЗрдВ body рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
+* **`300 - 399`** "Redirection" рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВред рдЗрди status codes рд╡рд╛рд▓реЗ responses рдореЗрдВ body рд╣реЛ рднреА рд╕рдХрддреА рд╣реИ рдФрд░ рдирд╣реАрдВ рднреА, рд╕рд┐рд╡рд╛рдп `304`, "Not Modified" рдХреЗ, рдЬрд┐рд╕рдореЗрдВ body рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
+* **`400 - 499`** "Client error" responses рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рджреВрд╕рд░рд╛ type рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред
+ * рдПрдХ рдЙрджрд╛рд╣рд░рдг `404` рд╣реИ, "Not Found" response рдХреЗ рд▓рд┐рдПред
+ * client рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА generic errors рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд┐рд░реНрдлрд╝ `400` рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+* `500 - 599` server errors рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк рдЗрдиреНрд╣реЗрдВ рд▓рдЧрднрдЧ рдХрднреА рд╕реАрдзреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░рддреЗред рдЬрдм рдЖрдкрдХреЗ application code рдпрд╛ server рдХреЗ рдХрд┐рд╕реА рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ-рдЖрдк рдЗрди status codes рдореЗрдВ рд╕реЗ рдПрдХ return рдХрд░реЗрдЧрд╛ред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рд╣рд░ status code рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдХреМрди-рд╕рд╛ code рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП [HTTP status codes рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ <abbr title="Mozilla Developer Network">MDN</abbr> documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) рджреЗрдЦреЗрдВред
+
+///
+
+## рдирд╛рдо рдпрд╛рдж рд░рдЦрдиреЗ рдХрд╛ shortcut { #shortcut-to-remember-the-names }
+
+рдЖрдЗрдП рдкрд┐рдЫрд▓реЗ example рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ:
+
+{* ../../docs_src/response_status_code/tutorial001_py310.py hl[6] *}
+
+`201` "Created" рдХреЗ рд▓рд┐рдП status code рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рд╣рд░ code рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред
+
+рдЖрдк `fastapi.status` рд╕реЗ convenience variables рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/response_status_code/tutorial002_py310.py hl[1,6] *}
+
+рд╡реЗ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╡рд╣реА number рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП editor рдХреЗ autocomplete рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<img src="/img/tutorial/response-status-code/image02.png">
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЖрдк `from starlette import status` рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, developer рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╣реА `starlette.status` `fastapi.status` рдХреЗ рд░реВрдк рдореЗрдВ provide рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддрд╛ рд╣реИред
+
+///
+
+## default рдмрджрд▓рдирд╛ { #changing-the-default }
+
+рдмрд╛рдж рдореЗрдВ, [Advanced User Guide](../advanced/response-change-status-code.md) рдореЗрдВ, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣рд╛рдБ declare рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ default рд╕реЗ рдЕрд▓рдЧ status code рдХреИрд╕реЗ return рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
--- /dev/null
+# Request Example Data рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ { #declare-request-example-data }
+
+рдЖрдк рдЙрд╕ data рдХреЗ examples рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдкрдХрд╛ app receive рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+
+рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдпрд╣рд╛рдБ рджрд┐рдП рдЧрдП рд╣реИрдВред
+
+## Pydantic models рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд JSON Schema data { #extra-json-schema-data-in-pydantic-models }
+
+рдЖрдк рдХрд┐рд╕реА Pydantic model рдХреЗ рд▓рд┐рдП `examples` рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ generated JSON Schema рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
+
+{* ../../docs_src/schema_extra_example/tutorial001_py310.py hl[13:24] *}
+
+рд╡рд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЙрд╕ model рдХреЗ output **JSON Schema** рдореЗрдВ рдЬреИрд╕реА рд╣реИ рд╡реИрд╕реА рд╣реА рдЬреЛрдбрд╝реА рдЬрд╛рдПрдЧреА, рдФрд░ API docs рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдПрдЧреАред
+
+рдЖрдк `model_config` attribute рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ `dict` рд▓реЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ [Pydantic рдХреЗ docs: Configuration](https://docs.pydantic.dev/latest/api/config/) рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+рдЖрдк `"json_schema_extra"` рдХреЛ рдПрдХ `dict` рдХреЗ рд╕рд╛рде set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд data рд╣реЛ рдЬрд┐рд╕реЗ рдЖрдк generated JSON Schema рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ `examples` рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЖрдк рдЗрд╕реА technique рдХрд╛ рдЙрдкрдпреЛрдЧ JSON Schema рдХреЛ extend рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреА custom рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ frontend user interface рдЖрджрд┐ рдХреЗ рд▓рд┐рдП metadata рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+/// note | рдиреЛрдЯ
+
+OpenAPI 3.1.0 (FastAPI 0.99.0 рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдиреЗ `examples` рдХреЗ рд▓рд┐рдП support рдЬреЛрдбрд╝рд╛, рдЬреЛ **JSON Schema** standard рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
+
+рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХреЗрд╡рд▓ keyword `example` рдХреЛ рдПрдХ single example рдХреЗ рд╕рд╛рде support рдХрд░рддрд╛ рдерд╛ред рдпрд╣ рдЕрднреА рднреА OpenAPI 3.1.0 рджреНрд╡рд╛рд░рд╛ supported рд╣реИ, рд▓реЗрдХрд┐рди deprecated рд╣реИ рдФрд░ JSON Schema standard рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ `example` рд╕реЗ `examples` рдкрд░ migrate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ЁЯдУ
+
+рдЖрдк рдЗрд╕ page рдХреЗ рдЕрдВрдд рдореЗрдВ рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+## `Field` рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд arguments { #field-additional-arguments }
+
+Pydantic models рдХреЗ рд╕рд╛рде `Field()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд `examples` рднреА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/schema_extra_example/tutorial002_py310.py hl[2,8:11] *}
+
+## JSON Schema - OpenAPI рдореЗрдВ `examples` { #examples-in-json-schema-openapi }
+
+рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп:
+
+* `Path()`
+* `Query()`
+* `Header()`
+* `Cookie()`
+* `Body()`
+* `Form()`
+* `File()`
+
+рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде `examples` рдХрд╛ рдПрдХ group рднреА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ **OpenAPI** рдХреЗ рдЕрдВрджрд░ рдЙрдирдХреЗ **JSON Schemas** рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
+
+### `examples` рдХреЗ рд╕рд╛рде `Body` { #body-with-examples }
+
+рдпрд╣рд╛рдБ рд╣рдо `Body()` рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд data рдХреЗ рдПрдХ example рд╡рд╛рд▓рд╛ `examples` pass рдХрд░рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/schema_extra_example/tutorial003_an_py310.py hl[22:29] *}
+
+### docs UI рдореЗрдВ Example { #example-in-the-docs-ui }
+
+рдКрдкрд░ рджрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА method рдХреЗ рд╕рд╛рде рдпрд╣ `/docs` рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
+
+<img src="/img/tutorial/body-fields/image01.png">
+
+### рдХрдИ `examples` рдХреЗ рд╕рд╛рде `Body` { #body-with-multiple-examples }
+
+рдмреЗрд╢рдХ рдЖрдк рдХрдИ `examples` рднреА pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/schema_extra_example/tutorial004_an_py310.py hl[23:38] *}
+
+рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ examples рдЙрд╕ body data рдХреЗ internal **JSON Schema** рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдВрдЧреЗред
+
+рдлрд┐рд░ рднреА, <dfn title="2023-08-26">рдпрд╣ рд▓рд┐рдЦрддреЗ рд╕рдордп</dfn>, Swagger UI, рд╡рд╣ tool рдЬреЛ docs UI рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, **JSON Schema** рдореЗрдВ data рдХреЗ рд▓рд┐рдП рдХрдИ examples рджрд┐рдЦрд╛рдиреЗ рдХреЛ support рдирд╣реАрдВ рдХрд░рддрд╛ред рд▓реЗрдХрд┐рди workaround рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдкрдврд╝реЗрдВред
+
+### OpenAPI-specific `examples` { #openapi-specific-examples }
+
+**JSON Schema** рджреНрд╡рд╛рд░рд╛ `examples` support рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА, OpenAPI рдореЗрдВ рдПрдХ рдЕрд▓рдЧ field рдХреЗ рд▓рд┐рдП support рдерд╛ рдЬрд┐рд╕реЗ `examples` рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред
+
+рдпрд╣ **OpenAPI-specific** `examples` OpenAPI specification рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп section рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ JSON Schema рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ **рдкреНрд░рддреНрдпреЗрдХ *path operation* рдХреЗ details** рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
+
+рдФрд░ Swagger UI рдиреЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ `examples` field рдХреЛ рдХреБрдЫ рд╕рдордп рд╕реЗ support рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ docs UI рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ **examples рджрд┐рдЦрд╛рдиреЗ** рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЗрд╕ OpenAPI-specific field `examples` рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ `dict` рд╣реИ рдЬрд┐рд╕рдореЗрдВ **рдХрдИ examples** рд╣реЛрддреЗ рд╣реИрдВ (`list` рдХреЗ рдмрдЬрд╛рдп), рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ **OpenAPI** рдореЗрдВ рднреА рдЬреЛрдбрд╝реА рдЬрд╛рдПрдЧреАред
+
+рдпрд╣ OpenAPI рдореЗрдВ рдореМрдЬреВрдж рдкреНрд░рддреНрдпреЗрдХ JSON Schema рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдЬрд╛рддрд╛, рдпрд╣ рдмрд╛рд╣рд░, рд╕реАрдзреЗ *path operation* рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
+
+### `openapi_examples` Parameter рдХрд╛ рдЙрдкрдпреЛрдЧ { #using-the-openapi-examples-parameter }
+
+рдЖрдк FastAPI рдореЗрдВ OpenAPI-specific `examples` рдХреЛ parameter `openapi_examples` рдХреЗ рд╕рд╛рде рдЗрдирдХреЗ рд▓рд┐рдП рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* `Path()`
+* `Query()`
+* `Header()`
+* `Cookie()`
+* `Body()`
+* `Form()`
+* `File()`
+
+`dict` рдХреА keys рдкреНрд░рддреНрдпреЗрдХ example рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ value рдПрдХ рдФрд░ `dict` рд╣реЛрддреА рд╣реИред
+
+`examples` рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ specific example `dict` рдореЗрдВ рдпреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
+
+* `summary`: example рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ descriptionред
+* `description`: рдПрдХ рд▓рдВрдмрд╛ description рдЬрд┐рд╕рдореЗрдВ Markdown text рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+* `value`: рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ example рд╣реИ, рдЬреИрд╕реЗ рдПрдХ `dict`ред
+* `externalValue`: `value` рдХрд╛ alternative, example рдХреА рдУрд░ point рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ URLред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж `value` рдЬрд┐рддрдиреЗ tools рджреНрд╡рд╛рд░рд╛ supported рди рд╣реЛред
+
+рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/schema_extra_example/tutorial005_an_py310.py hl[23:49] *}
+
+### Docs UI рдореЗрдВ OpenAPI Examples { #openapi-examples-in-the-docs-ui }
+
+`Body()` рдореЗрдВ `openapi_examples` рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде `/docs` рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
+
+<img src="/img/tutorial/body-fields/image02.png">
+
+## рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг { #technical-details }
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА **FastAPI** version **0.99.0 рдпрд╛ рдЙрд╕рд╕реЗ рдКрдкрд░** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдпреЗ details **skip** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпреЗ рдкреБрд░рд╛рдиреЗ versions рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ relevant рд╣реИрдВ, OpenAPI 3.1.0 рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред
+
+рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд OpenAPI рдФрд░ JSON Schema **history lesson** рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред ЁЯдУ
+
+///
+
+/// warning | рдЪреЗрддрд╛рд╡рдиреА
+
+рдпреЗ standards **JSON Schema** рдФрд░ **OpenAPI** рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд technical details рд╣реИрдВред
+
+рдпрджрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП ideas рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрди details рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЗрдиреНрд╣реЗрдВ skip рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
+
+///
+
+OpenAPI 3.1.0 рд╕реЗ рдкрд╣рд▓реЗ, OpenAPI рдиреЗ **JSON Schema** рдХреЗ рдПрдХ рдкреБрд░рд╛рдиреЗ рдФрд░ modified version рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
+
+JSON Schema рдореЗрдВ `examples` рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП OpenAPI рдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ modified version рдореЗрдВ рдЕрдкрдирд╛ `example` field рдЬреЛрдбрд╝рд╛ред
+
+OpenAPI рдиреЗ specification рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рднреА `example` рдФрд░ `examples` fields рдЬреЛрдбрд╝реЗ:
+
+* [`Parameter Object` (specification рдореЗрдВ)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object) рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ FastAPI рдХреЗ рдЗрдирд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛:
+ * `Path()`
+ * `Query()`
+ * `Header()`
+ * `Cookie()`
+* [`Request Body Object`, field `content` рдореЗрдВ, `Media Type Object` рдкрд░ (specification рдореЗрдВ)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object) рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ FastAPI рдХреЗ рдЗрдирд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛:
+ * `Body()`
+ * `File()`
+ * `Form()`
+
+/// note | рдиреЛрдЯ
+
+рдпрд╣ рдкреБрд░рд╛рдирд╛ OpenAPI-specific `examples` parameter рдЕрдм FastAPI `0.103.0` рд╕реЗ `openapi_examples` рд╣реИред
+
+///
+
+### JSON Schema рдХрд╛ `examples` field { #json-schemas-examples-field }
+
+рд▓реЗрдХрд┐рди рдлрд┐рд░ JSON Schema рдиреЗ specification рдХреЗ рдПрдХ рдирдП version рдореЗрдВ рдПрдХ [`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5) field рдЬреЛрдбрд╝рд╛ред
+
+рдФрд░ рдлрд┐рд░ рдирдпрд╛ OpenAPI 3.1.0 latest version (JSON Schema 2020-12) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдирдпрд╛ field `examples` рд╢рд╛рдорд┐рд▓ рдерд╛ред
+
+рдФрд░ рдЕрдм рдпрд╣ рдирдпрд╛ `examples` field рдкреБрд░рд╛рдиреЗ single (рдФрд░ custom) `example` field рдкрд░ precedence рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдЕрдм deprecated рд╣реИред
+
+JSON Schema рдореЗрдВ рдпрд╣ рдирдпрд╛ `examples` field OpenAPI рдореЗрдВ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ (рдКрдкрд░ рд╡рд░реНрдгрд┐рдд) рдХреА рддрд░рд╣ рдЕрддрд┐рд░рд┐рдХреНрдд metadata рд╡рд╛рд▓рд╛ dict рдирд╣реАрдВ рд╣реИ, рдпрд╣ **рд╕рд┐рд░реНрдл рдПрдХ `list`** рд╣реИред
+
+/// note | рдиреЛрдЯ
+
+OpenAPI 3.1.0 рдХреЗ JSON Schema рдХреЗ рд╕рд╛рде рдЗрд╕ рдирдП рд╕рд░рд▓ integration рдХреЗ рд╕рд╛рде release рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдХреБрдЫ рд╕рдордп рддрдХ, Swagger UI, рд╡рд╣ tool рдЬреЛ automatic docs рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, OpenAPI 3.1.0 рдХреЛ support рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ (рдпрд╣ version 5.0.0 рд╕реЗ рдХрд░рддрд╛ рд╣реИ ЁЯОЙ)ред
+
+рдЗрд╕реА рд╡рдЬрд╣ рд╕реЗ, 0.99.0 рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ FastAPI versions рдЕрднреА рднреА OpenAPI рдХреЗ 3.1.0 рд╕реЗ рдХрдо versions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗред
+
+///
+
+### Pydantic рдФрд░ FastAPI `examples` { #pydantic-and-fastapi-examples }
+
+рдЬрдм рдЖрдк Pydantic model рдХреЗ рдЕрдВрджрд░ `examples` рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, `schema_extra` рдпрд╛ `Field(examples=["something"])` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рддреЛ рд╡рд╣ example рдЙрд╕ Pydantic model рдХреЗ **JSON Schema** рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдФрд░ рдЙрд╕ Pydantic model рдХрд╛ **JSON Schema** рдЖрдкрдХреА API рдХреЗ **OpenAPI** рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ docs UI рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+FastAPI рдХреЗ 0.99.0 рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ versions рдореЗрдВ (0.99.0 рдФрд░ рдКрдкрд░ рд╡рд╛рд▓реЗ рдирдП OpenAPI 3.1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ), рдЬрдм рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдиреНрдп utilities (`Query()`, `Body()`, рдЖрджрд┐) рдХреЗ рд╕рд╛рде `example` рдпрд╛ `examples` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ, рддреЛ рд╡реЗ examples рдЙрд╕ data рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ JSON Schema рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рдереЗ (OpenAPI рдХреЗ JSON Schema рдХреЗ рдЕрдкрдиреЗ version рдореЗрдВ рднреА рдирд╣реАрдВ), рд╡реЗ рд╕реАрдзреЗ OpenAPI рдореЗрдВ *path operation* declaration рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рдереЗ (OpenAPI рдХреЗ рдЙрди parts рдХреЗ рдмрд╛рд╣рд░ рдЬреЛ JSON Schema рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред
+
+рд▓реЗрдХрд┐рди рдЕрдм рдЬрдмрдХрд┐ FastAPI 0.99.0 рдФрд░ рдКрдкрд░ OpenAPI 3.1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ JSON Schema 2020-12 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ Swagger UI 5.0.0 рдФрд░ рдКрдкрд░, рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ consistent рд╣реИ рдФрд░ examples JSON Schema рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред
+
+### Swagger UI рдФрд░ OpenAPI-specific `examples` { #swagger-ui-and-openapi-specific-examples }
+
+рдЕрдм, рдХреНрдпреЛрдВрдХрд┐ Swagger UI рдХрдИ JSON Schema examples рдХреЛ support рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ (2023-08-26 рддрдХ), users рдХреЗ рдкрд╛рд╕ docs рдореЗрдВ рдХрдИ examples рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛ред
+
+рдЗрд╕реЗ solve рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, FastAPI `0.103.0` рдиреЗ рдирдП parameter `openapi_examples` рдХреЗ рд╕рд╛рде рдЙрд╕реА рдкреБрд░рд╛рдиреЗ **OpenAPI-specific** `examples` field рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **support рдЬреЛрдбрд╝рд╛**ред ЁЯдУ
+
+### Summary { #summary }
+
+рдореИрдВ рдХрд╣рд╛ рдХрд░рддрд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ history рдЙрддрдиреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ... рдФрд░ рдЕрдм рдореБрдЭреЗ рджреЗрдЦрд┐рдП, "tech history" lessons рджреЗ рд░рд╣рд╛ рд╣реВрдБред ЁЯШЕ
+
+рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, **FastAPI 0.99.0 рдпрд╛ рдЙрд╕рд╕реЗ рдКрдкрд░ upgrade рдХрд░реЗрдВ**, рдФрд░ рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ **рд╕рд░рд▓, consistent, рдФрд░ intuitive** рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдпреЗ рд╕рд╛рд░реЗ historical details рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред ЁЯШО
--- /dev/null
+# Password рдФрд░ Bearer рдХреЗ рд╕рд╛рде рд╕рд░рд▓ OAuth2 { #simple-oauth2-with-password-and-bearer }
+
+рдЕрдм рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдп рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреВрд░рд╛ security flow рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреВрдЯреЗ рд╣реБрдП рд╣рд┐рд╕реНрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
+
+## `username` рдФрд░ `password` рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ { #get-the-username-and-password }
+
+рд╣рдо `username` рдФрд░ `password` рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **FastAPI** security utilities рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред
+
+OAuth2 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ "password flow" (рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп client/user рдХреЛ `username` рдФрд░ `password` fields рдХреЛ form data рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред
+
+рдФрд░ spec рдХрд╣рддрд╛ рд╣реИ рдХрд┐ fields рдХреЗ рдирд╛рдо рдРрд╕реЗ рд╣реА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП `user-name` рдпрд╛ `email` рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
+
+рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, frontend рдореЗрдВ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЕрдВрддрд┐рдо users рдХреЛ рдЬреИрд╕реЗ рдЪрд╛рд╣реЗрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдФрд░ рдЖрдкрдХреЗ database models рдХреЛрдИ рднреА рджреВрд╕рд░реЗ рдирд╛рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣реЗрдВред
+
+рд▓реЗрдХрд┐рди login *path operation* рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ spec рдХреЗ рд╕рд╛рде compatible рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, integrated API documentation system рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП)ред
+
+Spec рдпрд╣ рднреА рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ `username` рдФрд░ `password` рдХреЛ form data рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдБ рдХреЛрдИ JSON рдирд╣реАрдВ)ред
+
+### `scope` { #scope }
+
+Spec рдпрд╣ рднреА рдХрд╣рддрд╛ рд╣реИ рдХрд┐ client рдПрдХ рдФрд░ form field "`scope`" рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред
+
+form field рдХрд╛ рдирд╛рдо `scope` рд╣реИ (singular рдореЗрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ spaces рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП "scopes" рд╡рд╛рд▓реА рдПрдХ рд▓рдВрдмреА string рд╣реЛрддреА рд╣реИред
+
+рд╣рд░ "scope" рдмрд╕ рдПрдХ string рд╣реИ (рдмрд┐рдирд╛ spaces рдХреЗ)ред
+
+рдЗрдирдХрд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд╡рд┐рд╢рд┐рд╖реНрдЯ security permissions рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+* `users:read` рдпрд╛ `users:write` рдЖрдо рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред
+* `instagram_basic` Facebook / Instagram рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+* `https://www.googleapis.com/auth/drive` Google рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+/// note | рдиреЛрдЯ
+
+OAuth2 рдореЗрдВ "scope" рдмрд╕ рдПрдХ string рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ required permission рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рддреА рд╣реИред
+
+рдЗрд╕рд╕реЗ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЙрд╕рдореЗрдВ `:` рдЬреИрд╕реЗ рдЕрдиреНрдп characters рд╣реИрдВ рдпрд╛ рд╡рд╣ URL рд╣реИред
+
+рд╡реЗ details implementation specific рд╣реИрдВред
+
+OAuth2 рдХреЗ рд▓рд┐рдП рд╡реЗ рдмрд╕ strings рд╣реИрдВред
+
+///
+
+## `username` рдФрд░ `password` рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ Code { #code-to-get-the-username-and-password }
+
+рдЕрдм рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП **FastAPI** рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ utilities рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+### `OAuth2PasswordRequestForm` { #oauth2passwordrequestform }
+
+рдкрд╣рд▓реЗ, `OAuth2PasswordRequestForm` import рдХрд░реЗрдВ, рдФрд░ `/token` рдХреЗ *path operation* рдореЗрдВ `Depends` рдХреЗ рд╕рд╛рде рдЗрд╕реЗ dependency рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[4,78] *}
+
+`OAuth2PasswordRequestForm` рдПрдХ class dependency рд╣реИ рдЬреЛ рдПрдХ form body рдШреЛрд╖рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ:
+
+* `username`ред
+* `password`ред
+* рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ `scope` field, рдПрдХ рдмрдбрд╝реА string рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ spaces рд╕реЗ рдЕрд▓рдЧ рдХреА рдЧрдИ strings рд╕реЗ рдмрдиреА рд╣реЛрддреА рд╣реИред
+* рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ `grant_type`ред
+
+/// tip | рдЯрд┐рдк
+
+OAuth2 spec рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ fixed value `password` рдХреЗ рд╕рд╛рде рдПрдХ field `grant_type` *required* рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди `OAuth2PasswordRequestForm` рдЗрд╕реЗ enforce рдирд╣реАрдВ рдХрд░рддрд╛ред
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ enforce рдХрд░рдирд╛ рд╣реИ, рддреЛ `OAuth2PasswordRequestForm` рдХреА рдЬрдЧрд╣ `OAuth2PasswordRequestFormStrict` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+///
+
+* рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ `client_id` (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред
+* рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ `client_secret` (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред
+
+/// note | рдиреЛрдЯ
+
+`OAuth2PasswordRequestForm`, **FastAPI** рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ class рдирд╣реАрдВ рд╣реИ рдЬреИрд╕реЗ `OAuth2PasswordBearer` рд╣реИред
+
+`OAuth2PasswordBearer` **FastAPI** рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ security scheme рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ OpenAPI рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди `OAuth2PasswordRequestForm` рдмрд╕ рдПрдХ class dependency рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЦреБрдж рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рдереЗ, рдпрд╛ рдЖрдк рд╕реАрдзреЗ `Form` parameters рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рдереЗред
+
+рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп use case рд╣реИ, рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП **FastAPI** рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+///
+
+### form data рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-the-form-data }
+
+/// tip | рдЯрд┐рдк
+
+dependency class `OAuth2PasswordRequestForm` рдХреЗ instance рдореЗрдВ spaces рд╕реЗ рдЕрд▓рдЧ рдХреА рдЧрдИ рд▓рдВрдмреА string рд╡рд╛рд▓рд╛ attribute `scope` рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдкреНрд░рддреНрдпреЗрдХ scope рдХреЗ рд▓рд┐рдП actual strings рдХреА list рд╡рд╛рд▓рд╛ `scopes` attribute рд╣реЛрдЧрд╛ред
+
+рд╣рдо рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ `scopes` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ functionality рдЙрдкрд▓рдмреНрдз рд╣реИред
+
+///
+
+рдЕрдм, form field рд╕реЗ `username` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (fake) database рд╕реЗ user data рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
+
+рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ user рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо "Incorrect username or password" рдХрд╣рддреЗ рд╣реБрдП error рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
+
+Error рдХреЗ рд▓рд┐рдП, рд╣рдо exception `HTTPException` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[3,79:81] *}
+
+### password рдЬрд╛рдБрдЪреЗрдВ { #check-the-password }
+
+рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ database рд╕реЗ user data рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ password рдирд╣реАрдВ рдЬрд╛рдБрдЪрд╛ рд╣реИред
+
+рдкрд╣рд▓реЗ рдЙрд╕ data рдХреЛ Pydantic `UserInDB` model рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред
+
+рдЖрдкрдХреЛ рдХрднреА рднреА plaintext passwords save рдирд╣реАрдВ рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП, рд╣рдо (fake) password hashing system рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
+
+рдпрджрд┐ passwords match рдирд╣реАрдВ рдХрд░рддреЗ, рддреЛ рд╣рдо рд╡рд╣реА error рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
+
+#### Password hashing { #password-hashing }
+
+"Hashing" рдХрд╛ рдорддрд▓рдм рд╣реИ: рдХреБрдЫ content (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ password) рдХреЛ bytes рдХреА sequence (рдмрд╕ рдПрдХ string) рдореЗрдВ convert рдХрд░рдирд╛ рдЬреЛ рдмреЗрддрд░рддреАрдм рджрд┐рдЦрддреА рд╣реИред
+
+рдЬрдм рднреА рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА content (рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА password) рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдмреЗрддрд░рддреАрдм string рдорд┐рд▓рддреА рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдк рдЙрд╕ рдмреЗрддрд░рддреАрдм string рд╕реЗ рд╡рд╛рдкрд╕ password рдореЗрдВ convert рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
+
+##### Password hashing рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ { #why-use-password-hashing }
+
+рдЕрдЧрд░ рдЖрдкрдХрд╛ database рдЪреЛрд░реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЪреЛрд░ рдХреЗ рдкрд╛рд╕ рдЖрдкрдХреЗ users рдХреЗ plaintext passwords рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреЗрд╡рд▓ hashes рд╣реЛрдВрдЧреЗред
+
+рдЗрд╕рд▓рд┐рдП, рдЪреЛрд░ рдЙрди same passwords рдХреЛ рдХрд┐рд╕реА рджреВрд╕рд░реЗ system рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдХрдИ users рд╣рд░ рдЬрдЧрд╣ рд╡рд╣реА password рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЦрддрд░рдирд╛рдХ рд╣реЛрдЧрд╛)ред
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[82:85] *}
+
+#### `**user_dict` рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ { #about-user-dict }
+
+`UserInDB(**user_dict)` рдХрд╛ рдорддрд▓рдм рд╣реИ:
+
+*`user_dict` рдХреА keys рдФрд░ values рдХреЛ рд╕реАрдзреЗ key-value arguments рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░:*
+
+```Python
+UserInDB(
+ username = user_dict["username"],
+ email = user_dict["email"],
+ full_name = user_dict["full_name"],
+ disabled = user_dict["disabled"],
+ hashed_password = user_dict["hashed_password"],
+)
+```
+
+/// note | рдиреЛрдЯ
+
+`**user_dict` рдХреА рдЕрдзрд┐рдХ рдкреВрд░реА explanation рдХреЗ рд▓рд┐рдП [**Extra Models** рдХреЗ documentation](../extra-models.md#about-user-in-model-dump) рдореЗрдВ рд╡рд╛рдкрд╕ рджреЗрдЦреЗрдВред
+
+///
+
+## token рд▓реМрдЯрд╛рдПрдБ { #return-the-token }
+
+`token` endpoint рдХрд╛ response рдПрдХ JSON object рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+рдЗрд╕рдореЗрдВ `token_type` рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо "Bearer" tokens рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, token type "`bearer`" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+рдФрд░ рдЗрд╕рдореЗрдВ `access_token` рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ access token рд╡рд╛рд▓реА рдПрдХ string рд╣реЛред
+
+рдЗрд╕ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдкреВрд░реА рддрд░рд╣ insecure рд░рд╣реЗрдВрдЧреЗ рдФрд░ token рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╣реА `username` рд▓реМрдЯрд╛рдПрдБрдЧреЗред
+
+/// tip | рдЯрд┐рдк
+
+рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рдЖрдк password hashing рдФрд░ <abbr title="JSON Web Tokens - JSON рд╡реЗрдм рдЯреЛрдХрди">JWT</abbr> tokens рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ secure implementation рджреЗрдЦреЗрдВрдЧреЗред
+
+рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЙрди specific details рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
+
+///
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[87] *}
+
+/// tip | рдЯрд┐рдк
+
+Spec рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ `access_token` рдФрд░ `token_type` рдХреЗ рд╕рд╛рде рдПрдХ JSON рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ред
+
+рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ code рдореЗрдВ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЙрди JSON keys рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+Specifications рдХреЗ compliant рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд▓рдЧрднрдЧ рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЦреБрдж рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
+
+рдмрд╛рдХреА рд╕рдм **FastAPI** рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
+
+///
+
+## dependencies рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ { #update-the-dependencies }
+
+рдЕрдм рд╣рдо рдЕрдкрдиреА dependencies рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред
+
+рд╣рдо `current_user` рдХреЛ *рдХреЗрд╡рд▓* рддрдм рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ user active рд╣реЛред
+
+рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд dependency `get_current_active_user` рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ `get_current_user` рдХреЛ dependency рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред
+
+рдпреЗ рджреЛрдиреЛрдВ dependencies рдмрд╕ рдПрдХ HTTP error рд▓реМрдЯрд╛рдПрдБрдЧреА рдпрджрд┐ user рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдпрд╛ inactive рд╣реИред
+
+рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ endpoint рдореЗрдВ, рд╣рдореЗрдВ user рдХреЗрд╡рд▓ рддрднреА рдорд┐рд▓реЗрдЧрд╛ рдЬрдм user рдореМрдЬреВрдж рд╣реЛ, рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ authenticated рд╣реЛ, рдФрд░ active рд╣реЛ:
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *}
+
+/// note | рдиреЛрдЯ
+
+Value `Bearer` рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд header `WWW-Authenticate`, рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣рд╛рдБ рд▓реМрдЯрд╛ рд░рд╣реЗ рд╣реИрдВ, spec рдХрд╛ рднреА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
+
+рдХрд┐рд╕реА рднреА HTTP (error) status code 401 "UNAUTHORIZED" рдХреЛ `WWW-Authenticate` header рднреА рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
+
+Bearer tokens (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ) рдореЗрдВ, рдЙрд╕ header рдХреА value `Bearer` рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
+
+рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд header рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
+
+рд▓реЗрдХрд┐рди specifications рдХреЗ compliant рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+
+рд╕рд╛рде рд╣реА, рдРрд╕реЗ tools рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЕрднреА рдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ) рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рдпрд╛ рдЖрдкрдХреЗ users рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрднреА рдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВред
+
+рдпрд╣реА standards рдХрд╛ рд▓рд╛рдн рд╣реИ...
+
+///
+
+## рдЗрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рджреЗрдЦреЗрдВ { #see-it-in-action }
+
+Interactive docs рдЦреЛрд▓реЗрдВ: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ред
+
+### Authenticate рдХрд░реЗрдВ { #authenticate }
+
+"Authorize" button рдкрд░ click рдХрд░реЗрдВред
+
+Credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
+
+User: `johndoe`
+
+Password: `secret`
+
+<img src="/img/tutorial/security/image04.png">
+
+System рдореЗрдВ authenticate рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рдРрд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ:
+
+<img src="/img/tutorial/security/image05.png">
+
+### рдЕрдкрдирд╛ user data рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ { #get-your-own-user-data }
+
+рдЕрдм path `/users/me` рдХреЗ рд╕рд╛рде operation `GET` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+рдЖрдкрдХреЛ рдЕрдкрдиреЗ user рдХрд╛ data рдорд┐рд▓реЗрдЧрд╛, рдЬреИрд╕реЗ:
+
+```JSON
+{
+ "username": "johndoe",
+ "email": "johndoe@example.com",
+ "full_name": "John Doe",
+ "disabled": false,
+ "hashed_password": "fakehashedsecret"
+}
+```
+
+<img src="/img/tutorial/security/image06.png">
+
+рдпрджрд┐ рдЖрдк lock icon рдкрд░ click рдХрд░рдХреЗ logout рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡рд╣реА operation рджреЛрдмрд╛рд░рд╛ рдЖрдЬрд╝рдорд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ HTTP 401 error рдорд┐рд▓реЗрдЧрд╛:
+
+```JSON
+{
+ "detail": "Not authenticated"
+}
+```
+
+### Inactive user { #inactive-user }
+
+рдЕрдм рдПрдХ inactive user рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЗрдирдХреЗ рд╕рд╛рде authenticate рдХрд░реЗрдВ:
+
+User: `alice`
+
+Password: `secret2`
+
+рдФрд░ path `/users/me` рдХреЗ рд╕рд╛рде operation `GET` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
+
+рдЖрдкрдХреЛ "Inactive user" error рдорд┐рд▓реЗрдЧрд╛, рдЬреИрд╕реЗ:
+
+```JSON
+{
+ "detail": "Inactive user"
+}
+```
+
+## Recap { #recap }
+
+рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреА API рдХреЗ рд▓рд┐рдП `username` рдФрд░ `password` рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкреВрд░рд╛ security system implement рдХрд░рдиреЗ рдХреЗ tools рд╣реИрдВред
+
+рдЗрди tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк security system рдХреЛ рдХрд┐рд╕реА рднреА database рдФрд░ рдХрд┐рд╕реА рднреА user рдпрд╛ data model рдХреЗ рд╕рд╛рде compatible рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдПрдХрдорд╛рддреНрд░ detail рдЬреЛ missing рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "secure" рдирд╣реАрдВ рд╣реИред
+
+рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ secure password hashing library рдФрд░ <abbr title="JSON Web Tokens - JSON рд╡реЗрдм рдЯреЛрдХрди">JWT</abbr> tokens рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
--- /dev/null
+# Server-Sent Events (SSE) { #server-sent-events-sse }
+
+рдЖрдк **Server-Sent Events** (SSE) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ client рдХреЛ data stream рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдпрд╣ [Stream JSON Lines](stream-json-lines.md) рдЬреИрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди `text/event-stream` format рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ browsers [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) рдХреЗ рд╕рд╛рде natively support рдХрд░рддреЗ рд╣реИрдВред
+
+/// note | рдиреЛрдЯ
+
+FastAPI 0.135.0 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
+
+///
+
+## Server-Sent Events рдХреНрдпрд╛ рд╣реИрдВ? { #what-are-server-sent-events }
+
+SSE, HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ server рд╕реЗ client рддрдХ data stream рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ standard рд╣реИред
+
+рд╣рд░ event рдПрдХ рдЫреЛрдЯрд╛ text block рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ `data`, `event`, `id`, рдФрд░ `retry` рдЬреИрд╕реЗ "fields" рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЦрд╛рд▓реА lines рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
+
+```
+data: {"name": "Portal Gun", "price": 999.99}
+
+data: {"name": "Plumbus", "price": 32.99}
+
+```
+
+SSE рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ AI chat streaming, live notifications, logs рдФрд░ observability, рдФрд░ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ server client рдХреЛ updates push рдХрд░рддрд╛ рд╣реИред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд░ рдЖрдк binary data stream рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ video рдпрд╛ audio, рддреЛ advanced guide рджреЗрдЦреЗрдВ: [Data Stream рдХрд░реЗрдВ](../advanced/stream-data.md).
+
+///
+
+## FastAPI рдХреЗ рд╕рд╛рде SSE Stream рдХрд░реЗрдВ { #stream-sse-with-fastapi }
+
+FastAPI рдХреЗ рд╕рд╛рде SSE stream рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА *path operation function* рдореЗрдВ `yield` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ `response_class=EventSourceResponse` set рдХрд░реЗрдВред
+
+`EventSourceResponse` рдХреЛ `fastapi.sse` рд╕реЗ import рдХрд░реЗрдВ:
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[4,22] *}
+
+рд╣рд░ yielded item рдХреЛ JSON рдХреЗ рд░реВрдк рдореЗрдВ encode рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ SSE event рдХреЗ `data:` field рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+рдЕрдЧрд░ рдЖрдк return type рдХреЛ `AsyncIterable[Item]` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░рддреЗ рд╣реИрдВ, рддреЛ FastAPI рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Pydantic рдХреЗ рд╕рд╛рде data рдХреЛ **validate**, **document**, рдФрд░ **serialize** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ред
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[10:12,23] *}
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдХреНрдпреЛрдВрдХрд┐ Pydantic рдЗрд╕реЗ **Rust** side рдореЗрдВ serialize рдХрд░реЗрдЧрд╛, рдЖрдкрдХреЛ return type declare рди рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдмреЗрд╣рддрд░ **performance** рдорд┐рд▓реЗрдЧреАред
+
+///
+
+### Non-async *path operation functions* { #non-async-path-operation-functions }
+
+рдЖрдк рдирд┐рдпрдорд┐рдд `def` functions (рдмрд┐рдирд╛ `async`) рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕реА рддрд░рд╣ `yield` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+FastAPI рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ run рд╣реЛ рддрд╛рдХрд┐ рдпрд╣ event loop рдХреЛ block рди рдХрд░реЗред
+
+рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ function async рдирд╣реАрдВ рд╣реИ, рд╕рд╣реА return type `Iterable[Item]` рд╣реЛрдЧрд╛:
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[28:31] hl[29] *}
+
+### рдХреЛрдИ Return Type рдирд╣реАрдВ { #no-return-type }
+
+рдЖрдк return type рдХреЛ рдЫреЛрдбрд╝ рднреА рд╕рдХрддреЗ рд╣реИрдВред FastAPI data рдХреЛ convert рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП [`jsonable_encoder`](./encoder.md) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[34:37] hl[35] *}
+
+## `ServerSentEvent` { #serversentevent }
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ `event`, `id`, `retry`, рдпрд╛ `comment` рдЬреИрд╕реЗ SSE fields set рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рддреЛ рдЖрдк plain data рдХреЗ рдмрдЬрд╛рдп `ServerSentEvent` objects yield рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+`ServerSentEvent` рдХреЛ `fastapi.sse` рд╕реЗ import рдХрд░реЗрдВ:
+
+{* ../../docs_src/server_sent_events/tutorial002_py310.py hl[4,26] *}
+
+`data` field рд╣рдореЗрд╢рд╛ JSON рдХреЗ рд░реВрдк рдореЗрдВ encode рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдХреЛрдИ рднреА value pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ JSON рдХреЗ рд░реВрдк рдореЗрдВ serialize рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ Pydantic models рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
+
+## Raw Data { #raw-data }
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ JSON encoding рдХреЗ **рдмрд┐рдирд╛** data рднреЗрдЬрдирд╛ рд╣реИ, рддреЛ `data` рдХреЗ рдмрдЬрд╛рдп `raw_data` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+
+рдпрд╣ pre-formatted text, log lines, рдпрд╛ `[DONE]` рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ <dfn title="рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ condition рдпрд╛ state рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ value">"sentinel"</dfn> values рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
+
+{* ../../docs_src/server_sent_events/tutorial003_py310.py hl[17] *}
+
+/// note | рдиреЛрдЯ
+
+`data` рдФрд░ `raw_data` mutually exclusive рд╣реИрдВред рдЖрдк рд╣рд░ `ServerSentEvent` рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+## `Last-Event-ID` рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ { #resuming-with-last-event-id }
+
+рдЬрдм рдХреЛрдИ browser connection drop рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж reconnect рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЕрдВрддрд┐рдо рдкреНрд░рд╛рдкреНрдд `id` рдХреЛ `Last-Event-ID` header рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред
+
+рдЖрдк рдЗрд╕реЗ header parameter рдХреЗ рд░реВрдк рдореЗрдВ read рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ stream рдХреЛ рд╡рд╣рд╛рдБ рд╕реЗ resume рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ client рдиреЗ рдЫреЛрдбрд╝рд╛ рдерд╛:
+
+{* ../../docs_src/server_sent_events/tutorial004_py310.py hl[25,27,31] *}
+
+## POST рдХреЗ рд╕рд╛рде SSE { #sse-with-post }
+
+SSE **рдХрд┐рд╕реА рднреА HTTP method** рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ `GET` рдХреЗ рд╕рд╛рде рдирд╣реАрдВред
+
+рдпрд╣ [MCP](https://modelcontextprotocol.io) рдЬреИрд╕реЗ protocols рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреЛ `POST` рдкрд░ SSE stream рдХрд░рддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/server_sent_events/tutorial005_py310.py hl[14] *}
+
+## рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг { #technical-details }
+
+FastAPI рдХреБрдЫ SSE best practices рдХреЛ out of the box implement рдХрд░рддрд╛ рд╣реИред
+
+* рдЬрдм рдХреЛрдИ message рдирд╣реАрдВ рдЖрдпрд╛ рд╣реЛ, рддреЛ рд╣рд░ 15 рд╕реЗрдХрдВрдб рдореЗрдВ **"keep alive" `ping` comment** рднреЗрдЬреЗрдВ, рддрд╛рдХрд┐ рдХреБрдЫ proxies connection рдХреЛ close рди рдХрд░ рджреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ [HTML specification: Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes) рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
+* stream рдХреА **caching рд░реЛрдХрдиреЗ** рдХреЗ рд▓рд┐рдП `Cache-Control: no-cache` header set рдХрд░реЗрдВред
+* Nginx рдЬреИрд╕реЗ рдХреБрдЫ proxies рдореЗрдВ **buffering рд░реЛрдХрдиреЗ** рдХреЗ рд▓рд┐рдП рдПрдХ special header `X-Accel-Buffering: no` set рдХрд░реЗрдВред
+
+рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ out of the box рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред ЁЯдУ
--- /dev/null
+# SQL (Relational) рдбреЗрдЯрд╛рдмреЗрд╕ { #sql-relational-databases }
+
+**FastAPI** рдХреЗ рд▓рд┐рдП SQL (relational) рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ required рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк **рдХреЛрдИ рднреА рдбреЗрдЯрд╛рдмреЗрд╕** рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣реЗрдВред
+
+рдпрд╣рд╛рдБ рд╣рдо [SQLModel](https://sqlmodel.tiangolo.com/) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗред
+
+**SQLModel**, [SQLAlchemy](https://www.sqlalchemy.org/) рдФрд░ Pydantic рдХреЗ рдКрдкрд░ рдмрдирд╛ рд╣реИред рдЗрд╕реЗ **FastAPI** рдХреЗ рдЙрд╕реА рд▓реЗрдЦрдХ рдиреЗ рдмрдирд╛рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЙрди FastAPI applications рдХреЗ рд▓рд┐рдП perfect match рд╣реЛ рдЬрд┐рдиреНрд╣реЗрдВ **SQL databases** рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред
+
+/// tip | рдЯрд┐рдк
+
+рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рдХреЛрдИ рднреА рджреВрд╕рд░реА SQL рдпрд╛ NoSQL рдбреЗрдЯрд╛рдмреЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрдиреНрд╣реЗрдВ <abbr title="Object Relational Mapper - рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд▓реЗрд╢рдирд▓ рдореИрдкрд░: рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ fancy рд╢рдмреНрдж рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ classes SQL tables рдХреЛ represent рдХрд░рддреА рд╣реИрдВ рдФрд░ instances рдЙрди tables рдореЗрдВ rows рдХреЛ represent рдХрд░рддреЗ рд╣реИрдВ">"ORMs"</abbr> рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ), FastAPI рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ред ЁЯШО
+
+///
+
+рдХреНрдпреЛрдВрдХрд┐ SQLModel, SQLAlchemy рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЖрдк SQLAlchemy рджреНрд╡рд╛рд░рд╛ **supported рдХреЛрдИ рднреА рдбреЗрдЯрд╛рдмреЗрд╕** рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рд╕рд╕реЗ рд╡реЗ SQLModel рджреНрд╡рд╛рд░рд╛ рднреА supported рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ), рдЬреИрд╕реЗ:
+
+* PostgreSQL
+* MySQL
+* SQLite
+* Oracle
+* Microsoft SQL Server, рдЖрджрд┐ред
+
+рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо **SQLite** рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ single file рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ Python рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП integrated support рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ copy рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬреИрд╕рд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реА run рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдмрд╛рдж рдореЗрдВ, рдЕрдкрдиреА production application рдХреЗ рд▓рд┐рдП, рдЖрдк **PostgreSQL** рдЬреИрд╕рд╛ database server рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// tip | рдЯрд┐рдк
+
+**FastAPI** рдФрд░ **PostgreSQL** рдХреЗ рд╕рд╛рде рдПрдХ official project generator рд╣реИ рдЬрд┐рд╕рдореЗрдВ frontend рдФрд░ рдЕрдзрд┐рдХ tools рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: [https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template)
+
+///
+
+рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рдЫреЛрдЯрд╛ tutorial рд╣реИ, рдЕрдЧрд░ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ databases, SQL, рдпрд╛ рдЕрдзрд┐рдХ advanced features рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ [SQLModel docs](https://sqlmodel.tiangolo.com/) рдкрд░ рдЬрд╛рдПрдБред
+
+## `SQLModel` install рдХрд░реЗрдВ { #install-sqlmodel }
+
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ [virtual environment](../virtual-environments.md) рдмрдирд╛рдПрдБ, рдЙрд╕реЗ activate рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ `sqlmodel` install рдХрд░реЗрдВ:
+
+<div class="termy">
+
+```console
+$ pip install sqlmodel
+---> 100%
+```
+
+</div>
+
+## Single Model рдХреЗ рд╕рд╛рде App рдмрдирд╛рдПрдБ { #create-the-app-with-a-single-model }
+
+рд╣рдо рдкрд╣рд▓реЗ рдПрдХ single **SQLModel** model рдХреЗ рд╕рд╛рде app рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд╣рд▓рд╛ version рдмрдирд╛рдПрдБрдЧреЗред
+
+рдмрд╛рдж рдореЗрдВ рд╣рдо рдиреАрдЪреЗ **multiple models** рдХреЗ рд╕рд╛рде security рдФрд░ versatility рдмрдврд╝рд╛рддреЗ рд╣реБрдП рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдПрдБрдЧреЗред ЁЯдУ
+
+### Models рдмрдирд╛рдПрдБ { #create-models }
+
+`SQLModel` import рдХрд░реЗрдВ рдФрд░ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ model рдмрдирд╛рдПрдБ:
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[1:11] hl[7:11] *}
+
+`Hero` class рдПрдХ Pydantic model рд╕реЗ рдмрд╣реБрдд рдорд┐рд▓рддреА-рдЬреБрд▓рддреА рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдВрджрд░ рд╕реЗ, рдпрд╣ рд╕рдЪ рдореЗрдВ *рдПрдХ Pydantic model рд╣реА рд╣реИ*)ред
+
+рдХреБрдЫ рдЕрдВрддрд░ рд╣реИрдВ:
+
+* `table=True` SQLModel рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ *table model* рд╣реИ, рдЗрд╕реЗ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ **table** рдХреЛ represent рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ *data model* рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдИ рднреА рджреВрд╕рд░реА regular Pydantic class рд╣реЛрддреА)ред
+
+* `Field(primary_key=True)` SQLModel рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ `id` SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ **primary key** рд╣реИ (рдЖрдк SQL primary keys рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ SQLModel docs рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ)ред
+
+ **рдзреНрдпрд╛рди рджреЗрдВ:** рд╣рдо primary key field рдХреЗ рд▓рд┐рдП `int | None` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ Python code рдореЗрдВ рд╣рдо *рдмрд┐рдирд╛ `id` рдХреЗ object рдмрдирд╛ рд╕рдХреЗрдВ* (`id=None`), рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ *save рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ generate рдХрд░реЗрдЧрд╛*ред SQLModel рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ `id` provide рдХрд░реЗрдЧрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ schema рдореЗрдВ *column рдХреЛ non-null `INTEGER` рдХреЗ рд░реВрдк рдореЗрдВ define рдХрд░рддрд╛ рд╣реИ*ред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП [primary keys рдкрд░ SQLModel docs](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id) рджреЗрдЦреЗрдВред
+
+* `Field(index=True)` SQLModel рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЗрд╕ column рдХреЗ рд▓рд┐рдП рдПрдХ **SQL index** рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ рдЗрд╕ column рджреНрд╡рд╛рд░рд╛ filtered data рдкрдврд╝рддреЗ рд╕рдордп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддреЗрдЬрд╝ lookups рд╣реЛ рд╕рдХреЗрдВред
+
+ SQLModel рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ `str` рдХреЗ рд░реВрдк рдореЗрдВ declared рдХреЛрдИ рдЪреАрдЬрд╝ `TEXT` type рдХрд╛ SQL column рд╣реЛрдЧреА (рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ `VARCHAR`)ред
+
+### Engine рдмрдирд╛рдПрдБ { #create-an-engine }
+
+SQLModel `engine` (рдЕрдВрджрд░ рд╕реЗ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ SQLAlchemy `engine` рд╣реИ) рд╡рд╣ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ **connections рдХреЛ hold** рдХрд░рддрд╛ рд╣реИред
+
+рдЖрдкрдХреЗ рд╕рднреА code рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ connect рдХрд░рдиреЗ рд╣реЗрддреБ **рдПрдХ single `engine` object** рд╣реЛрдЧрд╛ред
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[14:18] hl[14:15,17:18] *}
+
+`check_same_thread=False` рдХрд╛ рдЙрдкрдпреЛрдЧ FastAPI рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ threads рдореЗрдВ рд╡рд╣реА SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдпрд╣ necessary рд╣реИ рдХреНрдпреЛрдВрдХрд┐ **рдПрдХ single request** **рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ thread** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП dependencies рдореЗрдВ)ред
+
+рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, code рдЬрд┐рд╕ рддрд░рд╣ structured рд╣реИ, рдЙрд╕рд╕реЗ рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╣рдо **рдкреНрд░рддрд┐ request рдПрдХ single SQLModel *session*** рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ `check_same_thread` рдпрд╣реА рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
+
+### Tables рдмрдирд╛рдПрдБ { #create-the-tables }
+
+рдлрд┐рд░ рд╣рдо рдПрдХ function рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА *table models* рдХреЗ рд▓рд┐рдП **tables рдмрдирд╛рдиреЗ** рд╣реЗрддреБ `SQLModel.metadata.create_all(engine)` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[21:22] hl[21:22] *}
+
+### Session Dependency рдмрдирд╛рдПрдБ { #create-a-session-dependency }
+
+**`Session`** рд╡рд╣ рд╣реИ рдЬреЛ **objects рдХреЛ memory рдореЗрдВ store** рдХрд░рддрд╛ рд╣реИ рдФрд░ data рдореЗрдВ required рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХрд╛ track рд░рдЦрддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ communicate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **`engine` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ**ред
+
+рд╣рдо `yield` рдХреЗ рд╕рд╛рде рдПрдХ FastAPI **dependency** рдмрдирд╛рдПрдБрдЧреЗ рдЬреЛ рд╣рд░ request рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ `Session` provide рдХрд░реЗрдЧреАред рдпрд╣реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддрд┐ request рдПрдХ single session рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред ЁЯдУ
+
+рдлрд┐рд░ рд╣рдо рдЗрд╕ dependency рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдХреА code рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ `Annotated` dependency `SessionDep` рдмрдирд╛рддреЗ рд╣реИрдВред
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[25:30] hl[25:27,30] *}
+
+### Startup рдкрд░ Database Tables рдмрдирд╛рдПрдБ { #create-database-tables-on-startup }
+
+рд╣рдо application рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ database tables рдмрдирд╛рдПрдБрдЧреЗред
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[32:37] hl[35:37] *}
+
+рдпрд╣рд╛рдБ рд╣рдо application startup event рдкрд░ tables рдмрдирд╛рддреЗ рд╣реИрдВред
+
+production рдХреЗ рд▓рд┐рдП рдЖрдк рд╢рд╛рдпрдж рдПрдХ migration script рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХрд╛ app рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ run рд╣реЛрддреА рд╣реИред ЁЯдУ
+
+/// tip | рдЯрд┐рдк
+
+SQLModel рдореЗрдВ Alembic рдХреЛ wrap рдХрд░рдиреЗ рд╡рд╛рд▓реА migration utilities рд╣реЛрдВрдЧреА, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реАрдзреЗ [Alembic](https://alembic.sqlalchemy.org/en/latest/) рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+### Hero рдмрдирд╛рдПрдБ { #create-a-hero }
+
+рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ SQLModel model рдПрдХ Pydantic model рднреА рд╣реИ, рдЖрдк рдЗрд╕реЗ рдЙрд╕реА **type annotations** рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЖрдк Pydantic models рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк `Hero` type рдХрд╛ parameter declare рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ **JSON body** рд╕реЗ read рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+рдЙрд╕реА рддрд░рд╣, рдЖрдк рдЗрд╕реЗ function рдХреЗ **return type** рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ data рдХрд╛ shape automatic API docs UI рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[40:45] hl[40:45] *}
+
+рдпрд╣рд╛рдБ рд╣рдо `SessionDep` dependency (рдПрдХ `Session`) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдП `Hero` рдХреЛ `Session` instance рдореЗрдВ add рдХрд░рддреЗ рд╣реИрдВ, changes рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ commit рдХрд░рддреЗ рд╣реИрдВ, `hero` рдореЗрдВ data refresh рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ return рдХрд░рддреЗ рд╣реИрдВред
+
+### Heroes рдкрдврд╝реЗрдВ { #read-heroes }
+
+рд╣рдо `select()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ `Hero`s **read** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред results рдХреЛ paginate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо `limit` рдФрд░ `offset` include рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[48:55] hl[51:52,54] *}
+
+### рдПрдХ Hero рдкрдврд╝реЗрдВ { #read-one-hero }
+
+рд╣рдо рдПрдХ single `Hero` **read** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[58:63] hl[60] *}
+
+### Hero Delete рдХрд░реЗрдВ { #delete-a-hero }
+
+рд╣рдо рдПрдХ `Hero` рдХреЛ **delete** рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[66:73] hl[71] *}
+
+### App Run рдХрд░реЗрдВ { #run-the-app }
+
+рдЖрдк app run рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<div class="termy">
+
+```console
+$ fastapi dev
+
+<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+рдлрд┐рд░ `/docs` UI рдкрд░ рдЬрд╛рдПрдБ, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ **FastAPI** API рдХреЛ **document** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди **models** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ data рдХреЛ **serialize** рдФрд░ **validate** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
+
+<div class="screenshot">
+<img src="/img/tutorial/sql-databases/image01.png">
+</div>
+
+## Multiple Models рдХреЗ рд╕рд╛рде App Update рдХрд░реЗрдВ { #update-the-app-with-multiple-models }
+
+рдЕрдм рдЖрдЗрдП **security** рдФрд░ **versatility** рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ app рдХреЛ рдереЛрдбрд╝рд╛ **refactor** рдХрд░реЗрдВред
+
+рдЕрдЧрд░ рдЖрдк previous app рджреЗрдЦреЗрдВ, рддреЛ UI рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрднреА рддрдХ рдпрд╣ client рдХреЛ рдмрдирдиреЗ рд╡рд╛рд▓реЗ `Hero` рдХрд╛ `id` рддрдп рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред ЁЯШ▒
+
+рд╣рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡реЗ DB рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ assigned рдХрд┐рд╕реА `id` рдХреЛ overwrite рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред `id` рддрдп рдХрд░рдирд╛ **backend** рдпрд╛ **database** рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, **client рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ**ред
+
+рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо hero рдХреЗ рд▓рд┐рдП `secret_name` рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рддрдХ, рд╣рдо рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ return рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд **secret** рдирд╣реАрдВ рд╣реИ... ЁЯШЕ
+
+рд╣рдо рдХреБрдЫ **extra models** рдЬреЛрдбрд╝рдХрд░ рдЗрди рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗред рдпрд╣реАрдВ SQLModel рдЪрдордХреЗрдЧрд╛ред тЬи
+
+### Multiple Models рдмрдирд╛рдПрдБ { #create-multiple-models }
+
+**SQLModel** рдореЗрдВ, рдХреЛрдИ рднреА model class рдЬрд┐рд╕рдореЗрдВ `table=True` рд╣реИ, рдПрдХ **table model** рд╣реИред
+
+рдФрд░ рдХреЛрдИ рднреА model class рдЬрд┐рд╕рдореЗрдВ `table=True` рдирд╣реАрдВ рд╣реИ, рдПрдХ **data model** рд╣реИ, рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл Pydantic models рд╣реИрдВ (рдХреБрдЫ рдЫреЛрдЯреЗ extra features рдХреЗ рд╕рд╛рде)ред ЁЯдУ
+
+SQLModel рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рднреА fields рдХреЛ **duplicate рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ** рдХреЗ рд▓рд┐рдП **inheritance** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+#### `HeroBase` - base class { #herobase-the-base-class }
+
+рдЖрдЗрдП рдПрдХ `HeroBase` model рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА models рджреНрд╡рд╛рд░рд╛ **shared fields** рд╣реЛрдВ:
+
+* `name`
+* `age`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:9] hl[7:9] *}
+
+#### `Hero` - *table model* { #hero-the-table-model }
+
+рдлрд┐рд░ рдЖрдЗрдП `Hero` рдмрдирд╛рдПрдБ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ *table model*, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ **extra fields** рд╣реЛрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ рджреВрд╕рд░реЗ models рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреЗ:
+
+* `id`
+* `secret_name`
+
+рдХреНрдпреЛрдВрдХрд┐ `Hero`, `HeroBase` рд╕реЗ inherit рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ `HeroBase` рдореЗрдВ declared **fields** рднреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП `Hero` рдХреЗ рд▓рд┐рдП рд╕рднреА fields рд╣реИрдВ:
+
+* `id`
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:14] hl[12:14] *}
+
+#### `HeroPublic` - public *data model* { #heropublic-the-public-data-model }
+
+рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ `HeroPublic` model рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╣реА рд╡рд╣ рд╣реИ рдЬреЛ API рдХреЗ clients рдХреЛ **return** рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+рдЗрд╕рдореЗрдВ `HeroBase` рдЬреИрд╕реЗ рд╣реА fields рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ `secret_name` рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
+
+рдЖрдЦрд╝рд┐рд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ heroes рдХреА identity protected рд╣реИ! ЁЯе╖
+
+рдпрд╣ `id: int` рдХреЛ рдлрд┐рд░ рд╕реЗ declare рднреА рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдХреЗ, рд╣рдо API clients рдХреЗ рд╕рд╛рде рдПрдХ **contract** рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╡реЗ рд╣рдореЗрд╢рд╛ expect рдХрд░ рд╕рдХреЗрдВ рдХрд┐ `id` рдореМрдЬреВрдж рд╣реЛрдЧрд╛ рдФрд░ `int` рд╣реЛрдЧрд╛ (рдпрд╣ рдХрднреА `None` рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред
+
+/// tip | рдЯрд┐рдк
+
+return model рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╡рд╛рдирд╛ рдХрд┐ рдХреЛрдИ value рд╣рдореЗрд╢рд╛ available рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ `int` рд╣реИ (`None` рдирд╣реАрдВ), API clients рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рд╡реЗ рдЗрд╕ certainty рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд░рд▓ code рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
+
+рд╕рд╛рде рд╣реА, **automatically generated clients** рдореЗрдВ рд╕рд░рд▓ interfaces рд╣реЛрдВрдЧреЗ, рддрд╛рдХрд┐ рдЖрдкрдХреА API рд╕реЗ communicate рдХрд░рдиреЗ рд╡рд╛рд▓реЗ developers рдЖрдкрдХреА API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдЕрдиреБрднрд╡ рдкрд╛ рд╕рдХреЗрдВред ЁЯШО
+
+///
+
+`HeroPublic` рдореЗрдВ рд╕рднреА fields `HeroBase` рдЬреИрд╕реЗ рд╣реА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ `id` рдХреЛ `int` (`None` рдирд╣реАрдВ) рдХреЗ рд░реВрдк рдореЗрдВ declared рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
+
+* `id`
+* `name`
+* `age`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:18] hl[17:18] *}
+
+#### `HeroCreate` - hero рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП *data model* { #herocreate-the-data-model-to-create-a-hero }
+
+рдЕрдм рд╣рдо рдПрдХ `HeroCreate` model рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╣реА рд╡рд╣ рд╣реИ рдЬреЛ clients рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ data рдХреЛ **validate** рдХрд░реЗрдЧрд╛ред
+
+рдЗрд╕рдореЗрдВ `HeroBase` рдЬреИрд╕реЗ рд╣реА fields рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ `secret_name` рднреА рд╣реИред
+
+рдЕрдм, рдЬрдм clients **рдПрдХ рдирдпрд╛ hero create** рдХрд░реЗрдВрдЧреЗ, рд╡реЗ `secret_name` рднреЗрдЬреЗрдВрдЧреЗ, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ store рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡реЗ secret names API рдореЗрдВ clients рдХреЛ return рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдПрдБрдЧреЗред
+
+/// tip | рдЯрд┐рдк
+
+рдЖрдк **passwords** рдХреЛ рдРрд╕реЗ handle рдХрд░реЗрдВрдЧреЗред рдЙрдиреНрд╣реЗрдВ receive рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди API рдореЗрдВ return рди рдХрд░реЗрдВред
+
+рдЖрдк passwords рдХреА values рдХреЛ store рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ **hash** рднреА рдХрд░реЗрдВрдЧреЗ, **рдЙрдиреНрд╣реЗрдВ plain text рдореЗрдВ рдХрднреА store рди рдХрд░реЗрдВ**ред
+
+///
+
+`HeroCreate` рдХреЗ fields рд╣реИрдВ:
+
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:22] hl[21:22] *}
+
+#### `HeroUpdate` - hero update рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП *data model* { #heroupdate-the-data-model-to-update-a-hero }
+
+app рдХреЗ previous version рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ **hero update рдХрд░рдиреЗ** рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм **multiple models** рдХреЗ рд╕рд╛рде, рд╣рдо рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ЁЯОЙ
+
+`HeroUpdate` *data model* рдереЛрдбрд╝рд╛ special рд╣реИ, рдЗрд╕рдореЗрдВ **рд╡реЗ рд╕рднреА same fields** рд╣реИрдВ рдЬрд┐рдирдХреА рдПрдХ рдирдпрд╛ hero create рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░рдд рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕рднреА fields **optional** рд╣реИрдВ (рдЙрди рд╕рднреА рдХреА default value рд╣реИ)ред рдЗрд╕ рддрд░рд╣, рдЬрдм рдЖрдк hero update рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд┐рд░реНрдл рд╡реЗ fields рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк update рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
+
+рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА **fields рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ change рд╣реЛрддреЗ рд╣реИрдВ** (type рдореЗрдВ рдЕрдм `None` рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЕрдм рдЙрдирдХреА default value `None` рд╣реИ), рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ **re-declare** рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
+
+рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ `HeroBase` рд╕реЗ inherit рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рднреА fields рдХреЛ re-declare рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ consistency рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ inherit рдХрд░рддрд╛ рд╣реБрдЖ рдЫреЛрдбрд╝реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ necessary рдирд╣реАрдВ рд╣реИред рдпрд╣ personal taste рдХрд╛ рдорд╛рдорд▓рд╛ рдЕрдзрд┐рдХ рд╣реИред ЁЯд╖
+
+`HeroUpdate` рдХреЗ fields рд╣реИрдВ:
+
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:28] hl[25:28] *}
+
+### `HeroCreate` рдХреЗ рд╕рд╛рде create рдХрд░реЗрдВ рдФрд░ `HeroPublic` return рдХрд░реЗрдВ { #create-with-herocreate-and-return-a-heropublic }
+
+рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ **multiple models** рд╣реИрдВ, рд╣рдо app рдХреЗ рдЙрди parts рдХреЛ update рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
+
+рд╣рдо request рдореЗрдВ рдПрдХ `HeroCreate` *data model* receive рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рд╕реЗ, рд╣рдо рдПрдХ `Hero` *table model* рдмрдирд╛рддреЗ рд╣реИрдВред
+
+рдЗрд╕ рдирдП *table model* `Hero` рдореЗрдВ client рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП fields рд╣реЛрдВрдЧреЗ, рдФрд░ рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ generated рдПрдХ `id` рднреА рд╣реЛрдЧрд╛ред
+
+рдлрд┐рд░ рд╣рдо рдЙрд╕реА *table model* `Hero` рдХреЛ function рд╕реЗ рдЬреИрд╕рд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реА return рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рд╣рдо `response_model` рдХреЛ `HeroPublic` *data model* рдХреЗ рд╕рд╛рде declare рдХрд░рддреЗ рд╣реИрдВ, **FastAPI** data рдХреЛ validate рдФрд░ serialize рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `HeroPublic` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[56:62] hl[56:58] *}
+
+/// tip | рдЯрд┐рдк
+
+рдЕрдм рд╣рдо **return type annotation** `-> HeroPublic` рдХреЗ рдмрдЬрд╛рдп `response_model=HeroPublic` рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЬреЛ value рд╣рдо return рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ `HeroPublic` *рдирд╣реАрдВ* рд╣реИред
+
+рдЕрдЧрд░ рд╣рдордиреЗ `-> HeroPublic` declare рдХрд┐рдпрд╛ рд╣реЛрддрд╛, рддреЛ рдЖрдкрдХрд╛ editor рдФрд░ linter complain рдХрд░рддреЗ (рдФрд░ рд╕рд╣реА рдХрд░рддреЗ) рдХрд┐ рдЖрдк `HeroPublic` рдХреЗ рдмрдЬрд╛рдп `Hero` return рдХрд░ рд░рд╣реЗ рд╣реИрдВред
+
+рдЗрд╕реЗ `response_model` рдореЗрдВ declare рдХрд░рдХреЗ рд╣рдо **FastAPI** рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдмрд┐рдирд╛ type annotations рдФрд░ рдЖрдкрдХреЗ editor рд╡ рдЕрдиреНрдп tools рд╕реЗ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА help рдореЗрдВ interfere рдХрд┐рдПред
+
+///
+
+### `HeroPublic` рдХреЗ рд╕рд╛рде Heroes рдкрдврд╝реЗрдВ { #read-heroes-with-heropublic }
+
+рд╣рдо `Hero`s рдХреЛ **read** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗ, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `response_model=list[HeroPublic]` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ data рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ validate рдФрд░ serialize рд╣реЛред
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[65:72] hl[65] *}
+
+### `HeroPublic` рдХреЗ рд╕рд╛рде рдПрдХ Hero рдкрдврд╝реЗрдВ { #read-one-hero-with-heropublic }
+
+рд╣рдо рдПрдХ single hero **read** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[75:80] hl[77] *}
+
+### `HeroUpdate` рдХреЗ рд╕рд╛рде Hero Update рдХрд░реЗрдВ { #update-a-hero-with-heroupdate }
+
+рд╣рдо **hero update** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо HTTP `PATCH` operation рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред
+
+рдФрд░ code рдореЗрдВ, рд╣рдореЗрдВ client рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рд╕рднреА data рдХреЗ рд╕рд╛рде рдПрдХ `dict` рдорд┐рд▓рддрд╛ рд╣реИ, **рд╕рд┐рд░реНрдл client рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЧрдпрд╛ data**, рдЙрди рдХрд┐рд╕реА рднреА values рдХреЛ exclude рдХрд░рддреЗ рд╣реБрдП рдЬреЛ рд╕рд┐рд░реНрдл default values рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╡рд╣рд╛рдБ рд╣реЛрддреАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо `exclude_unset=True` рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА main trick рд╣реИред ЁЯкД
+
+рдлрд┐рд░ рд╣рдо `hero_data` рдХреЗ data рдХреЗ рд╕рд╛рде `hero_db` рдХреЛ update рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `hero_db.sqlmodel_update(hero_data)` рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[83:93] hl[83:84,88:89] *}
+
+### рдлрд┐рд░ рд╕реЗ Hero Delete рдХрд░реЗрдВ { #delete-a-hero-again }
+
+hero рдХреЛ **delete рдХрд░рдирд╛** рд▓рдЧрднрдЧ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рд░рд╣рддрд╛ рд╣реИред
+
+рд╣рдо рдЗрд╕рдореЗрдВ рд╕рдм рдХреБрдЫ refactor рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдкреВрд░реА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред ЁЯШЕ
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[96:103] hl[101] *}
+
+### App рдлрд┐рд░ рд╕реЗ Run рдХрд░реЗрдВ { #run-the-app-again }
+
+рдЖрдк app рдлрд┐рд░ рд╕реЗ run рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+<div class="termy">
+
+```console
+$ fastapi dev
+
+<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+рдЕрдЧрд░ рдЖрдк `/docs` API UI рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдЕрдм updated рд╣реИ, рдФрд░ hero create рдХрд░рддреЗ рд╕рдордп рдпрд╣ client рд╕реЗ `id` receive рдХрд░рдиреЗ рдХреА expect рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЖрджрд┐ред
+
+<div class="screenshot">
+<img src="/img/tutorial/sql-databases/image02.png">
+</div>
+
+## Recap { #recap }
+
+рдЖрдк SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде interact рдХрд░рдиреЗ рдФрд░ code рдХреЛ *data models* рдФрд░ *table models* рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП [**SQLModel**](https://sqlmodel.tiangolo.com/) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+рдЖрдк **SQLModel** docs рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдФрд░ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдБ **FastAPI** рдХреЗ рд╕рд╛рде SQLModel рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдкрд░ рдПрдХ рд▓рдВрдмрд╛ mini [tutorial](https://sqlmodel.tiangolo.com/tutorial/fastapi/) рд╣реИред ЁЯЪА
--- /dev/null
+# Static Files { #static-files }
+
+рдЖрдк `StaticFiles` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА directory рд╕реЗ static files рдХреЛ рдЕрдкрдиреЗ-рдЖрдк serve рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд░ рдЖрдкрдХреЛ frontend host рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп `app.frontend()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ [Frontend](frontend.md) рдореЗрдВ рдкрдврд╝реЗрдВред
+
+`app.frontend()` рдЕрдВрджрд░реВрдиреА рддреМрд░ рдкрд░ `StaticFiles` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ frontends рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╛рдпрджреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ client-side routing рдХреЛ handle рдХрд░рдирд╛ред
+
+///
+
+## `StaticFiles` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-staticfiles }
+
+* `StaticFiles` import рдХрд░реЗрдВред
+* рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ path рдореЗрдВ `StaticFiles()` instance рдХреЛ "Mount" рдХрд░реЗрдВред
+
+{* ../../docs_src/static_files/tutorial001_py310.py hl[2,6] *}
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЖрдк `from starlette.staticfiles import StaticFiles` рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЖрдкрдХреА, developer рдХреА, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╣реА `starlette.staticfiles` `fastapi.staticfiles` рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддрд╛ рд╣реИред
+
+///
+
+### "Mounting" рдХреНрдпрд╛ рд╣реИ { #what-is-mounting }
+
+"Mounting" рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ path рдореЗрдВ рдПрдХ рдкреВрд░реА "independent" application рдЬреЛрдбрд╝рдирд╛, рдЬреЛ рдлрд┐рд░ рд╕рднреА sub-paths рдХреЛ handle рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред
+
+рдпрд╣ `APIRouter` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ mounted application рдкреВрд░реА рддрд░рд╣ independent рд╣реЛрддреА рд╣реИред рдЖрдкрдХреА main application рдХреА OpenAPI рдФрд░ docs рдореЗрдВ mounted application рд╕реЗ рдХреБрдЫ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЖрджрд┐ред
+
+рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ [Advanced User Guide](../advanced/index.md) рдореЗрдВ рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
+
+## рд╡рд┐рд╡рд░рдг { #details }
+
+рдкрд╣рд▓рд╛ `"/static"` рдЙрд╕ sub-path рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдпрд╣ "sub-application" "mount" рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕рд▓рд┐рдП, `"/static"` рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА path рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ handle рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+
+`directory="static"` рдЙрд╕ directory рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА static files рд╣реЛрддреА рд╣реИрдВред
+
+`name="static"` рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ **FastAPI** рджреНрд╡рд╛рд░рд╛ internally рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+
+рдпреЗ рд╕рднреА parameters "`static`" рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрдиреНрд╣реЗрдВ рдЕрдкрдиреА application рдХреА рдЬрд░реВрд░рддреЛрдВ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ adjust рдХрд░реЗрдВред
+
+## рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА { #more-info }
+
+рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдФрд░ options рдХреЗ рд▓рд┐рдП [Static Files рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Starlette рдХреА docs](https://www.starlette.dev/staticfiles/) рджреЗрдЦреЗрдВред
--- /dev/null
+# JSON Lines рдХреЛ Stream рдХрд░реЗрдВ { #stream-json-lines }
+
+рдЖрдкрдХреЗ рдкрд╛рд╕ data рдХреА рдПрдХ sequence рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк "**stream**" рдореЗрдВ рднреЗрдЬрдирд╛ рдЪрд╛рд╣реЗрдВ, рдЖрдк рдЗрд╕реЗ **JSON Lines** рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+/// note | рдЯрд┐рдкреНрдкрдгреА
+
+FastAPI 0.134.0 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
+
+///
+
+## Stream рдХреНрдпрд╛ рд╣реИ? { #what-is-a-stream }
+
+"**Streaming**" data рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ app items рдХреА рдкреВрд░реА sequence рдХреЗ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ client рдХреЛ data items рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред
+
+рддреЛ, рдпрд╣ рдкрд╣рд▓рд╛ item рднреЗрдЬреЗрдЧрд╛, client рдЙрд╕реЗ receive рдХрд░рдХреЗ process рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдЖрдк рдЕрднреА рднреА рдЕрдЧрд▓рд╛ item produce рдХрд░ рд░рд╣реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
+
+```mermaid
+sequenceDiagram
+ participant App
+ participant Client
+
+ App->>App: Produce Item 1
+ App->>Client: Send Item 1
+ App->>App: Produce Item 2
+ Client->>Client: Process Item 1
+ App->>Client: Send Item 2
+ App->>App: Produce Item 3
+ Client->>Client: Process Item 2
+ App->>Client: Send Item 3
+ Client->>Client: Process Item 3
+ Note over App: Keeps producing...
+ Note over Client: Keeps consuming...
+```
+
+рдпрд╣ рдПрдХ infinite stream рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рд▓рдЧрд╛рддрд╛рд░ data рднреЗрдЬрддреЗ рд░рд╣рддреЗ рд╣реИрдВред
+
+## JSON Lines { #json-lines }
+
+рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, "**JSON Lines**" рднреЗрдЬрдирд╛ рдЖрдо рд╣реИ, рдЬреЛ рдПрдХ рдРрд╕рд╛ format рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рд╣рд░ line рдореЗрдВ рдПрдХ JSON object рднреЗрдЬрддреЗ рд╣реИрдВред
+
+рдПрдХ response рдХрд╛ content type `application/jsonl` рд╣реЛрдЧрд╛ (`application/json` рдХреЗ рдмрдЬрд╛рдп) рдФрд░ body рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧреА:
+
+```json
+{"name": "Plumbus", "description": "A multi-purpose household device."}
+{"name": "Portal Gun", "description": "A portal opening device."}
+{"name": "Meeseeks Box", "description": "A box that summons a Meeseeks."}
+```
+
+рдпрд╣ JSON array (Python list рдХреЗ equivalent) рд╕реЗ рдмрд╣реБрдд рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди `[]` рдореЗрдВ wrap рд╣реЛрдиреЗ рдФрд░ items рдХреЗ рдмреАрдЪ `,` рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕рдореЗрдВ **рд╣рд░ line рдореЗрдВ рдПрдХ JSON object** рд╣реЛрддрд╛ рд╣реИ, рд╡реЗ рдПрдХ new line character рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред
+
+/// note | рдЯрд┐рдкреНрдкрдгреА
+
+рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ app рд╣рд░ line рдХреЛ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ produce рдХрд░ рдкрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ client рдкрд┐рдЫрд▓реА lines рдХреЛ consume рдХрд░рддрд╛ рд░рд╣реЗрдЧрд╛ред
+
+///
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ JSON object рдПрдХ new line рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдЙрдирдХреЗ content рдореЗрдВ literal new line characters рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ escaped new lines (`\n`) рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬреЛ JSON standard рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
+
+рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдЧреЗ рдкрдврд╝рддреЗ рд░рд╣реЗрдВред ЁЯдУ
+
+///
+
+## рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ { #use-cases }
+
+рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ **AI LLM** service рд╕реЗ, **logs** рдпрд╛ **telemetry** рд╕реЗ, рдпрд╛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ data рд╕реЗ data stream рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ **JSON** items рдореЗрдВ structure рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдЕрдЧрд░ рдЖрдк binary data stream рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП video рдпрд╛ audio, рддреЛ advanced guide рджреЗрдЦреЗрдВ: [Data Stream рдХрд░реЗрдВ](../advanced/stream-data.md)ред
+
+///
+
+## FastAPI рдХреЗ рд╕рд╛рде JSON Lines Stream рдХрд░реЗрдВ { #stream-json-lines-with-fastapi }
+
+FastAPI рдХреЗ рд╕рд╛рде JSON Lines stream рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреА *path operation function* рдореЗрдВ `return` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рд░ item рдХреЛ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ produce рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `yield` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[24] *}
+
+рдЕрдЧрд░ рд╣рд░ JSON item рдЬрд┐рд╕реЗ рдЖрдк рд╡рд╛рдкрд╕ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, type `Item` (рдПрдХ Pydantic model) рдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ async function рд╣реИ, рддреЛ рдЖрдк return type рдХреЛ `AsyncIterable[Item]` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[9:11,22] *}
+
+рдЕрдЧрд░ рдЖрдк return type declare рдХрд░рддреЗ рд╣реИрдВ, рддреЛ FastAPI рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ data рдХреЛ **validate** рдХрд░рдиреЗ, OpenAPI рдореЗрдВ рдЗрд╕реЗ **document** рдХрд░рдиреЗ, рдЗрд╕реЗ **filter** рдХрд░рдиреЗ, рдФрд░ Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ **serialize** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ред
+
+/// tip | рд╕реБрдЭрд╛рд╡
+
+рдХреНрдпреЛрдВрдХрд┐ Pydantic рдЗрд╕реЗ **Rust** side рдореЗрдВ serialize рдХрд░реЗрдЧрд╛, рдЖрдкрдХреЛ return type declare рди рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ **performance** рдорд┐рд▓реЗрдЧреАред
+
+///
+
+### Non-async *path operation functions* { #non-async-path-operation-functions }
+
+рдЖрдк regular `def` functions (рдмрд┐рдирд╛ `async` рдХреЗ) рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕реА рддрд░рд╣ `yield` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+FastAPI рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓реЗ рддрд╛рдХрд┐ рдпрд╣ event loop рдХреЛ block рди рдХрд░реЗред
+
+рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ function async рдирд╣реАрдВ рд╣реИ, рд╕рд╣реА return type `Iterable[Item]` рд╣реЛрдЧрд╛:
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[27:30] hl[28] *}
+
+### рдХреЛрдИ Return Type рдирд╣реАрдВ { #no-return-type }
+
+рдЖрдк return type рдХреЛ omit рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред FastAPI рдлрд┐рд░ data рдХреЛ рдРрд╕реА рдЪреАрдЬрд╝ рдореЗрдВ convert рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [`jsonable_encoder`](./encoder.md) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ JSON рдореЗрдВ serialize рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ JSON Lines рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬреЗрдЧрд╛ред
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[33:36] hl[34] *}
+
+## Server-Sent Events (SSE) { #server-sent-events-sse }
+
+FastAPI рдореЗрдВ Server-Sent Events (SSE) рдХреЗ рд▓рд┐рдП рднреА first-class support рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╕рдорд╛рди рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреБрдЫ extra details рдХреЗ рд╕рд╛рдеред рдЖрдк рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ chapter рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ: [Server-Sent Events (SSE)](server-sent-events.md)ред ЁЯдУ
--- /dev/null
+# Testing { #testing }
+
+[Starlette](https://www.starlette.dev/testclient/) рдХреА рдмрджреМрд▓рдд, **FastAPI** applications рдХреА testing рдЖрд╕рд╛рди рдФрд░ рдЖрдирдВрджрджрд╛рдпрдХ рд╣реИред
+
+рдпрд╣ [HTTPX](https://www.python-httpx.org) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ Requests рдХреЗ рдЖрдзрд╛рд░ рдкрд░ design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рдФрд░ intuitive рд╣реИред
+
+рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк **FastAPI** рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ [pytest](https://docs.pytest.org/) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+## `TestClient` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-testclient }
+
+/// note | рдиреЛрдЯ
+
+`TestClient` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ [`httpx`](https://www.python-httpx.org) install рдХрд░реЗрдВред
+
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ [virtual environment](../virtual-environments.md) рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ activate рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ install рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+```console
+$ pip install httpx
+```
+
+///
+
+`TestClient` import рдХрд░реЗрдВред
+
+рдЕрдкрдиреА **FastAPI** application рдХреЛ рдЗрд╕рдореЗрдВ pass рдХрд░рдХреЗ рдПрдХ `TestClient` рдмрдирд╛рдПрдБред
+
+рдРрд╕реА functions рдмрдирд╛рдПрдБ рдЬрд┐рдирдХрд╛ рдирд╛рдо `test_` рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реЛ (рдпрд╣ рдПрдХ standard `pytest` convention рд╣реИ)ред
+
+`TestClient` object рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рддрд░рд╣ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдЖрдк `httpx` рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред
+
+рдЬрд┐рди рдЪреАрдЬрд╝реЛрдВ рдХреА рдЖрдкрдХреЛ рдЬрд╛рдБрдЪ рдХрд░рдиреА рд╣реИ рдЙрдирдХреЗ рд▓рд┐рдП standard Python expressions рдХреЗ рд╕рд╛рде рд╕рд░рд▓ `assert` statements рд▓рд┐рдЦреЗрдВ (рдлрд┐рд░ рд╕реЗ, standard `pytest`)ред
+
+{* ../../docs_src/app_testing/tutorial001_py310.py hl[2,12,15:18] *}
+
+/// tip | рдЯрд┐рдк
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ testing functions рд╕рд╛рдорд╛рдиреНрдп `def` рд╣реИрдВ, `async def` рдирд╣реАрдВред
+
+рдФрд░ client рдХреЛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА calls рднреА рд╕рд╛рдорд╛рдиреНрдп calls рд╣реИрдВ, `await` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреАрдВред
+
+рдпрд╣ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЗ рд╕реАрдзреЗ `pytest` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
+
+///
+
+/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
+
+рдЖрдк `from starlette.testclient import TestClient` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+**FastAPI** рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, developer рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрд╕реА `starlette.testclient` рдХреЛ `fastapi.testclient` рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдзреЗ Starlette рд╕реЗ рдЖрддрд╛ рд╣реИред
+
+///
+
+/// tip | рдЯрд┐рдк
+
+рдЕрдЧрд░ рдЖрдк рдЕрдкрдиреА FastAPI application рдХреЛ requests рднреЗрдЬрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдкрдиреЗ tests рдореЗрдВ `async` functions call рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ asynchronous database functions), рддреЛ advanced tutorial рдореЗрдВ [Async Tests](../advanced/async-tests.md) рджреЗрдЦреЗрдВред
+
+///
+
+## Tests рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ { #separating-tests }
+
+рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ application рдореЗрдВ, рдЖрдкрдХреЗ tests рд╢рд╛рдпрдж рдХрд┐рд╕реА рдЕрд▓рдЧ file рдореЗрдВ рд╣реЛрдВрдЧреЗред
+
+рдФрд░ рдЖрдкрдХреА **FastAPI** application рднреА рдХрдИ files/modules рдЖрджрд┐ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдиреА рд╣реЛ рд╕рдХрддреА рд╣реИред
+
+### **FastAPI** app file { #fastapi-app-file }
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ [Bigger Applications](bigger-applications.md) рдореЗрдВ рдмрддрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдПрдХ file structure рд╣реИ:
+
+```
+.
+тФЬтФАтФА app
+тФВ┬а┬а тФЬтФАтФА __init__.py
+тФВ┬а┬а тФФтФАтФА main.py
+```
+
+`main.py` file рдореЗрдВ рдЖрдкрдХреА **FastAPI** app рд╣реИ:
+
+
+{* ../../docs_src/app_testing/app_a_py310/main.py *}
+
+### Testing file { #testing-file }
+
+рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ tests рдХреЗ рд╕рд╛рде рдПрдХ file `test_main.py` рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЙрд╕реА Python package рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╡рд╣реА directory рдЬрд┐рд╕рдореЗрдВ `__init__.py` file рд╣реИ):
+
+``` hl_lines="5"
+.
+тФЬтФАтФА app
+тФВ┬а┬а тФЬтФАтФА __init__.py
+тФВ┬а┬а тФЬтФАтФА main.py
+тФВ┬а┬а тФФтФАтФА test_main.py
+```
+
+рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ file рдЙрд╕реА package рдореЗрдВ рд╣реИ, рдЖрдк `main` module (`main.py`) рд╕реЗ object `app` рдХреЛ import рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП relative imports рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/app_testing/app_a_py310/test_main.py hl[3] *}
+
+
+...рдФрд░ tests рдХреЗ рд▓рд┐рдП code рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
+
+## Testing: рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдг { #testing-extended-example }
+
+рдЕрдм рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА testing рдХреИрд╕реЗ рдХрд░рдиреА рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
+
+### рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд **FastAPI** app file { #extended-fastapi-app-file }
+
+рдЖрдЗрдП рдкрд╣рд▓реЗ рдЬреИрд╕реА рд╣реА file structure рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦреЗрдВ:
+
+```
+.
+тФЬтФАтФА app
+тФВ┬а┬а тФЬтФАтФА __init__.py
+тФВ┬а┬а тФЬтФАтФА main.py
+тФВ┬а┬а тФФтФАтФА test_main.py
+```
+
+рдорд╛рди рд▓реАрдЬрд┐рдП рдЕрдм рдЖрдкрдХреА **FastAPI** app рд╡рд╛рд▓реА file `main.py` рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп **path operations** рд╣реИрдВред
+
+рдЗрд╕рдореЗрдВ рдПрдХ `GET` operation рд╣реИ рдЬреЛ error return рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+
+рдЗрд╕рдореЗрдВ рдПрдХ `POST` operation рд╣реИ рдЬреЛ рдХрдИ errors return рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+
+рджреЛрдиреЛрдВ *path operations* рдХреЛ `X-Token` header required рд╣реИред
+
+{* ../../docs_src/app_testing/app_b_an_py310/main.py *}
+
+### рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд testing file { #extended-testing-file }
+
+рдлрд┐рд░ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд tests рдХреЗ рд╕рд╛рде `test_main.py` рдХреЛ update рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+
+{* ../../docs_src/app_testing/app_b_an_py310/test_main.py *}
+
+
+рдЬрдм рднреА рдЖрдкрдХреЛ client рд╕реЗ request рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА pass рдХрд░рд╡рд╛рдиреА рд╣реЛ рдФрд░ рдЖрдкрдХреЛ рдкрддрд╛ рди рд╣реЛ рдХрд┐ рдХреИрд╕реЗ, рддреЛ рдЖрдк рдЦреЛрдЬ (Google) рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ `httpx` рдореЗрдВ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╛ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ `requests` рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ HTTPX рдХрд╛ design Requests рдХреЗ design рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
+
+рдлрд┐рд░ рдЖрдк рдЕрдкрдиреЗ tests рдореЗрдВ рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВред
+
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+* *path* рдпрд╛ *query* parameter pass рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ URL рдореЗрдВ рд╣реА рдЬреЛрдбрд╝реЗрдВред
+* JSON body pass рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `json` parameter рдореЗрдВ рдПрдХ Python object (рдЬреИрд╕реЗ `dict`) pass рдХрд░реЗрдВред
+* рдЕрдЧрд░ рдЖрдкрдХреЛ JSON рдХреЗ рдмрдЬрд╛рдп *Form Data* рднреЗрдЬрдирд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп `data` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+* *headers* pass рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `headers` parameter рдореЗрдВ рдПрдХ `dict` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+* *cookies* рдХреЗ рд▓рд┐рдП, `cookies` parameter рдореЗрдВ рдПрдХ `dict`ред
+
+backend рдХреЛ data рдХреИрд╕реЗ pass рдХрд░реЗрдВ (`httpx` рдпрд╛ `TestClient` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП [HTTPX documentation](https://www.python-httpx.org) рджреЗрдЦреЗрдВред
+
+/// note | рдиреЛрдЯ
+
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ `TestClient` рдРрд╕рд╛ data receive рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ JSON рдореЗрдВ convert рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, Pydantic models рдирд╣реАрдВред
+
+рдЕрдЧрд░ рдЖрдкрдХреЗ test рдореЗрдВ рдПрдХ Pydantic model рд╣реИ рдФрд░ рдЖрдк testing рдХреЗ рджреМрд░рд╛рди рдЙрд╕рдХрд╛ data application рдХреЛ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк [JSON Compatible Encoder](encoder.md) рдореЗрдВ рдмрддрд╛рдП рдЧрдП `jsonable_encoder` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+///
+
+## рдЗрд╕реЗ рдЪрд▓рд╛рдПрдБ { #run-it }
+
+рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдмрд╕ `pytest` install рдХрд░рдирд╛ рд╣реИред
+
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ [virtual environment](../virtual-environments.md) рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ activate рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ install рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
+
+<div class="termy">
+
+```console
+$ pip install pytest
+
+---> 100%
+```
+
+</div>
+
+рдпрд╣ files рдФрд░ tests рдХреЛ automatically detect рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ execute рдХрд░реЗрдЧрд╛, рдФрд░ results рдЖрдкрдХреЛ рд╡рд╛рдкрд╕ report рдХрд░реЗрдЧрд╛ред
+
+Tests рдЪрд▓рд╛рдПрдБ:
+
+<div class="termy">
+
+```console
+$ pytest
+
+================ test session starts ================
+platform linux -- Python 3.6.9, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
+rootdir: /home/user/code/superawesome-cli/app
+plugins: forked-1.1.3, xdist-1.31.0, cov-2.8.1
+collected 6 items
+
+---> 100%
+
+test_main.py <span style="color: green; white-space: pre;">...... [100%]</span>
+
+<span style="color: green;">================= 1 passed in 0.03s =================</span>
+```
+
+</div>