# โ
## FastAPI โ
**FastAPI** ๐ค ๐ ๐:
### โ๏ธ ๐ ๐ ๐ฉ
* ๐ ๐ ๏ธ ๐, โ
๐ โก ๐ ๏ธ, ๐ข, ๐ช ๐จ, ๐โโ, โ๏ธ.
* ๐ง ๐ ๐ท ๐งพ โฎ๏ธ ๐ป ๐ (๐ โซ๏ธ ๐งข ๐ ๐ป ๐).
* ๐ง ๐คญ ๐ซ ๐ฉ, โฎ๏ธ ๐ ๐ฌ. โฉ๏ธ ๐ ๐งฝ ๐ ๐.
* ๐ โ โ๏ธ ๐ง **๐ฉโ๐ป ๐ โก** ๐ ๐ช๐ธ.
### ๐ง ๐ฉบ
๐ ๐ ๏ธ ๐งพ & ๐ฌ ๐ธ ๐ฉโ๐ป ๐ข. ๐ ๏ธ โ๏ธ ๐ ๐, ๐ค ๐ ๐, 2๏ธโฃ ๐ ๐ข.
* ๐ฆ ๐, โฎ๏ธ ๐ ๐ฌ, ๐ค & ๐ฏ ๐ ๐ ๏ธ ๐ โช๏ธโก๏ธ ๐ฅ.

* ๐ ๐ ๏ธ ๐งพ โฎ๏ธ ๐.

### ๐ ๐
โซ๏ธ ๐ โ๏ธ ๐ ๐ฉ **๐ 3๏ธโฃ.6๏ธโฃ ๐** ๐ (๐ Pydantic). ๐
โโ ๐ โ ๐ก. ๐ฉ ๐ ๐.
๐ฅ ๐ ๐ช 2๏ธโฃ โฒ โ๏ธ โ โ๏ธ ๐ ๐ (๐ฅ ๐ ๐ซ โ๏ธ FastAPI), โ
๐ ๐ฐ: [๐ ๐](python-types.md){.internal-link target=_blank}.
๐ โ ๐ฉ ๐ โฎ๏ธ ๐:
```Python
from datetime import date
from pydantic import BaseModel
# Declare a variable as a str
# and get editor support inside the function
def main(user_id: str):
return user_id
# A Pydantic model
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)
```
/// info
`**second_user_data` โ:
๐ถโโ๏ธ ๐ & ๐ฒ `second_user_data` #๏ธโฃ ๐ ๐-๐ฒ โ, ๐: `User(id=4, name="Mary", joined="2018-11-30")`
///
### ๐จโ๐จ ๐โ๐ฆบ
๐ ๐ ๏ธ ๐ โฉ & ๐๏ธ โ๏ธ, ๐ ๐ซ ๐ฏ ๐ ๐ ๐จโ๐จ โญ โถ๏ธ ๐ ๏ธ, ๐ ๐ ๐ ๏ธ ๐ก.
๐ ๐ ๐ฉโ๐ป ๐ฌ โซ๏ธ ๐ ๐ ๐
โ๏ธ โ "โ".
๐ **FastAPI** ๐ ๏ธ โ๏ธ ๐ ๐. โ ๐ท ๐.
๐ ๐ ๐ ๐ช ๐ ๐ ๐ฉบ.
๐ฅ โ ๐ ๐จโ๐จ ๐ช โน ๐:
* ๐ ๐ ๐:

* ๐:

