FastAPI main 기초 예제
정리. 수알치 오상문
FastAPI 공식 사이트 : https://fastapi.tiangolo.com
fastapi 설치
$ pip install fastapi
uvicorn 설치
$ pip install uvicorn
main.py 작성
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return { "message" : "Hello World" }
fastapi + uvicorn 실행 # 기본 포트 8000
$ uvicorn main:app --reload --host=0.0.0.0 --port=80
>> app : main.py에 있는 app=FastAPI()
>> --reload : 코드 변경 시 자동 저장 재시작
>> --host : 모든 접근이 가능하려면 0.0.0.0
>> --port : 접속 포트 설정
서버 접속
- localhost:8000
- 80번 포트는 localhost 또는 127.0.0.1 접속
- 자동 생성 문서 확인: localhost:8000/docs ocalhost/docs
request 테스트를 위한 main.py 작성
from typing import Optional
from fastapi import FastAPI
# from pydantic import BaseModel
app = FastAPI()
@app.get("/")
async def root():
return {"message": "API Help: .../docs"} # http://127.0.0.1/req/5?q=somequery
@app.get("/req/{req_id}")
def req(req_id: int, q: Optional[str] = None):
return {"request_id": req_id, "q": q}
서버 실행
uvicorn main:app --reload --host=0.0.0.0 --port=80
테스트 (80번 포트 아니면 기본 :8000 사용)
http://127.0.0.1
http://127.0.0.1/req/5
http://127.0.0.1/req/5?q=somequery
http://127.0.0.1/docs # 테스트
http://127.0.0.1/redoc # API 문서
API 서버에 요청하는 파이썬 파일
import requests
import json
url = "http://localhost/req/" # 요청 url 주소
data = {"req_id": 100} # 요청 데이터
res = request.post(url, data=json.dumps(data)) # post로 API 서버에 요청
print(res.text) # return으로 req 내용을 그대로 보냈기에, 입력 데이터가 json 형태로 보여진다.
PUT 요청 본문(Body)을 받응 main.py
Pydantic을 이용해 파이썬 표준 타입으로 본문을 선언합니다.
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
POST 처리하기
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
# return item # : string
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
return item_dict
JSON 호환 처리 ?
from datetime import datetime
from typing import Optional
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
class Item(BaseModel):
title: str
timestamp: datetime
description: Optional[str] = None
fake_db = {} # 가짜 DB
app = FastAPI()
@app.put("/items/{id}")
def update_item(id: str, item: Item):
json_compatible_item_data = jsonable_encoder(item)
fake_db[id] = json_compatible_item_data # 가짜 DB 업데이트
<이상>
'FastAPI' 카테고리의 다른 글
pydantic 레퍼런스 사이트 (FastAPI 모델 관련) (0) | 2021.12.11 |
---|---|
FastAPI, SQLAlchemy, MySQL 연동 예제 (0) | 2021.12.11 |
FastAPI 서버 구축기 (by ssoyyoung ) (0) | 2021.12.04 |
파이썬 웹 프레임워크 FastAPI 공식사이트 (0) | 2021.12.04 |
FastAPI 기초 동영상 (0) | 2021.12.04 |