from fastapi import FastAPI
app = FastAPI() # fastapi 클래스의 인스턴스(app) 생성
uvicorn main:app --reload
: uvicorn [file name]:[instance name] --reload
/
.get
.@app.get("/")
).@app.get("/")
@app.post()
@app.put()
@app.delete()
async
function [link]general
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
predefined values
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
# path parameter에 사용할 수 있는 값을 미리 정의
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
의 타입은 지정한 ModelName의 타입
만 가능하다.For example, in the URL: http://127.0.0.1:8000/items/?skip=0&limit=10
defualt 가 정해진 경우
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]
required
query parameters
+
validation도 자동으로 이루어짐)optional
query parameters
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None, short: bool = False):
# type of q as query parameter is str or None (default: None)
# Union == anyOf : 두가지 타입 지정 가능, 첫번째 타입은 두 번째 타입보다 좀 더 중요하고 명시하고 싶은 타입으로 선언
# optional query parameter를 표현할 때 Union을 사용
item = {"item_id": item_id}
if q:
item.update({"q": q})
if not short:
item.update(
{"description": "This is an amazing item that has a long description"}
)
return item
Union
을 상속 받음
Union[str, None](python ver.3.6)
과 str | None (python ver.3.10)
같은 의미
: 두 가지 타입 지정 가능, 첫 번째 타입은 두 번째 타입보다 좀 더 중요하고 명시하고 싶은 타입으로 선언‘optional' parameter
이다.query parameters with default value ← optional
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_user_item(
item_id: str, needy: str, skip: int = 0, limit: Union[int, None] = None
):
item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
return item
optional query parameter : 'None' or 'Query(default=None)' or 'Query(default="fixedquery")'
: 기본값이 있으면 매개변수도 선택사항이 됨path → query
그리고 required → optional
참고: https://velog.io/@baeyuna97/FastAPI-Query-Parameters-and-String-Validations
Query
을 상속 받음
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(
q: str
| None = Query(default=None, min_length=3, max_length=50, regex="^fixedquery$")
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
Query(default=..., min_length=3)
⇒ required
→ 줄임표 표시(default=...,): 해당 파라미터 ‘필수’Deprecating parameters : deprecated=True
: 사용하는 클라이언트가 있어서, (잠시동안) 그대로 두어야 하지만, 문서에서는 사용되지 않는 것으로 명확하게 표시
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(
q: str
| None = Query(
default=None,
alias="item-query",
title="Query string",
description="Query string for the items to search in the database that have a good match",
min_length=3,
max_length=50,
regex="^fixedquery$",
deprecated=True,
)
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results