Developer's Development
3.4.10 [Django] Fast API (RESTful API) 본문
Rest API
REST(Represential State Transfer)는 API 작동 방식에 대해 조건을 부과하는 소프트웨어 아키텍처를 의미한다.
REST는 처음 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌다.
자원을 정의하고, 자원에 대한 주소를 지정하여, 별도의 전송 계층 없이 전송하기 위한 인터페이스를 의미한다.
Fast API
cmd
(django_env) C:\skn_17\back_end>pip install fastapi uvicorn
fast_api/01_hello.py 생성
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello FastAPI World"}
# GET /hello -> {"message": "Hello?"}
@app.get("/hello/{name}")
async def say_hello(name: str):
return {"message": f"Hello? {name}!"}
cmd
cd fast_api
uvicorn 01_hello:app --reload
fast_api/test_fast_api.http 생성 후 Send Request
GET http://127.0.0.1:8000
Accept: application/json
###
GET http://127.0.0.1:8000/hello/maenggu
Accept: application/json
- Path Variable, Query String, Request Body
fast_api/main.py 생성
from fastapi import FastAPI
from path_params import router as path_params_router
from query_params import router as query_params_router
from request_body import router as request_body_router
app = FastAPI()
app.include_router(router=path_params_router)
app.include_router(router=query_params_router)
app.include_router(router=request_body_router)
fast_api/path_params.py 생성
from fastapi import APIRouter
router = APIRouter(prefix='/path_params', tags=['path_params'])
@router.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
"""
경로 작동은 순차적으로 실행됨
"""
@router.get("/users/me")
async def read_user_me():
return {'user_id': "current user == me"}
@router.get("/users/{user_id}")
async def read_user(user_id: str):
return {'user_id': {user_id}}
fast_api/query_params.py 생성
from fastapi import APIRouter
router = APIRouter(prefix='/query_params', tags=['query_params'])
fake_item_db = [{"item_name": "김밥"}, {"item_name": "떡볶이"}, {"item_name": "순대"}]
@router.get('/items')
async def read_item(skip: int = 0, limit: int = 0):
return fake_item_db[skip : skip+limit]
@router.get('/products/{product_id}')
async def read_product(product_id: str, q: str | int = None):
if q:
return {"product_id": product_id, "q": q}
return {"product_id": product_id}
fast_api/request_body.py 생성
from fastapi import APIRouter
from pydantic import BaseModel # 데이터 검증
router = APIRouter(prefix='/request_body', tags=['request_body'])
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@router.post('/items')
async def create_item(item: Item):
return item
# Path Variable, QueryString Parameters, Request Body를 섞어 사용해도 잘 구분함
@router.put('/items/{item_id}')
async def update_item(item_id: int, item: Item, q: str | None = None):
result = {"item_id": item_id, **item.model_dump()}
if q:
result.update({"q": q})
return result
cmd
uvicorn main:app --reload
fast_api/test_fast_api.http 코드 추가 후 Send Request
###
GET http://127.0.0.1:8000/path_params/items/123
Accept: application/json
###
GET http://127.0.0.1:8000/path_params/users/me
Accept: application/json
###
GET http://127.0.0.1:8000/query_params/items?skip=0&limit=2
Accept: application/json
###
GET http://127.0.0.1:8000/query_params/products/123?q=test
Accept: application/json
###
POST http://127.0.0.1:8000/request_body/items
Content-Type: application/json
{
"name": "MacBook Pro",
"description": "M3 Pro 14인치",
"price": 2999.99,
"tax": 300
}
###
PUT http://127.0.0.1:8000/request_body/items/123?q=hello
Content-Type: application/json
{
"name": "MacBook Pro",
"description": "M3 Pro 14인치",
"price": 2999.99,
"tax": 300
}
'AI 활용 애플리케이션 개발 > Django Framework' 카테고리의 다른 글
| 3.4.9 [Django] Class-based View(CBV) (0) | 2025.10.19 |
|---|---|
| 3.4.8 [Django] Form 처리 (0) | 2025.10.19 |
| 3.4.7 [Django] Model-DB 연동 (0) | 2025.10.19 |
| 3.4.6 [Django] View-Template 연동 (0) | 2025.10.16 |