반응형
최초 설치
# 의존성 패키지까지 설치
pip install fastapi[all]
uvicorn main:app --reload
FastAPI는 docs (Swagger)와 redoc을 제공합니다.
# path, 경로라고 합니다.
# domain.com/ 뒤로
https://example.com/items/foo
경로 = /items/foo
"경로"는 일반적으로 "앤드포인트" 또는 "라우트"라고도 불립니다.
대표적인 HTTP 메소드 POST, GET, PUT, DELETE 가 있으며,OPTIONS, HEAD, PATCH, TRACE 옵션들이 더 있습니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
async = 비동기
get. 동작입니다.
@app.get = 데코레이터
# 타입이 없는 경우
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
# 타입이 있는 경우
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
타입을 선언하면 오류검사 및 자동완성 편집기를 지원합니다.
# http://127.0.0.1:8000/items/foo 이러한 호출을 하면 아래와 같은 오류를 볼 수 있습니다.
{
"detail": [
{
"loc": [
"path",
"item_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
데이터 검증은 Pydantic을 사용하는데 자세한Pydantic은 차차 언급이 되니 그렇게 스터디하면 될것 같습니다.
# 순서의 중요성
@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}
순차적으로 진행이 되기때문에 me가 정이되어있지 않다면 user_id 가 me로 인식하기때문입니다.
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 == 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"}
# 열거형은 Enum 파이썬 버전 3.4 이후로 사용가능합니다.
예를들어 home/johndoe/myfile.txt와 같은 파일 경로를 전달할 경우
@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
return {"file_path": file_path}
매개변수가 /home/johndoe/myfile.txt를 갖고 있어 슬래시로 시작(/)해야 할 수 있습니다.
이 경우 URL은: /files//home/johndoe/myfile.txt이며 files과 home 사이에 이중 슬래시(//)가 생깁니다.
경로 매개변수의 일부가 아닌 다른 함수 매개변수를 선언할 때, "쿼리" 매개변수로 자동 해석합니다.
from fastapi import FastAPI
app = FastAPI()
fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
return fake_items_db[skip : skip + limit]
# http://127.0.0.1:8000/items/?skip=0&limit=10
# URL은 문자열로 처리됩니다.
선택적 매개변수와 기본값을 설정할 수 있습니다.
@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None):
if q:
return {"item_id": item_id, "q": q}
return {"item_id": item_id}
# Boolean도 가능합니다.
short: bool = False
True 인식을 하는 매개변수는 아래와 같습니다.
http:// .... /foo?short=1
http:// .... /foo?short=True
http:// .... /foo?short=true
http:// .... /foo?short=on
http:// .... /foo?short=yes
필수 쿼리 매개변수
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_user_item(item_id: str, needy: str):
item = {"item_id": item_id, "needy": needy}
return item
반응형
'Fastapi' 카테고리의 다른 글
FastAPI 자습서 스터디 기록 (Response Model) (0) | 2022.06.14 |
---|---|
FastAPI 자습서 스터디 기록 (Header Parameters) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (Multiple Parameters, Nested Models) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (Query Parameters and String and numeric Validations, ) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (Request Body, Pydantic) (0) | 2022.06.12 |
댓글