๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐™‹๐™ฎ๐™ฉ๐™๐™ค๐™ฃ/๐™๐™–๐™จ๐™ฉ ๐˜ผ๐™‹๐™„

Fast API ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ #2 ๊ฒฝ๋กœ ๋™์ž‘ ์ƒ์„ฑ

by beomcoder 2023. 2. 22.
728x90
๋ฐ˜์‘ํ˜•
 

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๋กœ ํ•œ๋ฒˆ ์‚ฌ์šฉํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€