FastAPI
FastAPI ๐ ๏ธ, โ ๐ญ, โฉ ๐ก, โฉ ๐, ๐ ๐ญ
๐งพ: https://fastapi.tiangolo.com
โน ๐: https://github.com/tiangolo/fastapi
FastAPI ๐, โฉ (โ-๐ญ), ๐ธ ๐ ๏ธ ๐ ๐ ๏ธ โฎ๏ธ ๐ 3๏ธโฃ.7๏ธโฃ โ โ๏ธ ๐ ๐ฉ ๐ ๐ ๐.
๐ โ:
- โฉ: ๐ถ โ ๐ญ, ๐ ๐ท๐ช โฎ๏ธ โณ & ๐ถ (๐ ๐ & Pydantic). 1๏ธโฃ โฉ ๐ ๐ ๏ธ ๐ช.
- โฉ ๐: ๐ ๐ ๐ ๏ธ โ ๐ 2๏ธโฃ0๏ธโฃ0๏ธโฃ ๐ฏ 3๏ธโฃ0๏ธโฃ0๏ธโฃ ๐ฏ. *
- ๐ฉโโคโ๐จ ๐: ๐ ๐ 4๏ธโฃ0๏ธโฃ ๐ฏ ๐ฟ (๐ฉโ๐ป) ๐ โ. *
- ๐๏ธ: ๐ ๐จโ๐จ ๐โ๐ฆบ. ๐ ๏ธ ๐. ๐ ๐ฐ ๐ ๏ธ.
- โฉ: ๐ง โฉ โ๏ธ & ๐ก. ๐ ๐ฐ ๐ ๐ฉบ.
- ๐: ๐ ๐ โ. ๐ โ โช๏ธโก๏ธ ๐ ๐ข ๐. ๐ฉโโคโ๐จ ๐.
- ๐๏ธ: ๐ค ๐ญ-๐ ๐. โฎ๏ธ ๐ง ๐ ๐งพ.
- ๐ฉ-โ๏ธ: โ๏ธ ๐ (& ๐ ๐ โฎ๏ธ) ๐ ๐ฉ ๐: ๐ (โช ๐ญ ๐ฆ) & ๐ป ๐.
* โ โ๏ธ ๐ ๐ฏ ๐ ๐ ๐ ๏ธ ๐, ๐ ๐ญ ๐ธ.
๐ฐ¶
๐ค¶
"[...] ๐ค โ๏ธ FastAPI ๐ ๐ซ ๐. [...] ๐ค ๐ค ๐ โ๏ธ โซ๏ธ ๐ ๐ ๐ โ ๐โ๐ฆบ ๐คธโโ. ๐ซ ๐โโ ๐ ๏ธ ๐ ๐ ๐ฅ ๐ฌ & ๐ ๐ฌ."
"๐ฅ ๐ ๏ธ FastAPI ๐ ๐ค ๐ ๐ฝ ๐ ๐ช ๐ข ๐ ๐ฎ. [๐จ๐]"
"๐บ ๐ ๐ฃ ๐-โน ๐ ๐ โ ๐งพ ๐ถ ๐ ๏ธ: ๐จโ [๐ โฎ๏ธ FastAPI]"
"๐ค ๐คญ ๐ ๐ ๐ FastAPI. โซ๏ธ ๐ โ"
"๐ค, โซ๏ธโ ๐ โ๏ธ ๐ ๐ ๐ ๐ & ๐ต๐ฑ. ๐ ๐, โซ๏ธ โซ๏ธโ ๐ค ๐ ๐ค - โซ๏ธ ๐ค ๐ ๐ ๐ฑ ๐ ๐."
"๐ฅ ๐ ๐ ๐ก 1๏ธโฃ ๐ ๐ ๏ธ ๐ ๐ ๐, โ ๐ FastAPI [...] โซ๏ธ โฉ, โฉ โ๏ธ & โฉ ๐ก [...]"
"๐ฅ โ๏ธ ๐ ๐คญ FastAPI ๐ ๐ [...] ๐ค ๐ญ ๐ ๐ ๐ โซ๏ธ [...]"
"๐ฅ ๐ ๐ ๐ ๐ญ ๐ ๐ ๏ธ, ๐ค ๐ ๐ ๐ FastAPI. โซ๏ธ ๐ ๐, ๐ โ๏ธ & ๐ ๐ ๏ธ, โซ๏ธ โ๏ธ โถ๏ธ๏ธ ๐ ๐ฆฒ ๐ ๐ ๏ธ ๐ฅ ๐ ๏ธ ๐ & ๐ ๐ ๐ง & ๐โ๐ฆบ โ ๐ ๐น ๐ซ ๐จโ๐ป."
๐, FastAPI ๐ณ๐จ¶
๐ฅ ๐ ๐ โณ ๐ฑ โ๏ธ ๐ถ โฉ๏ธ ๐ธ ๐ ๏ธ, โ ๐ ๐.
๐ FastAPI ๐ฅ ๐ช. & โซ๏ธ ๐ฏ FastAPI ๐ณ๐จ. ๐ถ ๐ถ ๐ถ
๐¶
๐ 3๏ธโฃ.7๏ธโฃ โ
FastAPI ๐ง ๐ โ ๐:
๐ทโโ¶
$ pip install fastapi
---> 100%
๐ ๐ ๐ช ๐ซ ๐ฝ, ๐ญ โ Uvicorn โ๏ธ Hypercorn.
$ pip install "uvicorn[standard]"
---> 100%
๐ผ¶
โ โซ๏ธ¶
- โ ๐
main.py
โฎ๏ธ:
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
โ๏ธ โ๏ธ async def
...
๐ฅ ๐ ๐ โ๏ธ async
/ await
, โ๏ธ async def
:
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
๐:
๐ฅ ๐ ๐ซ ๐ญ, โ
_"๐ โ" _ ๐ ๐ async
& await
๐ฉบ.
๐ โซ๏ธ¶
๐ ๐ฝ โฎ๏ธ:
$ uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.
๐ ๐ uvicorn main:app --reload
...
๐ uvicorn main:app
๐:
main
: ๐main.py
(๐ "๐น").app
: ๐ โ ๐main.py
โฎ๏ธ โธapp = FastAPI()
.--reload
: โ ๐ฝ โ โฎ๏ธ ๐ ๐. ๐ด ๐ ๐ ๏ธ.
โ โซ๏ธ¶
๐ ๐ ๐ฅ http://127.0.0.1:8000/items/5?q=somequery.
๐ ๐ ๐ ๐ป ๐จ:
{"item_id": 5, "q": "somequery"}
๐ โช โ ๐ ๏ธ ๐:
- ๐จ ๐บ๐ธ๐ ๐จ โก
/
&/items/{item_id}
. - ๐ฏโโ๏ธ โก โ
GET
๐ ๏ธ (๐ญ ๐บ๐ธ๐ ๐ฉโ๐ฌ). - โก
/items/{item_id}
โ๏ธ โก ๐ขitem_id
๐ ๐int
. - โก
/items/{item_id}
โ๏ธ ๐ฆstr
_๐ข =q
.
๐ ๐ ๏ธ ๐ฉบ¶
๐ ๐ถ http://127.0.0.1:8000/docs.
๐ ๐ ๐ ๐ง ๐ ๐ ๏ธ ๐งพ (๐ ๐ฆ ๐):
๐ ๐ ๏ธ ๐ฉบ¶
& ๐, ๐ถ http://127.0.0.1:8000/redoc.
๐ ๐ ๐ ๐ ๐ง ๐งพ (๐ ๐):
๐ผ โป¶
๐ ๐ ๐ main.py
๐จ ๐ช โช๏ธโก๏ธ PUT
๐จ.
๐ฃ ๐ช โ๏ธ ๐ฉ ๐ ๐, ๐ Pydantic.
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
๐ฝ ๐ ๐ ๐ (โฉ๏ธ ๐ ๐ฎ --reload
uvicorn
๐ ๐).
๐ ๐ ๏ธ ๐ฉบ โป¶
๐ ๐ถ http://127.0.0.1:8000/docs.
- ๐ ๐ ๏ธ ๐งพ ๐ ๐ โน, ๐ ๐ ๐ช:
- ๐ ๐ ๐ผ "๐ โซ๏ธ ๐ ", โซ๏ธ โ ๐ ๐ฅง ๐ข & ๐ ๐ โฎ๏ธ ๐ ๏ธ:
- โคด๏ธ ๐ ๐ "๐ ๏ธ" ๐ผ, ๐ฉโ๐ป ๐ข ๐ ๐ โฎ๏ธ ๐ ๐ ๏ธ, ๐จ ๐ข, ๐ค ๐ & ๐ฆ ๐ซ ๐ ๐ฅ:
๐ ๐ ๏ธ ๐ฉบ โป¶
& ๐, ๐ถ http://127.0.0.1:8000/redoc.
- ๐ ๐งพ ๐ ๐จ ๐ ๐ข ๐ข & ๐ช:
๐¶
๐, ๐ ๐ฃ ๐ ๐ ๐ข, ๐ช, โ๏ธ. ๐ข ๐ข.
๐ ๐ โฎ๏ธ ๐ฉ ๐ ๐ ๐.
๐ ๐ซ โ๏ธ ๐ก ๐ โ, ๐ฉโ๐ฌ โ๏ธ ๐ ๐ฏ ๐, โ๏ธ.
๐ฉ ๐ 3๏ธโฃ.7๏ธโฃ โ.
๐ผ, int
:
item_id: int
โ๏ธ ๐ ๐ Item
๐ท:
item: Item
...& โฎ๏ธ ๐ ๐ ๐ ๐ ๐ค:
- ๐จโ๐จ ๐โ๐ฆบ, ๐:
- ๐ ๏ธ.
- ๐ โ .
- ๐ฌ ๐ฝ:
- ๐ง & ๐ โ ๐โ ๐ โ.
- ๐ฌ ๐ ๐ฆ ๐ป ๐.
- ๐ ๏ธ ๐ข ๐ฝ: ๐ โช๏ธโก๏ธ ๐ธ ๐ ๐ฝ & ๐. ๐ โช๏ธโก๏ธ:
- ๐ป.
- โก ๐ข.
- ๐ข ๐ข.
- ๐ช.
- ๐.
- ๐จ.
- ๐.
- ๐ ๏ธ ๐ข ๐: ๐ โช๏ธโก๏ธ ๐ ๐ฝ & ๐ ๐ธ ๐ฝ (๐ป):
- ๐ ๐ ๐ (
str
,int
,float
,bool
,list
, โ๏ธ). datetime
๐.UUID
๐.- ๐ฝ ๐ท.
- ...& ๐ ๐.
- ๐ ๐ ๐ (
- ๐ง ๐ ๐ ๏ธ ๐งพ, ๐ 2๏ธโฃ ๐ ๐ฉโ๐ป ๐ข:
- ๐ฆ ๐.
- ๐.
๐ ๐ โฎ๏ธ ๐ ๐ผ, FastAPI ๐:
- โ ๐ ๐ค
item_id
โกGET
&PUT
๐จ. - โ ๐
item_id
๐int
GET
&PUT
๐จ.- ๐ฅ โซ๏ธ ๐ซ, ๐ฉโ๐ป ๐ ๐ โ , ๐ โ.
- โ
๐ฅ ๐ค ๐ฆ ๐ข ๐ข ๐
q
(http://127.0.0.1:8000/items/foo?q=somequery
)GET
๐จ.q
๐ข ๐ฃ โฎ๏ธ= None
, โซ๏ธ ๐ฆ.- ๐ต
None
โซ๏ธ ๐ ๐ (๐ช ๐ผ โฎ๏ธPUT
).
PUT
๐จ/items/{item_id}
, โ ๐ช ๐ป:- โ
๐ โซ๏ธ โ๏ธ โ ๐ข
name
๐ ๐str
. - โ
๐ โซ๏ธ โ๏ธ โ ๐ข
price
๐ โ๏ธfloat
. - โ
๐ โซ๏ธ โ๏ธ ๐ฆ ๐ข
is_offer
, ๐ ๐bool
, ๐ฅ ๐. - ๐ ๐ ๐ ๐ท ๐ ๐ฆ ๐ป ๐.
- โ
๐ โซ๏ธ โ๏ธ โ ๐ข
- ๐ โช๏ธโก๏ธ & ๐ป ๐.
- ๐ ๐ โฎ๏ธ ๐, ๐ ๐ช โ๏ธ:
- ๐ ๐งพ โ๏ธ.
- ๐ง ๐ฉโ๐ป ๐ โก โ๏ธ, ๐ ๐ช๐ธ.
- ๐ 2๏ธโฃ ๐ ๐งพ ๐ธ ๐ข ๐.
๐ฅ ๐ ๐งฝ, โ๏ธ ๐ โช ๐ค ๐ญ โ โซ๏ธ ๐ ๐ท.
๐ ๐ โธ โฎ๏ธ:
return {"item_name": item.name, "item_id": item_id}
...โช๏ธโก๏ธ:
... "item_name": item.name ...
...:
... "item_price": item.price ...
...& ๐ โ ๐ ๐จโ๐จ ๐ ๐-๐ ๐ข & ๐ญ ๐ซ ๐:
๐ ๐ ๐ผ ๐ ๐ โ, ๐ ๐ฐ - ๐ฉโ๐ป ๐ฆฎ.
๐ ๐จ: ๐ฐ - ๐ฉโ๐ป ๐ฆฎ ๐:
- ๐ ๐ข โช๏ธโก๏ธ ๐ ๐ ๐ฅ: ๐, ๐ช, ๐จ ๐ & ๐.
- โ โ ๐ฌ โ
maximum_length
โ๏ธregex
. - ๐ถ ๐๏ธ & โฉ โ๏ธ ๐ ๐ โ๏ธ.
- ๐โโ & ๐ค, โ ๐โ๐ฆบ Oauth2๏ธโฃ โฎ๏ธ ๐ฅ ๐ค & ๐บ๐ธ๐ ๐ฐ ๐.
- ๐ ๐ง (โ๏ธ ๐จ โฉ) โ ๐ฃ ๐ ๐ฆ ๐ป ๐ท (๐ Pydantic).
- ๐น ๐ ๏ธ โฎ๏ธ ๐ & ๐ ๐.
- ๐ โ โ (๐ ๐):
- ** *๏ธโฃ **
- ๐ถ โฉ ๐ฏ โ๏ธ ๐ ๐ธ๐ฒ &
pytest
- โ
- ๐ช ๐
- ...& ๐.
๐ญ¶
๐ฌ ๐ธ๐ฒ ๐ ๐ฆ FastAPI ๐ธ ๐โโ ๐ฝ Uvicorn 1๏ธโฃ โฉ ๐ ๐ ๏ธ ๐ช, ๐ด ๐ ๐ & Uvicorn ๐ซ (โ๏ธ ๐ FastAPI). (*)
๐ค ๐ ๐ โซ๏ธ, ๐ ๐ ๐.
๐ฆ ๐¶
โ๏ธ Pydantic:
ujson
- โฉ ๐ป "๐ป".email_validator
- ๐ง ๐ฌ.
โ๏ธ ๐:
httpx
- โ ๐ฅ ๐ ๐ โ๏ธTestClient
.jinja2
- โ ๐ฅ ๐ ๐ โ๏ธ ๐ข ๐ ๐ณ.python-multipart
- โ ๐ฅ ๐ ๐ ๐โ๐ฆบ ๐จ "โ", โฎ๏ธrequest.form()
.itsdangerous
- โSessionMiddleware
๐โ๐ฆบ.pyyaml
- โ ๐SchemaGenerator
๐โ๐ฆบ (๐ ๐ฒ ๐ซ ๐ช โซ๏ธ โฎ๏ธ FastAPI).ujson
- โ ๐ฅ ๐ ๐ โ๏ธUJSONResponse
.
โ๏ธ FastAPI / ๐:
๐ ๐ช โ ๐ ๐ซ โฎ๏ธ pip install "fastapi[all]"
.
๐¶
๐ ๐ ยฎ ๐ฝ โ ๐ฉ๐ช ๐.