FastAPI๋ ํ๋์ ์ด๊ณ , ๋น ๋ฅด๋ฉฐ(๊ณ ์ฑ๋ฅ), ํ์ด์ฌ ํ์ค ํ์ ํํธ์ ๊ธฐ์ดํ Python3.6+์ API๋ฅผ ๋น๋ํ๊ธฐ ์ํ ์น ํ๋ ์์ํฌ์ด๋ค.
1. ๋ช ๋ น ํ๋กฌํํธ(cmd)์์ fastapi ์ค์น
pip install fastapi
2. ๋ช ๋ น ํ๋กฌํํธ(cmd)์์ uvicorn ์ค์น
pip install uvicorn[standard]
Uvicorn
Uvicorn์ uvloop ๋ฐ httptools๋ฅผ ์ฌ์ฉํ๋ Python์ฉ ASGI ์น ์๋ฒ์ด๋ค.
๋ค์์ FastAPI์ ์ฝ๋ ๊ธฐ๋ณธ ์์์ด๋ค.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def ํจ์์ด๋ฆ():
return '๋ณด๋ผ ๊ฐ'
๋จผ์ FastAPI๋ฅผ importํ ๋ค์, @app.get("/")
์ผ๋ก ํด๋น "/"
ํ์ด์ง์ ์ฌ์ฉ์๊ฐ ์ ์ํ์ ๋์ ๊ธฐ๋ฅ์ ์์ฑํ๋ค.
uvicorn main:app --reload
๋ค์์ ์๋ฒ๋ฅผ ์คํ์ํค๋ ๋ช
๋ น์ด๋ก, ๋ช
๋ น ํ๋กฌํํธ(cmd)์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์น๋ฉด ํ๋ฉด๊ณผ ๊ฐ์ด ์๋ฒ๊ฐ ๊ตฌ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
๊ณต์ ์ฌ์ดํธ์ ์์์ธ ์ด ์ฝ๋๋ฅผ ๋๋ฆฌ๊ฒ ๋๋ฉด,
http://127.0.0.1:8000/
๊ฒฝ๋ก๊ฐ "/"
๋ก ๋ง์ถฐ์ง ์ด ๋งํฌ์์๋ {"Hello":"World"}
์๋ต์,
http://127.0.0.1:8000/items/5?q=somequery
๊ฒฝ๋ก๊ฐ "/items/{item_id}"
๋ก ๋ง์ถฐ์ง ์ด ๋งํฌ์์๋ {"item_id": 5, "q": "somequery"}
์๋ต์ ํ์ธํ ์ ์๋ค.
FastAPI๋ ์๋ฒ ์น ํ๋ ์์ํฌ ์ค ๊ฐ์ฅ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ฐฐ์ธ ์ ์๋ ๊ฒ ์๋๊น ์ถ๋ค. HTML ํ์ผ์ ์ ์กํ๊ฑฐ๋, ์ ์ ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๋ฑ ์ฌํ์ ์ผ๋ก ๊ณต๋ถ๋ง ํ๋ค๋ฉด ๋ค์ํ ๊ธฐ๋ฅ์ ์์ํ๊ฒ ์ธ ์ ์์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.