본문 바로가기
Fastapi

FastAPI 자습서 스터디 기록 (설치 및 경로 매개변수, 쿼리 매개변수)

by Django_ 2022. 6. 12.
반응형

최초 설치

# 의존성 패키지까지 설치
pip install fastapi[all]

uvicorn main:app --reload

FastAPI는 docs (Swagger)와 redoc을 제공합니다.

출처 - Fastapi 공식 문서

# 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

 

반응형

댓글