본문 바로가기

Python Web Framework/FastAPI

[FastAPI] FastAPI 서버 구축기

반응형

이번 포스팅은 FastAPI를 사용하여

파이썬기반 Rest API 서버를 구축하는 내용

 

 

 

 

FastAPI 공식 사이트 : https://fastapi.tiangolo.com

 

FastAPI

FastAPI FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fastapi.tiangolo.com Source Code: https://github.com/tiangolo/fastapi FastAPI is a modern, fast (high-performance), web framework for buil

fastapi.tiangolo.com

 

 

FastAPI란, 

" 공식 사이트에 나와있는 설명에 따르면,

FastAPI는 파이썬 3.6+ 으로 API서버를 구축하기 위한 모던하고, 빠른 웹 프레임 워크이다 "

 

 

주 특징으로는 아래와 같다.

- Fast : 굉장히 빠른 퍼포먼스

- Fast to code : 대략 200에서 300%정도 개발하는 속도를 향상시킴

- Fewer bugs : 대략 40%정도의 에러를 감소시킴

- Intuitive : 에디터 지원이 좋음. 디버깅하는데 속도를 줄여주고 어디든 완성되어있음.

- Easy : 사용하고 배우기 편하게 디자인 되어있음. docs를 읽는 시간을 줄여줌

- Short : 코드의 반복을 최소화함. 

- Robust : 프로덕션 단계 준비가 된 코드. 자동으로 문서를 생성해줌

- Standards-based : API를 위한 오픈 스탠다드를 기준으로 함

 

위와 같이 공식문서에 내용이고, 실제로 사용해보며 다른 파이썬 기반 웹 프레임워크들과 비교 해 볼 예정

 

 

FastAPI 빠르게 시작하기

fastapi 설치

$ pip install fastapi

- 가장 기본이 되는 fastapi를 먼저 설치한다.

 

uvicorn 설치

$ pip install uvicorn

- fastapi와 함께 사용하는 uvicorn도 설치해준다.

 

실행을 위한 main.py 작성

$ vi main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
	return { "message" : "Hello World" }

- 빠르게 사용해보기 위해 기본이 되는 main.py를 생성하고 아래 내용을 입력

 

fastapi + uvicorn 실행

$ uvicorn main:app --reload --host=0.0.0.0 --port=8000

- 위와 같이 명령어로 간단하게 만들어진 API 서버를 실행시킨다.

 

>> main : 여기서 main은 main.py의 main을 말한다

>> app : main.py안에 있는 app=FastAPI()

>> --reload : 코드 변경 시 자동으로 저장되어 재시작 됨

>> --host : 모든 접근이 가능하게 하려면 0.0.0.0을 입력한다

>> --port : 접속 원하는 포트를 지정해준다.

 

서버 접속

- 실제로 localhost:8000 접속 시 아래와 같은 return을 확인 할 수 있다.

 

 

- 자동으로 생성되는 문서 확인 : localhost:8000/docs 접속

 

 

request 테스트를 위한 main.py 작성

$ vi main.py

from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
    
app = FastAPI()

@app.post('/items/')
async def create_item(item: Item):
	return item

- 테스트를 위한 main.py 재 작성

- 데이터를 정의하기 위한 class작성.

- 이때 데이터의 타입까지 다 정함.

 

실제로 API 서버에 요청

# jupyter notebook 에서 한 줄 씩 실행

# 1. 필요한 라이브러리 임포트
import requests
import json

# 2. 요청 보낼 url 주소
url = "http://localhost:8000/items/"

# 3. 같이 보낼 데이터 작성
data = {"name": "new_challenge", "description":"test1", "price":2020, "tax":2021}

# 4. post로 API서버에 요청보내기
res = request.post(url, data=json.dumps(data))

# 5. 결과 확인하기
res.text

- res.tex로 결과 확인하기

- return 으로 item을 보냈기 때문에, 입력한 데이터가 그대로 리턴 된다.

 

실행 결과 화면

 

반응형