โก ๐ข¶
๐ ๐ช ๐ฃ โก "๐ข" โ๏ธ "๐ข" โฎ๏ธ ๐ โ โ๏ธ ๐ ๐ ๐ป:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
๐ฒ โก ๐ข item_id
๐ ๐ถโโ๏ธ ๐ ๐ข โ item_id
.
, ๐ฅ ๐ ๐ ๐ ๐ผ & ๐ถ http://127.0.0.1:8000/items/foo, ๐ ๐ ๐ ๐จ:
{"item_id":"foo"}
โก ๐ข โฎ๏ธ ๐¶
๐ ๐ช ๐ฃ ๐ โก ๐ข ๐ข, โ๏ธ ๐ฉ ๐ ๐ โ:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
๐ ๐ผ, item_id
๐ฃ int
.
Check
๐ ๐ ๐ค ๐ ๐จโ๐จ ๐โ๐ฆบ ๐ ๐ ๐ข, โฎ๏ธ โ โ , ๐ ๏ธ, โ๏ธ.
๐ฝ ๐ ๏ธ¶
๐ฅ ๐ ๐ ๐ ๐ผ & ๐ ๐ ๐ฅ http://127.0.0.1:8000/items/3, ๐ ๐ ๐ ๐จ:
{"item_id":3}
Check
๐ ๐ ๐ฒ ๐ ๐ข ๐จ (& ๐จ) 3
, ๐ int
, ๐ซ ๐ป "3"
.
, โฎ๏ธ ๐ ๐ ๐, FastAPI ๐ค ๐ ๐ง ๐จ "โ".
๐ฝ ๐ฌ¶
โ๏ธ ๐ฅ ๐ ๐ถ ๐ฅ http://127.0.0.1:8000/items/foo, ๐ ๐ ๐ ๐ ๐บ๐ธ๐ โ:
{
"detail": [
{
"loc": [
"path",
"item_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
โฉ๏ธ โก ๐ข item_id
โ๏ธ ๐ฒ "foo"
, โ ๐ซ int
.
๐ โ ๐ ๐ ๐ฅ ๐ ๐ float
โฉ๏ธ int
,: http://127.0.0.1:8000/items/4.2
Check
, โฎ๏ธ ๐ ๐ ๐ ๐, FastAPI ๐ค ๐ ๐ฝ ๐ฌ.
๐ ๐ โ ๐ฏ ๐ต๐ธ โซ๏ธโ โ ๐โ ๐ฌ ๐ซ ๐ถโโ๏ธ.
๐ ๐ ๐ โช ๐ ๏ธ & ๐ ๏ธ ๐ ๐ ๐ โฎ๏ธ ๐ ๐ ๏ธ.
๐งพ¶
& ๐โ ๐ ๐ ๐ ๐ฅ http://127.0.0.1:8000/docs, ๐ ๐ ๐ ๐ง, ๐, ๐ ๏ธ ๐งพ ๐:
Check
๐, โฎ๏ธ ๐ ๐ ๐ ๐ ๐, FastAPI ๐ค ๐ ๐ง, ๐ ๐งพ (๐ ๏ธ ๐ฆ ๐).
๐ ๐ โก ๐ข ๐ฃ ๐ข.
๐ฉ-โ๏ธ ๐ฐ, ๐ ๐งพ¶
& โฉ๏ธ ๐ ๐ โช๏ธโก๏ธ ๐ ๐ฉ, ๐ค ๐ ๐ ๐งฐ.
โฉ๏ธ ๐, FastAPI โซ๏ธ ๐ ๐ ๐ ๏ธ ๐งพ (โ๏ธ ๐), โ ๐ ๐ช ๐ http://127.0.0.1:8000/redoc:
๐ ๐, ๐ค ๐ ๐ ๐งฐ. โ ๐ โก ๐งฐ ๐ ๐ช๐ธ.
Pydantic¶
๐ ๐ฝ ๐ฌ ๐ญ ๐ฝ ๐ Pydantic, ๐ ๐ค ๐ ๐ฐ โช๏ธโก๏ธ โซ๏ธ. & ๐ ๐ญ ๐ ๐ โ.
๐ ๐ช โ๏ธ ๐ ๐ ๐ โฎ๏ธ str
, float
, bool
& ๐ ๐ ๐ ๐ ๐.
๐ ๐ซ ๐ฌ โญ ๐ ๐ฐ.
โ ๐ค¶
๐โ ๐ โก ๐ ๏ธ, ๐ ๐ช ๐ โ ๐โ ๐ โ๏ธ ๐ง โก.
๐ /users/me
, โก๏ธ ๐ฌ ๐ โซ๏ธ ๐ค ๐ ๐ โฎ๏ธ ๐ฉโ๐ป.
& โคด๏ธ ๐ ๐ช โ๏ธ โก /users/{user_id}
๐ค ๐ฝ ๐ ๐ฏ ๐ฉโ๐ป ๐ฉโ๐ป ๐.
โฉ๏ธ โก ๐ ๏ธ ๐ฌ โ, ๐ ๐ช โ ๐ญ ๐ โก /users/me
๐ฃ โญ 1๏ธโฃ /users/{user_id}
:
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"}
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
โช, โก /users/{user_id}
๐ ๐ /users/me
, "๐ญ" ๐ โซ๏ธ ๐จ ๐ข user_id
โฎ๏ธ ๐ฒ "me"
.
โก, ๐ ๐ซ๐ โ โก ๐ ๏ธ:
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
async def read_users():
return ["Rick", "Morty"]
@app.get("/users")
async def read_users2():
return ["Bean", "Elfo"]
๐ฅ ๐ ๐ ๐ง โ๏ธ โฉ๏ธ โก ๐ ๐ฅ.
๐ ๐ฒ¶
๐ฅ ๐ โ๏ธ โก ๐ ๏ธ ๐ ๐จ โก ๐ข, โ๏ธ ๐ ๐ ๐ช โ โก ๐ข ๐ฒ ๐, ๐ ๐ช โ๏ธ ๐ฉ ๐ Enum
.
โ Enum
๐¶
๐ Enum
& โ ๐ง-๐ ๐ ๐ โช๏ธโก๏ธ str
& โช๏ธโก๏ธ Enum
.
๐ โช๏ธโก๏ธ str
๐ ๏ธ ๐ฉบ ๐ ๐ช ๐ญ ๐ ๐ฒ ๐ ๐ string
& ๐ ๐ช โ โ.
โคด๏ธ โ ๐ ๐ข โฎ๏ธ ๐ง ๐ฒ, โ ๐ ๐ช โ ๐ฒ:
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name is ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
if model_name.value == "lenet":
return {"model_name": model_name, "message": "LeCNN all the images"}
return {"model_name": model_name, "message": "Have some residuals"}
Info
๐ข (โ๏ธ ๐ข) ๐ช ๐ โฉ๏ธ โฌ 3๏ธโฃ.4๏ธโฃ.
Tip
๐ฅ ๐ ๐ญ, "๐", "๐", & "๐" ๐ ๐ฐ ๐ซ ๐ท.
๐ฃ โก ๐ข¶
โคด๏ธ โ โก ๐ข โฎ๏ธ ๐ โ โ๏ธ ๐ข ๐ ๐ โ (ModelName
):
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name is ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
if model_name.value == "lenet":
return {"model_name": model_name, "message": "LeCNN all the images"}
return {"model_name": model_name, "message": "Have some residuals"}
โ ๐ฉบ¶
โฉ๏ธ ๐ช ๐ฒ โก ๐ข ๐ข, ๐ ๐ฉบ ๐ช ๐ฆ ๐ซ ๐:
๐ท โฎ๏ธ ๐ ๐ข¶
๐ฒ โก ๐ข ๐ ๐ข ๐จโ๐.
๐ฌ ๐ข ๐จโ๐¶
๐ ๐ช ๐ฌ โซ๏ธ โฎ๏ธ ๐ข ๐จโ๐ ๐ โ ๐ข ModelName
:
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name is ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
if model_name.value == "lenet":
return {"model_name": model_name, "message": "LeCNN all the images"}
return {"model_name": model_name, "message": "Have some residuals"}
๐ค ๐ข ๐ฒ¶
๐ ๐ช ๐ค โ ๐ฒ ( str
๐ ๐ผ) โ๏ธ model_name.value
, โ๏ธ ๐ข, your_enum_member.value
:
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name is ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
if model_name.value == "lenet":
return {"model_name": model_name, "message": "LeCNN all the images"}
return {"model_name": model_name, "message": "Have some residuals"}
Tip
๐ ๐ช ๐ ๐ฒ "lenet"
โฎ๏ธ ModelName.lenet.value
.
๐จ ๐ข ๐จโ๐¶
๐ ๐ช ๐จ ๐ข ๐จโ๐ โช๏ธโก๏ธ ๐ โก ๐ ๏ธ, ๐ฆ ๐ป ๐ช (โ
dict
).
๐ซ ๐ ๐ ๐ซ ๐ ๐ฒ (๐ป ๐ ๐ผ) โญ ๐ฌ ๐ซ ๐ฉโ๐ป:
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name is ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
if model_name.value == "lenet":
return {"model_name": model_name, "message": "LeCNN all the images"}
return {"model_name": model_name, "message": "Have some residuals"}
๐ ๐ฉโ๐ป ๐ ๐ ๐ค ๐ป ๐จ ๐:
{
"model_name": "alexnet",
"message": "Deep Learning FTW!"
}
โก ๐ข โ โก¶
โก๏ธ ๐ฌ ๐ โ๏ธ โก ๐ ๏ธ โฎ๏ธ โก /files/{file_path}
.
โ๏ธ ๐ ๐ช file_path
โซ๏ธ ๐ โก, ๐ home/johndoe/myfile.txt
.
, ๐ ๐ ๐ ๐ ๐ณ ๐: /files/home/johndoe/myfile.txt
.
๐ ๐โ๐ฆบ¶
๐ ๐ซ ๐โ๐ฆบ ๐ ๐ฃ โก ๐ข ๐ โก ๐, ๐ ๐ช โ๏ธ ๐ ๐ โ ๐ฏ & ๐ฌ.
๐, ๐ ๐ช โซ๏ธ FastAPI, โ๏ธ 1๏ธโฃ ๐ ๐งฐ โช๏ธโก๏ธ ๐.
& ๐ฉบ ๐ ๐ท, ๐ ๐ซ โ ๐ ๐งพ ๐ฌ ๐ ๐ข ๐ ๐ โก.
โก ๐¶
โ๏ธ ๐ ๐ โช๏ธโก๏ธ ๐ ๐ ๐ช ๐ฃ โก ๐ข โ โก โ๏ธ ๐ ๐:
/files/{file_path:path}
๐ ๐ผ, ๐ ๐ข file_path
, & ๐ ๐, :path
, ๐ฌ โซ๏ธ ๐ ๐ข ๐ ๐ ๐ โก.
, ๐ ๐ช โ๏ธ โซ๏ธ โฎ๏ธ:
from fastapi import FastAPI
app = FastAPI()
@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
return {"file_path": file_path}
Tip
๐ ๐ช ๐ช ๐ข ๐ /home/johndoe/myfile.txt
, โฎ๏ธ ๐ ๐ช (/
).
๐ ๐ผ, ๐ ๐: /files//home/johndoe/myfile.txt
, โฎ๏ธ 2๏ธโฃโ๏ธ ๐ช (//
) ๐ files
& home
.
๐¶
โฎ๏ธ FastAPI, โ๏ธ ๐, ๐๏ธ & ๐ฉ ๐ ๐ ๐, ๐ ๐ค:
- ๐จโ๐จ ๐โ๐ฆบ: โ โ , โ, โ๏ธ.
- ๐ฝ "โ"
- ๐ฝ ๐ฌ
- ๐ ๏ธ โ & ๐ง ๐งพ
& ๐ ๐ด โ๏ธ ๐ฃ ๐ซ ๐.
๐ ๐ฒ ๐ โญ ๐ FastAPI ๐ฌ ๐ ๐ ๏ธ (โ๏ธ โช๏ธโก๏ธ ๐ฃ ๐ญ).