Fast API ๊ณต๋ถํด๋ณด๊ธฐ #1 ํน์ง ๋ฐ ์ค์น
๋ฐฑ์๋๋ก Django, flask๋ง ์ฌ์ฉํ๋ค๊ฐ ๊ฐ๋ณ๊ฒ ์ฌ์ฉํ๊ธฐ์ Fast API๋ ์ข๋ค๊ณ ํ์ฌ ํ๋ฒ ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค. ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ํ๋ค. ์ฐ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ฃผ์๋ค. from fastapi import FastAPI
beomcoder.tistory.com
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
์ฌ๊ธฐ์ ๋์์ '/' ๋ค์์ ์ค๋ ๋ถ๋ถ์ ๋งํ๋ค.
https://example.com/items/foo ์์ /items/foo ๋ฅผ ๊ฒฝ๋ก๋ผ๊ณ ๋งํ๋ค.
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
์ด์ ํ๋ฒ ๊ฒฝ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํด๋ณผ๊น ํ๋ค.
{ }๋ก ๋ฌถ์ผ๋ฉด ๊ฒฝ๋ก๊ฐ ์๋๋ผ ๋งค๊ฐ๋ณ์๊ฐ ๋๋ค. ๊ทธ๋์ item_id๋ผ๋ ๋ณ์๋ก ๊ฐ์ ๋ฐ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ http://127.0.0.1:8000/items/foo ๋ผ๊ณ ์ธํฐ๋ท์ฐฝ์ ์ณ๋ณด๋ฉด ์ ๋ฐ์์จ๋ค.
์ฌ๊ธฐ์ ๊ฒฝ๋ก์ ์จ์ง ๊ฒ๋ค์ ์ ๋ถ stringํ์ด๋ค. ํ์ง๋ง ์ซ์๋ฅผ ํ๋ฒ์ ๋ฐ์์ค๊ณ ์ถ์๋๋ ์๋ค.
๊ทธ๋ฌ๋ฉด ๋งค๊ฐ๋ณ์์ ํ์ ์ ์ง์ ํด์ฃผ์ด ๋ฐ์ดํฐ ๋ณํ์ ํ๋ฉด ๋๋ค.
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
์ด๋ ๊ฒ ์ฐ๋ฉด ์ข์์ ์ ์ํ๋ ํ์ ์ผ๋ก๋ง ๋ฐ์ ์ ์๋ค.
์๋๋ฐฉ์ด intํ์ธ๋ฐ ๋ฌธ์๋ฅผ ์ ๋ ฅํ๋ค๋ฉด ์๋ฌ๋ฉ์์ง๋ฅผ ์ถ๋ ฅ์์ผ ์๋ชป ๋ณด๋๋ค๊ณ ์๋ ค์ค๋ค.
intํ์ผ๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ floatํ๋ ํ์ ์ ์๋ชป ๋ณด๋๋ค๊ณ ์๋ ค์ค๋ค.
docs๋ฅผ ํ์ธํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ํจ์๋ฅผ ์ ๊ธฐ๋ง ํ์ ๋ฟ์ธ๋ฐ ๋ฌธ์๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด์ก๋ค.
์ด๋ค ์์ผ๋ก ํธ์ถํด์ผํ๋์ง ์๋ ค์ฃผ๊ณ item_id๋ ํ์๋ผ๊ณ ์๋ ค์ฃผ๊ณ intํ์ ์ path์ ์ ์ด์ผ ํ๋ค๊ณ ์๋ ค์ค๋ค.
์ฌ๊ธฐ์ ์ด์ ๋ฌธ์ ๊ฐ ํ๋ ์๊ธด๋ค.
๋ง์ฝ /users/login ๋ก ๋ก๊ทธ์ธ์ ํ๊ณ , /users/{id} ๋ก ์ ์ ๋ฅผ ํ์ธํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๊ทธ๋ ๋ค๋ฉด ์์๋ฅผ /users/login ์ ๋จผ์ ์์ฑํด์ฃผ์ด์ผ ํ๋ค.
์ฝ๋๋ ์์์๋ถํฐ ์๋๋ก ์ฝ๊ธฐ ๋๋ฌธ์ if๋ฌธ์ ์๊ฐํด๋ณด๋ฉด ๋๋ค.
n = 10
if n > 0:
print('if')
elif n> 5:
print('elif')
n์ 10์ด๋ผ์ if์ elif๋ฅผ ๋๋ค ๋ง์กฑํ์ง๋ง ๋จผ์ ์์์ ๋ง์กฑํด์ elif๋ฅผ ๊ฐ์ง ์๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ฝ๋ ์ดํฐ๋ ๊ฐ์ ๋ฐฉ์์ด๋ค.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/login")
async def user_login():
return True
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
์ด๋ ๊ฒ ์ ๋๋ค๋ฉด login์ ๋จผ์ ํ์ธํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์๋ค.
๋ฏธ๋ฆฌ ๋ณ์๊ฐ๋ค์ ์ ํด์ค ์๋ ์๋ค. ์ง๊ธ์ user_id๊ฐ ์๋ฌด๊ฐ์ด๋ ๋ค์ด๊ฐ๋ ๊ด์ฐฎ์๋ค.
from enum import Enum
from fastapi import FastAPI
class VersionName(str, Enum):
v5 = "v5"
v7 = "v7"
v8 = "v8"
app = FastAPI()
@app.get("/models/yolo{model_name}")
async def get_model(model_name: VersionName):
if model_name is VersionName.v5:
return {"version_name": model_name, "message": "v5!"}
if model_name.value == "v7":
return {"model_name": model_name, "message": "v7!"}
return {"model_name": model_name, "message": "v8!"}
YOLO ๋ฒ์ ์์ ๋ด๊ฐ ํ์ฌ ๊ฐ์ง๊ณ ์์ง ์๋ ๋ฒ์ ์ ๋ถ๋ ์ผ๋ฉด ์๋ฌ๋ฅผ ํธ์ถํ๋ค.
๋ค์์ ์ด์ REST API๋ก ํ๋ฒ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.
'๐๐ฎ๐ฉ๐๐ค๐ฃ > ๐๐๐จ๐ฉ ๐ผ๐๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Fast API๋ก ๋ฐฑ์๋์๋ฒ ๋ง๋ค๊ธฐ [1] (1) | 2023.10.26 |
---|---|
Fast API ๊ณต๋ถํด๋ณด๊ธฐ #4 body ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ๊ธฐ (0) | 2023.02.23 |
Fast API ๊ณต๋ถํด๋ณด๊ธฐ #3 pydantic, query, request body (0) | 2023.02.23 |
Fast API ๊ณต๋ถํด๋ณด๊ธฐ #1 ํน์ง ๋ฐ ์ค์น (0) | 2023.02.22 |
๋๊ธ