--- /dev/null
+# ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°
+
+## ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° FastAPI
+
+**FastAPI** ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
+
+### ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΡΡΡ
ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ²
+
+* <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a> Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ API, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ <abbr title="ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ
, ΠΊΠ°ΠΊ HTTP-ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ: POST, GET, PUT, DELETE">ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ</abbr> <abbr title="ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΠΊΠ°ΠΊ: ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ, ΠΌΠ°ΡΡΡΡΡΡ, 'ΡΡΡΠΊΠΈ' ΠΈ Ρ.ΠΏ.">ΠΏΡΡΠΈ</abbr>, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠ΅Π»Π° Π·Π°ΠΏΡΠΎΡΠ°, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ Ρ.Π΄.
+
+
+* ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½ΡΡ
Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ <a href="https://json-schema.org/" class="external-link" target="_blank"><strong>JSON Schema</strong></a> (ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ OpenAPI ΡΠ°ΠΌΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° JSON Schema).
+* Π Π°Π·ΡΠ°Π±ΠΎΡΠ°Π½, ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡ ΡΡΠΈΡ
ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ², ΠΏΠΎΡΠ»Π΅ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡ
ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΡΠΎΡΠΊ, Π° Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΎΠΉ.
+* ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ **Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°** Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ·ΡΠΊΠ°Ρ
.
+
+### ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
+
+ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ API ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° OpenAPI, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, 2 ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
Π²ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
+
+* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank"><strong>Swagger UI</strong></a>, Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈ ΡΠ΅ΡΡΠΈΡΡΠ΅Ρ Π²Π°Ρ API ΠΏΡΡΠΌΠΎ ΠΈΠ· Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
+
+
+
+* ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ API Π² <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank"><strong>ReDoc</strong></a>.
+
+
+
+### Π’ΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Python
+
+ΠΡΠ΅ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ
**Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΡ
ΡΠΈΠΏΠΎΠ² Python 3.6** (Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Pydantic). ΠΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠ°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. Π’ΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Python.
+
+ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΠΆΠΈΡΡ Π·Π½Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² Π² Python (Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ FastAPI), Π²ΡΠ΄Π΅Π»ΠΈΡΠ΅ 2 ΠΌΠΈΠ½ΡΡΡ ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ: [ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² PythonΒΆ
+](python-types.md){.internal-link target=_blank}.
+
+ΠΡ ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ Python Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ ΡΠΈΠΏΠΎΠ²:
+
+```Python
+from datetime import date
+
+from pydantic import BaseModel
+
+# ΠΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ user_id Ρ ΡΠΈΠΏΠΎΠΌ `str`
+# ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ
+def main(user_id: str):
+ return user_id
+
+
+# ΠΠΎΠ΄Π΅Π»Ρ Pydantic
+class User(BaseModel):
+ id: int
+ name: str
+ joined: date
+```
+
+ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊ:
+
+```Python
+my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
+
+second_user_data = {
+ "id": 4,
+ "name": "Mary",
+ "joined": "2018-11-30",
+}
+
+my_second_user: User = User(**second_user_data)
+```
+
+!!! ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
+ `**second_user_data` ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ:
+
+ ΠΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠ»ΡΡΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠ²Π°ΡΡ `second_user_data`, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° "ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅", ΡΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ: `User(id=4, name="Mary", joined="2018-11-30")` .
+
+### ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠ² (IDE)
+
+ΠΠ΅ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π±ΡΠ» ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΠΈ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π²ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Ρ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠ² Π΅ΡΠ΅ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π½Π°ΠΈΠ»ΡΡΡΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°.
+
+Π ΠΎΠΏΡΠΎΡΠ΅ Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π±ΡΠ»ΠΎ Π²ΡΡΡΠ½Π΅Π½ΠΎ, <a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target="_blank">ΡΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠ², ΡΠ²Π»ΡΠ΅ΡΡΡ "Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅"</a>.
+
+ΠΡΡ ΡΡΡΡΠΊΡΡΡΠ° **FastAPI** ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠ²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π΅Π·Π΄Π΅.
+
+ΠΠ°ΠΌ ΡΠ΅Π΄ΠΊΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
+
+ΠΠΎΡ ΠΊΠ°ΠΊ Π²Π°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡΡ:
+
+* Π² <a href="https://code.visualstudio.com/" class="external-link" target="_blank">Visual Studio Code</a>:
+
+
+
+* Π² <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a>:
+
+
+
+ΠΡ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌ, Π³Π΄Π΅ Π²Ρ ΡΡΠΈΡΠ°Π»ΠΈ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΠ°Π½ΡΡΠ΅.
+ΠΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ»ΡΡ `price` Π²Π½ΡΡΡΠΈ ΡΠ΅Π»Π° JSON (ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌ), ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π² Π·Π°ΠΏΡΠΎΡΠ΅.
+
+ΠΠΎΠ»ΡΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ
ΠΈΠΌΡΠ½ ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΏΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΊΡΡΡΠΈΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π²Π²Π΅ΡΡ
ΠΈ Π²Π½ΠΈΠ·, Π² ΠΏΠΎΠΏΡΡΠΊΠ°Ρ
ΡΠ·Π½Π°ΡΡ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π²Ρ ΡΠ°Π½Π΅Π΅ `username` ΠΈΠ»ΠΈ `user_name`.
+
+### ΠΡΠ°ΡΠΊΠΎΡΡΡ
+FastAPI ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ **ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ** Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ, Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ Π²Π΅Π·Π΄Π΅. ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ½ΠΊΠΎ ΠΏΠΎΠ΄ΡΡΡΠΎΠ΅Π½Ρ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π΄Π΅Π»Π°ΡΡ ΡΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΉ Π²Π°ΠΌ API.
+
+ΠΠΎ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π²ΡΡ ΡΡΠΎ **"ΠΈ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ"**.
+
+### ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
+
+* ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° (ΠΈΠ»ΠΈ Π²ΡΠ΅Ρ
?) **ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
** Python, Π²ΠΊΠ»ΡΡΠ°Ρ:
+ * ΠΠ±ΡΠ΅ΠΊΡΡ JSON (`dict`).
+ * ΠΠ°ΡΡΠΈΠ²Ρ JSON (`list`) Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
+ * Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ (`str`) ΠΏΠΎΠ»Ρ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ.
+ * Π§ΠΈΡΠ»Π° (`int`, `float`) Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Ρ.ΠΏ.
+
+* ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΊΠ·ΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠΈΠΏΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ:
+ * URL.
+ * Email.
+ * UUID.
+ * ...ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
+
+ΠΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Ρ
ΠΎΡΠΎΡΠΎ Π·Π°ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π²ΡΠΈΠΌ ΡΠ΅Π±Ρ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ **Pydantic**.
+
+### ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
+
+ΠΡΡΡΠΎΠ΅Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠ΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠΎΠ² Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ Π΄Π°Π½Π½ΡΡ
.
+
+ΠΡΠ΅ ΡΡ
Π΅ΠΌΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ Π² OpenAPI, Π²ΠΊΠ»ΡΡΠ°Ρ:
+
+* HTTP Basic.
+* **OAuth2** (ΡΠ°ΠΊΠΆΠ΅ Ρ **ΡΠΎΠΊΠ΅Π½Π°ΠΌΠΈ JWT**). ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ [OAuth2 Ρ JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}.
+* ΠΠ»ΡΡΠΈ API Π²:
+ * ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ
.
+ * ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
Π·Π°ΠΏΡΠΎΡΠΎΠ².
+ * Cookies ΠΈ Ρ.ΠΏ.
+
+ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΎΡ Starlette (Π²ΠΊΠ»ΡΡΠ°Ρ **ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΠ΅ cookies**).
+
+ΠΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΡΡΡΡ Ρ Π²Π°ΡΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
, ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ NoSQL Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
ΠΈ Ρ. Π΄.
+
+### ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
+
+FastAPI Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΡΠΎΡΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π½ΠΎ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΌΠΎΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ <abbr title='ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΊΠ°ΠΊ: "components", "resources", "services", "providers"'><strong>ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ</strong></abbr>.
+
+* ΠΠ°ΠΆΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡ ΠΈΠ»ΠΈ **"Π³ΡΠ°ΡΡ" Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ**.
+* ΠΡΡ **Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ** ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ.
+* ΠΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ **Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΡΠΈ** ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ.
+* **ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°** Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² *ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΡΠΈ*, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ
.
+* ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, **ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
** ΠΈ Ρ.Π΄.
+* **ΠΠΈΠΊΠ°ΠΊΠΈΡ
ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠΎΠ²** Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ ΠΈ Ρ.Π΄. ΠΠΎ Π»Π΅Π³ΠΊΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π½ΠΈΠΌΠΈ.
+
+### ΠΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° "ΠΠ»Π°Π³ΠΈΠ½Ρ"
+
+ΠΠ»ΠΈ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π½Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Ρ Π½ΠΈΠΌΠΈ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π½ΡΠΆΠ½ΡΠΉ Π²Π°ΠΌ ΠΊΠΎΠ΄.
+
+ΠΡΠ±Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ (Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ), ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ "ΠΏΠ»Π°Π³ΠΈΠ½" Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠ°ΡΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡ ΠΆΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΡΡΠΎ ΠΈ Π΄Π»Ρ Π²Π°ΡΠΈΡ
*ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΡΠΈ*.
+
+### ΠΡΠΎΠ²Π΅ΡΠ΅Π½
+
+* 100% <abbr title="ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°">ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠ°ΠΌΠΈ</abbr>.
+* 100% <abbr title="ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² Python, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠΎΡΠΎΡΡΠΌ Π²Π°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²Π°ΠΌ Π»ΡΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ">Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²</abbr> Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅.
+* ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
.
+
+## ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Starlette
+
+**FastAPI** ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° <a href="https://www.starlette.io/" class="external-link" target="_blank"><strong>Starlette</strong></a> ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π½ΠΈΠΌ. Π’Π°ΠΊ ΡΡΠΎ, Π»ΡΠ±ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Starlette, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²Π°Ρ Π΅ΡΡΡ, Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
+
+ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, `FastAPI` - ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡ `Starlette`. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π·Π½Π°Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Starlette, Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅.
+
+Π‘ **FastAPI** Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ **Starlette** (ΡΠ°ΠΊ ΠΊΠ°ΠΊ FastAPI ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Starlette Π½Π° ΡΡΠ΅ΡΠΎΠΈΠ΄Π°Ρ
):
+
+* Π‘Π΅ΡΡΡΠ·Π½ΠΎ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠΎ <a href="https://github.com/encode/starlette#performance" class="external-link" target="_blank">ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
Π±ΡΡΡΡΡΡ
ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² Π½Π° Python</a>, Π½Π°ΡΠ°Π²Π½Π΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΌΠΈ **NodeJS** ΠΈΠ»ΠΈ **Go**.
+* ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° **WebSocket**.
+* Π€ΠΎΠ½ΠΎΠ²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
+* Π‘ΠΎΠ±ΡΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
+* Π’Π΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ `requests`.
+* **CORS**, GZip, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ.
+* ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° **ΡΠ΅ΡΡΠΈΠΉ ΠΈ cookie**.
+* 100% ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠ°ΠΌΠΈ.
+* 100% Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅.
+
+## ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Pydantic
+
+**FastAPI** ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° <a href="https://pydantic-docs.helpmanual.io" class="external-link" target="_blank"><strong>Pydantic</strong></a> ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π½ΠΈΠΌ. Π’Π°ΠΊ ΡΡΠΎ, Π»ΡΠ±ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Pydantic, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²Π°Ρ Π΅ΡΡΡ, Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
+
+ΠΠΊΠ»ΡΡΠ°Ρ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° Pydantic, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ: <abbr title="Object-Relational Mapper">ORM'Ρ</abbr>, <abbr title="Object-Document Mapper">ODM'Ρ</abbr> Π΄Π»Ρ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
.
+
+ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠ°, **Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
**, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
+
+Π Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
, **Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡ**.
+
+Π‘ **FastAPI** Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ **Pydantic** (ΡΠ°ΠΊ ΠΊΠ°ΠΊ, FastAPI ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Pydantic, Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ
):
+
+* **ΠΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π΅ΡΠ²ΠΎΡΡΡΠΏΠΊΠΈ** :
+ * ΠΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠ°ΡΡ Π½ΠΎΠ²ΡΡ
ΡΡ
Π΅ΠΌ Π² ΠΌΠΈΠΊΡΠΎΡΠ·ΡΠΊΠ°Ρ
.
+ * ΠΡΠ»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² Π² Python, Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Pydantic.
+* ΠΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΡΠΎΡΠ΅ΡΠ°Π΅ΡΡΡ Ρ Π²Π°ΡΠΈΠΌΠΈ **<abbr title="ΠΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΠΎΡ
ΠΎΠΆΠ΅Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ">IDE</abbr>/<abbr title="ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅">linter</abbr>/ΠΌΠΎΠ·Π³ΠΎΠΌ**:
+ * ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
pydantic - ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ
Π²Π°ΠΌΠΈ. ΠΠ²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ΄Π°, mypy ΠΈ Π²Π°ΡΠ° ΠΈΠ½ΡΡΠΈΡΠΈΡ - Π²ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π²Π°ΡΠΈΠΌΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
+* **ΠΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅**:
+ * Π <a href="https://pydantic-docs.helpmanual.io/benchmarks/" class="external-link" target="_blank">ΡΠ΅ΡΡΠΎΠ²ΡΡ
Π·Π°ΠΌΠ΅ΡΠ°Ρ
</a> Pydantic Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
+* ΠΡΠΎΠ²Π΅ΡΠΊΠ° **ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΡΡΡΠΊΡΡΡ**:
+ * ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Pydantic; `List`, `Dict` ΠΈ Ρ.ΠΏ. ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ `typing` (Π²Ρ
ΠΎΠ΄ΠΈΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Python).
+ * ΠΠ°Π»ΠΈΠ΄Π°ΡΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ΅ΡΠΊΠΎ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡ
Π΅ΠΌΡ Π΄Π°Π½Π½ΡΡ
Π² Π²ΠΈΠ΄Π΅ JSON Schema.
+ * Π£ Π²Π°Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π³Π»ΡΠ±ΠΎΠΊΠΎ **Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ JSON** ΠΈ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Ρ ΠΈ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ.
+* **Π Π°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ**:
+ * Pydantic ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ»ΠΈ ΡΠ°ΡΡΠΈΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΡΡ
Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ².
+* 100% ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠ°ΠΌΠΈ.