๐¶
FastAPI โ๏ธ ๐ถ ๐๏ธ โ๏ธ ๐๏ธ ๐ ๐ โ๏ธ.
โซ๏ธ ๐ ๐ถ ๐ โ๏ธ, & โ โซ๏ธ ๐ถ โฉ ๐ ๐ฉโ๐ป ๐ ๏ธ ๐ ๐ฆฒ โฎ๏ธ FastAPI.
โซ๏ธโ "๐ ๐"¶
"๐ ๐" โ, ๐, ๐ ๐ค ๐ ๐ ๐ (๐ ๐ผ, ๐ โก ๐ ๏ธ ๐ข) ๐ฃ ๐ ๐ โซ๏ธ ๐ ๐ท & โ๏ธ: "๐".
& โคด๏ธ, ๐ โ๏ธ (๐ ๐ผ FastAPI) ๐ โ ๐ ๐จ โซ๏ธโ ๐ช ๐ ๐ ๐ โฎ๏ธ ๐ ๐ช ๐ ("๐" ๐).
๐ ๐ถ โ ๐โ ๐ ๐ช:
- โ๏ธ ๐ฐ โ (๐ ๐ โ ๐ & ๐).
- ๐ฐ ๐ฝ ๐.
- ๐ ๏ธ ๐โโ, ๐ค, ๐ ๐, โ๏ธ.
- & ๐ ๐ ๐...
๐ ๐ซ, โช ๐ ๐ ๐.
๐ฅ ๐¶
โก๏ธ ๐ ๐ถ ๐ ๐ผ. โซ๏ธ ๐ ๐ ๐ โซ๏ธ ๐ซ ๐ถ โ , ๐.
โ๏ธ ๐ ๐ ๐ฅ ๐ช ๐ฏ ๐ โ ๐ ๐ โ๏ธ ๐ท.
โ ๐, โ๏ธ "โ"¶
โก๏ธ ๐ฅ ๐ฏ ๐ ๐.
โซ๏ธ ๐ข ๐ ๐ช โ ๐ ๐ ๐ข ๐ โก ๐ ๏ธ ๐ข ๐ช โ:
from typing import Union
from fastapi import Depends, FastAPI
app = FastAPI()
async def common_parameters(
q: Union[str, None] = None, skip: int = 0, limit: int = 100
):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
return commons
from fastapi import Depends, FastAPI
app = FastAPI()
async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
return commons
๐ โซ๏ธ.
2๏ธโฃ โธ.
& โซ๏ธ โ๏ธ ๐ ๐ & ๐ ๐ ๐ ๐ โก ๐ ๏ธ ๐ข โ๏ธ.
๐ ๐ช ๐ญ โซ๏ธ โก ๐ ๏ธ ๐ข ๐ต "๐จโ๐จ" (๐ต @app.get("/some-path")
).
& โซ๏ธ ๐ช ๐จ ๐ณ ๐ ๐.
๐ ๐ผ, ๐ ๐ โ:
- ๐ฆ ๐ข ๐ข
q
๐str
. - ๐ฆ ๐ข ๐ข
skip
๐int
, & ๐ข0
. - ๐ฆ ๐ข ๐ข
limit
๐int
, & ๐ข100
.
& โคด๏ธ โซ๏ธ ๐จ dict
โ ๐ ๐ฒ.
๐ Depends
¶
from typing import Union
from fastapi import Depends, FastAPI
app = FastAPI()
async def common_parameters(
q: Union[str, None] = None, skip: int = 0, limit: int = 100
):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
return commons
from fastapi import Depends, FastAPI
app = FastAPI()
async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
return commons
๐ฃ ๐, "โ๏ธ"¶
๐ ๐ ๐ โ๏ธ Body
, Query
, โ๏ธ. โฎ๏ธ ๐ โก ๐ ๏ธ ๐ข ๐ข, โ๏ธ Depends
โฎ๏ธ ๐ ๐ข:
from typing import Union
from fastapi import Depends, FastAPI
app = FastAPI()
async def common_parameters(
q: Union[str, None] = None, skip: int = 0, limit: int = 100
):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
return commons
from fastapi import Depends, FastAPI
app = FastAPI()
async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
return commons
๐ ๐ โ๏ธ Depends
๐ข ๐ ๐ข ๐ ๐ ๐ โ๏ธ Body
, Query
, โ๏ธ, Depends
๐ท ๐ ๐.
๐ ๐ด ๐ค Depends
๐ ๐ข.
๐ ๐ข ๐ ๐ณ ๐ ๐ข.
& ๐ ๐ข โ ๐ข ๐ ๐ ๐ โก ๐ ๏ธ ๐ข .
Tip
๐ ๐ ๐ โซ๏ธโ ๐ "๐", โ๏ธ โช๏ธโก๏ธ ๐ข, ๐ช โ๏ธ ๐ โญ ๐.
๐โ ๐ ๐จ ๐ฌ, FastAPI ๐ โ ๐ :
- ๐ค ๐ ๐ ("โ") ๐ข โฎ๏ธ โ ๐ข.
- ๐ค ๐ โช๏ธโก๏ธ ๐ ๐ข.
- ๐ ๏ธ ๐ ๐ ๐ข ๐ โก ๐ ๏ธ ๐ข.
graph TB
common_parameters(["common_parameters"])
read_items["/items/"]
read_users["/users/"]
common_parameters --> read_items
common_parameters --> read_users
๐ ๐ ๐ โ ๐ ๐ ๐ & FastAPI โ ๐ ๐ค โซ๏ธ ๐ โก ๐ ๏ธ.
Check
๐ ๐ ๐ ๐ซ โ๏ธ โ ๐ ๐ & ๐ถโโ๏ธ โซ๏ธ ๐ฑ FastAPI "ยฎ" โซ๏ธ โ๏ธ ๐ณ ๐.
๐ ๐ถโโ๏ธ โซ๏ธ Depends
& FastAPI ๐ญ โ ๐.
async
โ๏ธ ๐ซ async
¶
๐ ๐ ๐ค FastAPI (๐ ๐ โก ๐ ๏ธ ๐ข), ๐ ๐ซ โ โช ๐ฌ ๐ ๐ข.
๐ ๐ช โ๏ธ async def
โ๏ธ ๐ def
.
& ๐ ๐ช ๐ฃ ๐ โฎ๏ธ async def
๐ ๐ def
โก ๐ ๏ธ ๐ข, โ๏ธ def
๐ ๐ async def
โก ๐ ๏ธ ๐ข, โ๏ธ.
โซ๏ธ ๐ซ ๐ค. FastAPI ๐ ๐ญ โซ๏ธโ.
Note
๐ฅ ๐ ๐ซ ๐ญ, โ
๐: *"๐ โ" * ๐ ๐ async
& await
๐ฉบ.
๐ ๏ธ โฎ๏ธ ๐¶
๐ ๐จ ๐, ๐ฌ & ๐ ๐ ๐ (& ๐ง-๐) ๐ ๐ ๏ธ ๐ ๐ ๐.
, ๐ ๐ฉบ ๐ โ๏ธ ๐ โน โช๏ธโก๏ธ ๐ซ ๐ ๐โโ๏ธ:
๐ โ๏ธ¶
๐ฅ ๐ ๐ โซ๏ธ, โก ๐ ๏ธ ๐ข ๐ฃ โ๏ธ ๐โ โก & ๐ ๏ธ ๐, & โคด๏ธ FastAPI โ ๐ ๐ค ๐ข โฎ๏ธ โ ๐ข, โ ๐ โช๏ธโก๏ธ ๐จ.
๐ค, ๐ (โ๏ธ ๐) ๐ธ ๐ ๏ธ ๐ท ๐ ๐ ๐.
๐ ๐ ๐ค ๐ ๐ข ๐. ๐ซ ๐ค ๐ ๐ ๏ธ (๐ ๐ผ, FastAPI).
โฎ๏ธ ๐ ๐ โ๏ธ, ๐ ๐ช ๐ฌ FastAPI ๐ ๐ โก ๐ ๏ธ ๐ข "๐ช" ๐ ๐ณ ๐ ๐ ๐ ๐ ๏ธ โญ ๐ โก ๐ ๏ธ ๐ข, & FastAPI ๐ โ ๐ ๐ ๏ธ โซ๏ธ & "๐" ๐.
๐ โ โ ๐ ๐ ๐ญ "๐ ๐":
- โน
- ๐โ๐ฆบ
- ๐โ๐ฆบ
- ๐
- ๐ฆฒ
FastAPI ๐-๐¶
๐ ๏ธ & "๐-"โ ๐ช ๐ โ๏ธ ๐ ๐ โ๏ธ. โ๏ธ ๐, ๐ค ๐ค ๐ โโ ๐ช โ "๐-๐", โ๏ธ ๐ โซ๏ธ ๐ช ๐ฃ โพ ๐ข ๐ ๏ธ & ๐ ๐ โถ๏ธ๏ธ ๐ช ๐ โก ๐ ๏ธ ๐ข.
& ๐ ๐ช โ ๐ถ ๐ & ๐๏ธ ๐ ๐ โ ๐ ๐ ๐ ๐ฆ ๐ ๐ช, & ๐ ๏ธ ๐ซ โฎ๏ธ ๐ ๐ ๏ธ ๐ข ๐ฉโโคโ๐จ โธ ๐, ๐.
๐ ๐ ๐ ๐ผ ๐ โญ ๐, ๐ ๐ & โ ๐ฝ, ๐โโ, โ๏ธ.
FastAPI ๐¶
๐ฆ ๐ ๐ โ๏ธ โ FastAPI ๐ โฎ๏ธ:
- ๐ ๐ ๐ฝ
- โ ๐ฝ
- ๐ข ๐ฆ
- ๐ข ๐
- ๐ค & โ โ๏ธ
- ๐ ๏ธ โ๏ธ โ โ๏ธ
- ๐จ ๐ฝ ๐ โ๏ธ
- โ๏ธ.
๐ & ๐๏ธ¶
๐ ๐ ๐ ๐ โ๏ธ ๐ถ ๐ ๐ฌ & โ๏ธ, โซ๏ธ ๐ถ ๐๏ธ.
๐ ๐ช ๐ฌ ๐ ๐ ๐ ๐ช ๐ฌ ๐ ๐ซ.
๐, ๐ ๐ฒ ๐ ๐, & ๐ ๐ โ๏ธ โ ๐ ๐ฌ ๐ ๐ ๐ ๐ (& ๐ซ ๐ง-๐) & ๐ (๐) ๐ ๐ ๐.
๐ผ, โก๏ธ ๐ฌ ๐ โ๏ธ 4๏ธโฃ ๐ ๏ธ ๐ (โก ๐ ๏ธ):
/items/public/
/items/private/
/users/{user_id}/activate
/items/pro/
โคด๏ธ ๐ ๐ช ๐ฎ ๐ โ ๐ ๐ ๐ซ โฎ๏ธ ๐ & ๐ง-๐:
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
๐ ๏ธ โฎ๏ธ ๐¶
๐ ๐ซ ๐, โช ๐ฃ ๐ซ ๐, ๐ฎ ๐ข, ๐ฌ, โ๏ธ. ๐ โก ๐ ๏ธ.
FastAPI ๐ โ ๐ ๐ฎ โซ๏ธ ๐ ๐ ๐, ๐ โซ๏ธ ๐ฆ ๐ ๐งพ โ๏ธ.