๐ ๐ ๐ค ๐ ๏ธ ๐ ๐ 5๏ธโฃ๐ ๐ค ๐ช โญ. ๐ผ, `price` ๐ ๐ ๐ป ๐ช (๐ ๐ช โ๏ธ ๐ฆ) ๐ ๐ โช๏ธโก๏ธ ๐จ.
๐
โโ ๐ โจ โ ๐ ๐, ๐ ๐ & โก ๐ ๐ฉบ, โ๏ธ ๐ ๐ & ๐ฝ ๐ ๐ฅ ๐ ๐ โ๏ธ `username` โ๏ธ `user_name`.
### ๐
โซ๏ธ โ๏ธ ๐ค **๐ข** ๐, โฎ๏ธ ๐ฆ ๐ณ ๐. ๐ ๐ข ๐ช ๐-๐ง โซ๏ธโ ๐ ๐ช & ๐ฌ ๐ ๏ธ ๐ ๐ช.
โ๏ธ ๐ข, โซ๏ธ ๐ **"๐ท"**.
### ๐ฌ
* ๐ฌ ๐
(โ๏ธ ๐ โ) ๐ **๐ฝ ๐**, ๐:
* ๐ป ๐ (`dict`).
* ๐ป ๐ป (`list`) โ ๐ฌ ๐.
* ๐ป (`str`) ๐, ๐ฌ ๐ & ๐ ๐.
* ๐ข (`int`, `float`) โฎ๏ธ ๐ & ๐ ๐ฒ, โ๏ธ.
* ๐ฌ ๐
๐ ๐, ๐:
* ๐.
* ๐ง.
* ๐.
* ...& ๐.
๐ ๐ฌ ๐ต ๐-๐ & ๐๏ธ **Pydantic**.
### ๐โโ & ๐ค
๐โโ & ๐ค ๐ ๏ธ. ๐ต ๐ โ โฎ๏ธ ๐ฝ โ๏ธ ๐ ๐ท.
๐ ๐โโ โ ๐ฌ ๐, ๐:
* ๐บ๐ธ๐ ๐ฐ.
* **Oauth2๏ธโฃ** (โฎ๏ธ **๐ฅ ๐ค**). โ
๐ฐ ๐ [Oauth2๏ธโฃ โฎ๏ธ ๐ฅ](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}.
* ๐ ๏ธ ๐:
* ๐.
* ๐ข ๐ข.
* ๐ช, โ๏ธ.
โ ๐ ๐โโ โ โช๏ธโก๏ธ ๐ (๐ **๐ ๐ช**).
๐ ๐ โป ๐งฐ & ๐ฆฒ ๐ โฉ ๐ ๏ธ โฎ๏ธ ๐ โ๏ธ, ๐ ๐ช, ๐ & โ ๐ฝ, โ๏ธ.
### ๐ ๐
FastAPI ๐ ๐ถ โฉ โ๏ธ, โ๏ธ ๐ถ ๐๏ธ ๐ ๐ โ๏ธ.
* ๐ ๐ช โ๏ธ ๐, ๐ ๐ โ๏ธ **"๐" ๐**.
* ๐ **๐ ๐ต** ๐ ๏ธ.
* ๐ ๐ ๐ช ๐ ๐ฝ โช๏ธโก๏ธ ๐จ & **โ โก ๐ ๏ธ** โ & ๐ง ๐งพ.
* **๐ง ๐ฌ** *โก ๐ ๏ธ* ๐ข ๐ฌ ๐.
* ๐โ๐ฆบ ๐ ๐ฉโ๐ป ๐ค โ๏ธ, **๐ฝ ๐**, โ๏ธ.
* **๐
โโ โ ** โฎ๏ธ ๐ฝ, ๐ธ, โ๏ธ. โ๏ธ โฉ ๐ ๏ธ โฎ๏ธ ๐ ๐ซ.
### โพ "๐-๐"
โ๏ธ ๐ ๐, ๐
โโ ๐ช ๐ซ, ๐ & โ๏ธ ๐ ๐ ๐ช.
๐ ๐ ๏ธ ๐ ๐
โ๏ธ (โฎ๏ธ ๐) ๐ ๐ ๐ช โ "๐-" ๐ ๐ธ 2๏ธโฃ โธ ๐ โ๏ธ ๐ ๐ & โ โ๏ธ ๐ *โก ๐ ๏ธ*.
### ๐ฏ
* 1๏ธโฃ0๏ธโฃ0๏ธโฃ ๐ฏ ๐ฏ ๐ฐ.
* 1๏ธโฃ0๏ธโฃ0๏ธโฃ ๐ฏ ๐ โ ๐ ๐งข.
* โ๏ธ ๐ญ ๐ธ.
## ๐ โ
**FastAPI** ๐ ๐ โฎ๏ธ (& โ๏ธ ๐) ๐. , ๐ ๐ ๐ ๐ ๐ โ๏ธ, ๐ ๐ท.
`FastAPI` ๐ค ๐ง-๐ `Starlette`. , ๐ฅ ๐ โช ๐ญ โ๏ธ โ๏ธ ๐, ๐
๐ ๏ธ ๐ ๐ท ๐ ๐.
โฎ๏ธ **FastAPI** ๐ ๐ค ๐ **๐**'โ โ (FastAPI ๐ ๐ ๐):
* ๐ค ๐ ๐ญ. โซ๏ธ 1๏ธโฃ โฉ ๐ ๐ ๏ธ ๐ช, ๐ ๐ท๐ช โฎ๏ธ **โณ** & **๐ถ**.
* ** *๏ธโฃ ** ๐โ๐ฆบ.
* -๐ ๏ธ ๐ฅ ๐.
* ๐ด & ๐คซ ๐.
* ๐ฏ ๐ฉโ๐ป ๐ ๐ ๐ธ๐ฒ.
* **โ**, ๐, ๐ป ๐, ๐ ๐จ.
* **๐ & ๐ช** ๐โ๐ฆบ.
* 1๏ธโฃ0๏ธโฃ0๏ธโฃ ๐ฏ ๐ฏ ๐ฐ.
* 1๏ธโฃ0๏ธโฃ0๏ธโฃ ๐ฏ ๐ โ โ.
## Pydantic โ
**FastAPI** ๐ ๐ โฎ๏ธ (& โ๏ธ ๐) Pydantic. , ๐ ๐ Pydantic ๐ ๐ โ๏ธ, ๐ ๐ท.
โ
๐ข ๐ โ๏ธ ๐ Pydantic, ๐โ, ๐ญโ ๐ฝ.
๐ โ ๐ ๐ ๐ผ ๐ ๐ช ๐ถโโ๏ธ ๐ ๐ ๐ ๐ค โช๏ธโก๏ธ ๐จ **๐ ๐ฝ**, ๐ โ ๐.
๐ โ ๐ ๐ ๐คญ, ๐ ๐ผ ๐ ๐ช ๐ถโโ๏ธ ๐ ๐ ๐ค โช๏ธโก๏ธ ๐ฝ **๐ ๐ฉโ๐ป**.
โฎ๏ธ **FastAPI** ๐ ๐ค ๐ **Pydantic**'โ โ (FastAPI โ๏ธ ๐ Pydantic ๐ ๐ฝ ๐):
* **๐
โโ ๐ **:
* ๐
โโ ๐ ๐ ๐ โพ-๐ช๐ธ ๐ก.
* ๐ฅ ๐ ๐ญ ๐ ๐ ๐ ๐ญ โ โ๏ธ Pydantic.
* ๐คพ ๐ โฎ๏ธ ๐ **๐พ/๐งถ/๐ง **:
* โฉ๏ธ Pydantic ๐ ๐ ๐ ๐ ๐ ๐ฌ; ๐-๐ ๏ธ, ๐งฝ, โ & ๐ ๐ค ๐ ๐ ๐ท โ โฎ๏ธ ๐ โ ๐ฝ.
* โ **๐ ๐**:
* โ๏ธ ๐ Pydantic ๐ท, ๐ `typing`'โ `List` & `Dict`, โ๏ธ.
* & ๐ณ โ ๐ ๐ฝ ๐ ๐ฏ & ๐ช ๐ฌ, โ
& ๐ ๐ป ๐.
* ๐ ๐ช โ๏ธ ๐ **๐ฆ ๐ป** ๐ & โ๏ธ ๐ซ ๐ โ & โ.
* **๐ง**:
* Pydantic โ ๐ ๐ ๐ ๐ฌ โ๏ธ ๐ ๐ช โ ๐ฌ โฎ๏ธ ๐ฉโ๐ฌ ๐ ๐ท ๐ โฎ๏ธ ๐ณ ๐จโ๐จ.
* 1๏ธโฃ0๏ธโฃ0๏ธโฃ ๐ฏ ๐ฏ ๐ฐ.